۳۰ آذر ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

بازسازی کد هوش مصنوعی: خوب، بد و عجیب

برای اکثر توسعه دهندگان، حفظ و بازآفرینی کدهای قدیمی کار یک روزه است. اما در مورد زمانی که این کد توسط هوش مصنوعی نوشته شده بود چه می شود؟

برای اکثر توسعه دهندگان، حفظ و بازآفرینی کدهای قدیمی کار یک روزه است. اما در مورد زمانی که این کد توسط هوش مصنوعی نوشته شده بود چه می شود؟

هوش مصنوعی مولد دیگر در دنیای توسعه نرم افزار تازگی ندارد: به طور فزاینده ای به عنوان دستیار (و گاهی اوقات) استفاده می شود یک نماینده آزاد) به کدهایی را بنویسید که در تولید واقعی در حال اجرا هستند. اما هر توسعه دهنده ای می داند که نوشتن کد جدید از ابتدا تنها بخش کوچکی از کار روزانه آنهاست. بیشتر زمان یک توسعه‌دهنده صرف حفظ یک پایگاه کد موجود و بازآفرینی کد نوشته شده توسط دست‌های دیگر می‌شود.

وقتی این دست‌ها انسان نیستند یا توسط یک خلبان هوش مصنوعی؟ آیا ابزارهای هوش مصنوعی مانند GitHub Copilot، Vercel’s v0 یا Cursor IDE می توانند باشند. برای سبک کردن بار استفاده می شود؟ من با تمرین‌کنندگان دنیای واقعی صحبت کردم تا بفهمم این مرحله بعدی انقلاب هوش مصنوعی چگونه انجام می‌شود.

کد نوشته شده هوش مصنوعی: مفید، گاهی اوقات عجیب

همه توسعه دهندگانی که با آنها صحبت کردم درجات مختلفی از سودمندی هوش مصنوعی مولد را به عنوان بخشی از فرآیند توسعه ابراز کردند. آنها همچنین اذعان کردند که کدهای تولید شده توسط هوش مصنوعی ویژگی‌های خاص خود را دارند – و این ویژگی‌ها می‌توانند حفظ و بازسازی آن را دشوار کنند.

Dev Nag چندین سال است که در سنگر با ابزارهای کدنویسی AI کار می کند و مدیر عامل QueryPal است، یک شرکت نرم افزاری که بر تولید بلیط مبتنی بر هوش مصنوعی متمرکز است. او فرآیند بازسازی و حفظ کدهای تولید شده توسط هوش مصنوعی را به طرز شگفت انگیزی چالش برانگیز توصیف می کند. او می‌گوید: «کد غالباً در سبک و قراردادهای نام‌گذاری سازگاری ندارد، که می‌تواند باعث شود یک پایگاه کد از هم گسیخته شود. “من ساعت های زیادی را صرف تمیز کردن و استانداردسازی کدهای تولید شده توسط هوش مصنوعی برای مطابقت با قراردادهای یک پروژه کرده ام.”

Dhaval Gajjar، مدیر عامل شرکت خدمات فناوری اطلاعات و مشاوره Pranshtech Solutions، CTO شرکت توسعه SaaS Textdrip، و یک توسعه دهنده نرم افزار با تجربه، با این موضوع موافق است. او می‌گوید: «کد مبتنی بر هوش مصنوعی معمولاً از نظر نحوی صحیح است، اما اغلب فاقد وضوح یا صیقل است که از درک یک توسعه‌دهنده انسانی از بهترین شیوه‌ها ناشی می‌شود». “توسعه دهندگان اغلب برای خوانایی بهتر نیاز به پاکسازی نام متغیرها، ساده سازی منطق یا ساختار مجدد کد دارند.”

