ورود متا به بازار کدنویسی هوش مصنوعی در این هفته با ادعای مشخصی همراه بود که ارزش تأمل دارد. Muse Code، عامل کدنویسی جدید این شرکت که بر پایانه اجرا میشود، فقط کد را فایلبهفایل نمینویسد — طبق پست معرفی مارک زاکربرگ، وقتی کاری بهاندازه کافی بزرگ باشد، «به عاملهای فرعی جداگانهای تقسیم میشود که بهصورت موازی در ورکتریهای ایزوله کار میکنند» و بنا بر گزارشها، در آزمایشهای خود متا، همزمان شش قابلیت را برای یک بازی ساخته، بدون اینکه با هم تداخلی داشته باشند. این ادعای یک فروشنده درباره محصول خودش در روز عرضه است، نه نتیجهای که مستقلاً تأیید شده باشد؛ بنابراین با دیده تردید به این عدد مشخص نگاه کنید. اما شکل گردشکاری که توصیف میکند ایدهای مختص متا نیست — اجرای موازی و ایزوله عاملها در سراسر حوزه عاملهای کدنویسی به الگویی پیشفرض تبدیل میشود و این موضوع معنای «خوب بودن در این کار» را تغییر میدهد.
در دو سال گذشته، محور اصلی معرفی ابزارهای کدنویسی هوش مصنوعی عمدتاً سرعت در یک مسیر واحد بود: یک عامل، یک وظیفه، یک تفاوت برای بررسی. این مهارتی است که بیشتر مهندسان تا حدی آن را فرا گرفتهاند — تفاوت را بخوان، تستها را اجرا کن، منتشرش کن. تقسیم کار میان چند عامل که در ورکتریهای ایزوله کار میکنند، این مدل را میشکند. دیگر در حال بررسی یک تغییر منسجم از یک جریان فکری واحد نیستید. در عوض، چند تغییر همزمان و مستقل از نظر استدلال را بررسی میکنید که همگی باید بدون تناقض با یکدیگر، بدون تکرار منطق، و بدون اختلاف خاموش درباره نحوه عملکرد بخشی مشترک از کدبیس، در یک سیستم کاری واحد همگرا شوند.
چرا این واقعاً مهارتی متفاوت است، نه نسخهای سریعتر از مهارت قدیمی
بررسی یک تفاوت نوشتهشده با هوش مصنوعی عمدتاً بررسی درستی است: آیا این کار همان کاری را میکند که میگوید، و آیا چیزی را در اطراف خود خراب میکند؟ بررسی چند خروجی موازی عاملها، لایهای دیگر اضافه میکند که بیشتر افراد هرگز مجبور به تمرینش نبودهاند، چون تا همین اواخر شغل هیچ فردی به آن نیاز نداشت: سازگاری میان تفاوتها. آیا دو عامل هر کدام نسخه خودشان را از همان تابع کمکی ابداع کردهاند؟ آیا تغییر «ایزوله» یک عامل، بیسروصدا به فایلی وابسته بوده که عامل دیگری در میانه بازنویسی آن بوده است؟ آیا مرحله ادغام واقعاً یک تعارض واقعی را شناسایی کرده، یا بیسروصدا فرض یکی از شاخهها را بر فرض شاخه دیگر ترجیح داده است؟ اینها به معنای سنتی کلمه باگ نیستند — هر تفاوت منفرد میتواند تستهای خودش را با موفقیت پشت سر بگذارد و بااینحال، پس از ترکیب، سیستمی ناهماهنگ ایجاد کند.
این همان مسئلهای است که تیمهای مهندسی توزیعشده همیشه با مشارکتکنندگان انسانی مدیریت کردهاند، فقط بهجای چند روز در عرض چند دقیقه فشرده شده است. تفاوت اینجاست که تیمی از مهندسان تازهکار، وقتی کاری مبهم به نظر برسد، بهطور طبیعی راهنمایی میخواهد؛ اما عاملی که برای تکمیل بخش واگذارشده بهینه شده، اغلب پاسخی مطمئن و از نظر نحوی تمیز به پرسشی اشتباه تولید میکند. تشخیص این موضوع به کسی نیاز دارد که کار را آنقدر خوب فهمیده باشد که از ابتدا بتواند آن را تجزیه کند — یعنی مهارت گلوگاهی واقعی «سریع کد بررسی کردن» نیست، بلکه «شکستن یک بخش کار به قطعاتی است که بتوانند با ایمنی بهصورت موازی اجرا شوند، و دانستن اینکه کدام قطعات نمیتوانند چنین باشند».
الگوی گستردهتر، فراتر از ابزارهای صرفاً کدنویسی
توجه به این نکته ارزش دارد که این موضوع به ابزارهای توسعهدهندگان محدود نمیشود. بازطراحی کادر جستوجوی گوگل — که همان هفته رونمایی شد — نمای کلی هوش مصنوعی و حالت هوش مصنوعی را در یک جریان واحد ادغام میکند؛ جریانی که میتواند متن، تصویر، PDF، ویدئو و زبانههای باز کروم را بهعنوان ورودی دریافت کند و کار را بهجای یک تجزیهکننده پرسوجو به یک عامل بسپارد. وجه مشترک هر دو عرضه همین است: رابط کاربری از «یک دستورالعمل روشن به هوش مصنوعی بده و یک خروجی روشن را بررسی کن» بهسوی «یک هدف با دامنهای نسبتاً نامشخص و انبوهی از ورودیها را به هوش مصنوعی بسپار و بگذار خودش مراحل را مشخص کند» حرکت میکند. این الگو هر جا ابزارهای عاملمحور به کار گرفته شوند دیده میشود، نه فقط در ویرایشگرهای کد — و یعنی مهارت بررسی و هماهنگسازی، بسیار فراتر از نقشهای مهندسی، برای هر کسی مرتبط خواهد بود که شغلش هدایت یک سیستم هوش مصنوعی در انجام کاری چندمرحلهای است، نه صرفاً یک اعلان واحد.
در عمل، دقیقاً چه چیزهایی را تمرین کنیم
اگر کد مینویسید یا مدیریت میکنید، چند عادت مشخص و قابل بررسی، این مهارت را سریعتر از مطالعه درباره آن تقویت میکنند:
- یاد بگیرید ورکتری ایزوله واقعاً چیست (قابلیت git که اجازه میدهد چند شاخه بهطور همزمان در دایرکتوریهای جداگانه checkout شوند) پیش از آنکه به ادعای یک ابزار مبنی بر اینکه تغییرات موازی «نمیتوانند با هم تداخل کنند» اعتماد کنید.
worktreeایزولهسازی هنگام اجرا، سازگاری در زمان ادغام را تضمین نمیکند — این مرحلهای جداگانه است که ارزش دارد با دقت زیر نظر گرفته شود. - عمداً به یک عامل کدنویسی کاری آنقدر بزرگ بدهید که مجبور شود آن را تجزیه کند، و پیش از خواندن تفاوتهای حاصل، ببینید کار را چگونه تقسیم میکند. نحوه تجزیه کار، بیشتر از خود کد به شما میگوید که آیا میتوانید به خروجی اعتماد کنید یا نه.
- بررسی تفاوتها را بهصورت دستهای تمرین کنید، نه یکییکی. توانایی نگهداشتن سه یا چهار تغییر مرتبط در ذهن بهطور همزمان و تشخیص نقاط اختلاف آنها، با بررسی هرکدام بهصورت جداگانه و تأیید آن بر اساس شایستگیهای خودش فرق دارد.
- بپرسید هنگام تعارض چه اتفاقی میافتد، نه فقط هنگام موفقیت. هر ابزاری که ادعا میکند ادغامهای موازی خودکار انجام میدهد، باید بتواند نشان دهد وقتی دو عامل واقعاً روی یک منطق یکسان دست میگذارند چه میکند — این مسیر شکست، بیش از مسیر موفقیت، نشان میدهد آیا سپردن کار واقعی به ابزار ایمن است یا نه.
هیچکدام از اینها مستلزم آن نیست که منتظر بمانید کارفرمایتان محصول خاصی را انتخاب کند. این الگو — تجزیه، واگذاری، همگرایی دوباره، راستیآزمایی — اکنون هم در میان عاملهای کدنویسی چندین فروشنده و هم در رابطهای کاربری هوش مصنوعی مصرفکننده دیده میشود. کسانی که بهجای صرفاً بررسی خروجی تکمسیره، در مدیریت این چرخه مهارت پیدا میکنند، مهارتی میسازند که فارغ از اینکه در نهایت عامل کدام شرکت در صدر قرار بگیرد، همچنان مرتبط میماند.