از نظر تراویس رل، مدیر ارشد فناوری Innovative Solutions، که سیستم‌های نسل بعدی را بر روی ابر مهاجرت می‌کند، مدرن می‌کند و می‌سازد، عجیب بودن کار با کدهای نوشته‌شده با هوش مصنوعی به منظور بازسازی یا حفظ آن می‌تواند عمیق‌تر شود. او می‌گوید: «وقتی هوش مصنوعی از الگوها یا کتابخانه‌های ناآشنا استفاده می‌کند، بازسازی بدون درک عمیق از این انتخاب‌ها می‌تواند چالش برانگیز باشد. همچنین خطر شکستن وابستگی های پیچیده ای که هوش مصنوعی ممکن است ایجاد کرده باشد، وجود دارد. قطعا تجربه متفاوتی است. شما اغلب با کدهایی کار می کنید که در عین حال آشنا و بیگانه هستند. هوش مصنوعی ممکن است از رویکردهایی استفاده کند که برای توسعه‌دهندگان انسانی غیر متعارف به نظر می‌رسند و به لحظات «چرا این کار را انجام داد؟» منجر شود.

Nag و Gajjar هر دو خاطرنشان می‌کنند که کد تولید شده توسط هوش مصنوعی می‌تواند پیچیده‌تر از کد نوشته شده توسط انسان باشد که به نتایج یکسانی می‌رسد. به گفته گجار، «ابزارهای AI برای مهندسی بیش از حد راه‌حل‌ها شناخته می‌شوند، به طوری که کد تولید شده حجیم‌تر از آن چیزی است که برای کارهای ساده باید باشد. اغلب مراحل اضافی وجود دارد که توسعه‌دهندگان باید آن‌ها را حذف کنند، یا باید یک ساختار ساده‌سازی شده برای کارایی و نگهداری به دست آورد.» ناگ می‌افزاید که هوش مصنوعی می‌تواند «دستورالعمل خطا و موارد لبه‌ای را که همیشه ضروری نیستند، ایجاد کند. مثل این است که سعی می‌کند هر چیزی را که می‌داند نشان دهد، حتی زمانی که یک راه‌حل ساده‌تر کافی است.»

راه‌حل‌های نوآورانه Rehl از آن قدردانی می‌کند. “هوش مصنوعی همچنین کارهایی مانند اضافه کردن انبوهی از تفسیرها در مورد عملکرد یک تابع را انجام می دهد. این یک شمشیر دو لبه است. اما به دفعه بعدی که از هوش مصنوعی استفاده می‌کنید فکر کنید: می‌خواهید توضیحی درباره هدف آن عملکرد داشته باشید که هوش مصنوعی بتواند بعداً دوباره بخواند تا زمینه کسب و کار اطراف آن را درک کند.

هوش مصنوعی غذای سگ خود را می خورد

با وجود این ویژگی‌ها، توسعه‌دهندگانی که با آنها صحبت کردم فکر می‌کردند که کدهای تولید شده توسط هوش مصنوعی در چرخه عمر توسعه نرم‌افزار جای خود را دارند. در واقع، آنها گفتند که ابزارهای هوش مصنوعی می توانند در فرآیند نگهداری و بازسازی کد مفید باشند. تا حدودی طعنه آمیز، ابزارهای هوش مصنوعی حتی می توانند برای غلبه بر برخی از نقص های موجود در کدهای هوش مصنوعی برای شروع استفاده شوند.

به عنوان مثال، Rehl در Innovative Solutions ابزارهای هوش مصنوعی را هم برای تجزیه و تحلیل کد و هم برای بازآفرینی خودکار به کار می گیرد. او گفت: «هوش مصنوعی می‌تواند به سرعت پایگاه‌های کد بزرگ را تجزیه و تحلیل کند و مناطقی را که نیاز به بازسازی، اشکالات احتمالی یا فرصت‌های بهینه‌سازی دارند، شناسایی کند. ابزارهای هوش مصنوعی می‌توانند برای کارهای ساده‌تر بازسازی، مانند تغییر نام متغیرها یا استخراج روش‌ها، این عملیات را در کل پایگاه کد با دقت بالا انجام دهند. ناگ QueryPal خاطرنشان کرد که او “از هوش مصنوعی برای تغییرات در یک پایگاه کد، مانند به‌روزرسانی تماس‌های API منسوخ شده، به‌طور موثر استفاده کرده است.”

از آنجایی که ابزارهای هوش مصنوعی در دسترس تجاری بر اساس بهترین شیوه‌ها و الگوهایی که از پایگاه‌های کد گسترده آموخته‌اند آموزش دیده‌اند، می‌توان از آنها برای پیشنهاد بهبودهایی استفاده کرد که ممکن است فوراً برای چشم انسان آشکار نباشد. ناگ گفت: “ابزارهای هوش مصنوعی در شناسایی الگوها و پیشنهاد بهبودها عالی هستند، که می تواند روند بازسازی را به میزان قابل توجهی سرعت بخشد.”

گاجار Pranshtech اضافه کرد: «ابزارهایی مانند GitHub Copilot ساده‌سازی کد، تصحیح ناکارآمدی، یا حتی بازسازی منطق را پس از شناسایی از برخی الگوها پیشنهاد می‌کنند. “این می تواند به کارهای تکراری خودکار، تمیز کردن کد دیگ بخار یا حتی اشاره به بخش هایی که نیاز به بازسازی دارند کمک کند.”

رل یک موقعیت عملی را توصیف کرد که در آن او توانست از ابزارهای هوش مصنوعی برای بازسازی کدهای کمکی هوش مصنوعی استفاده کند. او توضیح داد: «هوش مصنوعی یک ساختار پیچیده React ایجاد کرده بود، اما کاملاً با مدل داده‌ای که من در قسمت پشتی تنظیم کرده بودم، مطابقت نداشت.

بازسازی این نیاز به تعادل دقیقی در حفظ طراحی مؤلفه کارآمد هوش مصنوعی در حین تنظیم آن برای تناسب با جریان داده خاص ما داشت. چیزی که به خصوص مفید بود استفاده از هوش مصنوعی بود (در این مورد، IDE مکان نما ) برای کمک به خود فرآیند بازسازی. می‌توانم تغییراتی را که به زبان طبیعی نیاز داشتم، توصیف کنم، و هوش مصنوعی تغییرات کد را پیشنهاد می‌کرد. این یک حلقه جالب ایجاد کرد که در آن کدهای تولید شده توسط هوش مصنوعی با کمک هوش مصنوعی بازسازی می شد و نظارت انسانی این فرآیند را هدایت می کرد.

ما هنوز به انسان در حلقه نیاز داریم

هیچ‌کدام از توسعه‌دهندگانی که با آنها صحبت کردم پیشنهاد نکردند که هوش مصنوعی آماده تنظیم روی یک پایگاه کد است – حداقل هنوز. جیسون وینگیت، توسعه‌دهنده و مدیر عامل شرکت توسعه برند Emerald Ocean Ltd.، گفت که ابزارهای هوش مصنوعی به او اجازه می‌دهند تا بازسازی را تسریع کند، اما نظارت انسانی همچنان کلیدی است. او گفت: «همیشه تغییرات کد ایجاد شده توسط هوش مصنوعی را بررسی و اصلاح کنید.

Wingate یک فرآیند اساساً تکراری کدنویسی با کمک هوش مصنوعی را توصیف کرد. ابتدایی‌ترین راه این است که از پیشنهادات بازآفرینی درخواست کنید و بخشی از کد را به آن بدهید. اطلاعات اولیه در مورد زبان، استانداردهای کدنویسی و قراردادها را شامل شود. بسته به آنچه که دقیقاً به دنبال آن هستید، می‌توانید با سؤالات بیشتری در مورد اینکه دقیقاً به دنبال چه چیزی هستید، فکر کنید. بر اساس اهداف شما – عملکرد؟ خوانایی؟—او گفت که می توانید پیشنهادات را خودتان پیاده سازی کنید یا هوش مصنوعی را برای انجام آن بخواهید. “سپس آن را مرور کنید و (به احتمال زیاد) دوباره این کار را انجام دهید.”

Wingate همچنین به توسعه دهندگان هشدار داد که مراقب توهمات باشند و آزمایشاتی را انجام دهند تا مطمئن شوند که ابزار به درستی از دستورات پیروی می کند. ممکن است “استفاده از استانداردهای کدگذاری سارا” را بنویسید – که مطلقاً هیچ معنی ندارد – و همچنان ممکن است بگوید “مطمئنا! من از استانداردهای کدنویسی سارا استفاده خواهم کرد!» او گفت.

QueryPal’s Nag همچنین به نیاز به بررسی دقیق کدهای تولید شده توسط هوش مصنوعی اشاره کرد. «طبق تجربه من، کلید موفقیت آمیز استفاده از هوش مصنوعی در توسعه اولیه و بازسازی این است که با آن به عنوان یک عضو تیم جوان بسیار آگاه اما گاهی غیرقابل اعتماد رفتار کنیم. شما اجازه نمی‌دهید یک کد استخدامی جدید مستقیماً بدون بررسی وارد تولید شود، و همین امر در مورد کدهای تولید شده توسط هوش مصنوعی نیز صدق می‌کند. من همیشه اطمینان می‌دهم که توسعه‌دهندگان با تجربه در تیم من خروجی هوش مصنوعی را بررسی و تنظیم می‌کنند.”

رل این نوع نظارت انسانی را نیز موقتی نمی‌داند. او می‌گوید: «من معتقدم که شما واقعاً برای فرآیند بازسازی به یک تجربه انسانی در حلقه نیاز دارید. «زمینه تجاری چرایی طراحی سیستم به این شکل که هست ممکن است در یک مدل هوش مصنوعی گم شود و در نتیجه، انسان باید آن را هدایت کند. من به این باور رسیده‌ام که مهندسان QA ممکن است «مهندسین اصلاح‌کننده» آینده باشند، الزامات را تأیید کنند، خروجی‌ها را مقایسه کنند و آن محتوا را به هوش مصنوعی بازگردانند.

آینده هنوز کاملاً مشخص نیست

هر توسعه‌دهنده و رهبر IT که با آنها صحبت کردم تأکید کردند که ما هنوز در روزهای اولیه هوش مصنوعی مولد هستیم. برای اکثر فروشگاه‌ها، مقدار کد با کمک هوش مصنوعی (یا کاملاً با هوش مصنوعی نوشته شده) در پایگاه کد آنها نسبتاً کم است. اما به ناچار به عنوان گلوله های برفی بازسازی به کمک هوش مصنوعی رشد خواهد کرد.

رل به الگوی خفه کننده درخت انگور اشاره کرد تا توضیح دهد که چگونه این فرآیند را انجام می دهد:

وقتی فن‌آوری قدیمی را دوست دارید و می‌خواهید فناوری جدیدی بسازید، می‌توانید یک سیستم خالص جدید در کنار سیستم قدیمی بسازید و فقط آن را قطع کنید، یا می‌توانید اجزای جدید را در اطراف سیستم قدیمی بسازید. شما شروع به مبادله درخت جزء و انگورهای خفه کننده آن می کنید. می آیند و درخت را خفه می کنند. من فکر می کنم که به دلیل هوش مصنوعی به مرور زمان این اتفاق می افتد. از آنجایی که هوش مصنوعی به عنوان یک کوپیلوت در معرض سیستم‌های موجود قرار می‌گیرد، به طور خودکار شروع به مستندسازی آنچه که درخت را احاطه کرده است، می‌کند. و سپس، یک سال بعد، تفسیر کافی برای درک زمینه تجاری که سعی در دستیابی به آن داشت، خواهد داشت، و فقط می تواند آن را تصاحب کند.

اما برای بیشتر مغازه ها، آن روز هنوز فرا نرسیده است. QueryPal’s Nag می‌گوید: «به طور کلی، در حالی که ابزارهای کدنویسی هوش مصنوعی قطعاً بهره‌وری ما را در بسیاری از زمینه‌ها افزایش داده‌اند، چالش‌های جدیدی را نیز در سازگاری و نگهداری کد معرفی کرده‌اند. “آنها گلوله جادویی نیستند که برخی به آن امیدوار بودند، بلکه ابزار قدرتمندی هستند که در صورت استفاده عاقلانه، می تواند به طور قابل توجهی قابلیت های یک توسعه دهنده را افزایش دهد. کلید این است که تعادل مناسب را پیدا کنید و همیشه آن تماس انسانی را در پایگاه کد خود حفظ کنید.”