نمودار نرخ CVEها(آسیبپذیریها و مشکلات امنیتی شناختهشده نرمافزارها) رو مشاهده میکنید که از وقتی هوشمصنوعی اومده به طرز وحشتناکی پیشرفتش نمایی شده و هر روز دارن دل و روده یه جا رو میریزن بیرون.
😉 چرا انتروپیک تاکید داره ریویو توسط ایجنتهایی انجام بشه که نقشی تو توسعه کد نداشتن و میخواد کانتکست ریویو کنندهها تازه باشه؟
احتمالا هر بار کدی رو با ai میزنید، آخر سر همون تغییرات رو به سشن فعلی میدید و میگید ریویوش کن و فکر میکنید چون با تغییرات آشناس، بهتر میتونه اون رو ریویو کنه ولی ظاهرا انتروپیک خیلی با این قضیه موافق نیست، ولی چرا؟
ایجنتی که کد رو نوشته، کانتکستش پر از استدلالهای خودشه و ممکنه رویکرد اشتباهش از نظر خودش درست باشه یا فرضهایی رو داشته باشه که درست نیستن.
• این تابع هیچوقت نال بر نمیگردونه.
• اج کیس X رو کامل هندل کردم.
• راهحل فعلیم بهترین راهحل ممکنه.
چرا این اتفاق میوفته؟
وقتی یک پیادهسازی طولانی میشه، کانتکست پر از تغییرات و تلاشهای موفق و ناموفق میشه و کلی دیتای قدیمی داخلش وجود داره و همین شلوغ بودن خودش باعث میشه ایجنت کمی گیج بشه.
همچنین ایجنتها میل زیادی به تایید کار خودشون دارن و سختتر به اشتباهشون پی میبرن.
دقیقا مثل وقتی که کد خودمون ظاهرا مشکلی نداشت ولی ریویور میومد و ۱۰۰ تا کامنت میزد تو صورتمون.
انتخاب ایجنت با کانتکست تازه میتونه خیلی از مشکلات بالا رو رفع کنه و دقت ریویو رو بالاتر ببره. البته منظور از کانتکست تازه این نیست که ایجنت رو بدون دانش قبلی ول کنید تو کد و بگید مشکلاتش رو پیدا کن، بلکه باید توضیح کاملی از تسک و دلیل انجام تغییرات بهش بدید بعد اون رو برای ریویو بفرستید.
👁 تیم مهندسی انتروپیک چطوری روزانه هزاران تغییر رو ریویو میکنن؟
از ماه می تا سپتامبر، تعداد تغییرات روزانه در مونوریپوی Anthropic از حدود ۲٬۵۰۰ تغییر به بیش از ۳۰٬۰۰۰ تغییر رسید. توی مخزن Claude Code هم در همین مدت تعداد PRهای مرجشده بیش از دو برابر شد، ولی سهم تغییراتی که نیاز به ریورت داشتن بیش از ۴۰٪ کم شد.
با این حجم از تغییرات، روش سنتی کد ریویو دیگه جواب نمیده و باعث کند شدن فرایند توسعه میشه. Anthropic هم بهجای اینکه فقط تعداد بیشتری آدم رو مسئول بررسی کد کنه، کل فرایند رو بازطراحی کرده. هدفشون اینه که زمان انسانی لازم برای بررسی هر تغییر رو کم کنن، بدون اینکه نرخ باگ، ریورت یا خطا بالا بره.
۱. بررسی کد از قبل از PR شروع میشه
بخش بزرگی از بررسیها قبل از ساخت Pull Request اتفاق میافته:
- ایجنت کد رو پیادهسازی میکنه و موازی با پیادهسازی، تستها و بیلد رو اجرا میکنه.
- خروجی کار، مثلاً نتیجه تست یا اسکرینشات، بررسی میشه.
- یک سابایجنت با کانتکست تازه، تغییرات رو بررسی میکنه.
- ابزارهای داخلی برای پیدا کردن باگ و سادهسازی diff استفاده میشن.
۲. بررسی چند لایه قبل از Merge
بعد از ایجاد PR، چند مسیر بررسی بهصورت موازی اجرا میشن:
- ایجنتهای AI برای پیدا کردن باگ
- ایجنتهای مخصوص بررسی امنیتی که میتونن جلوی Merge رو بگیرن
- تستها و چکهای خودکار CI
- بررسی انسانی متناسب با ریسک تغییر
بعد از تأیید بررسیها، تغییر وارد صف Merge میشه و چکها دوباره اجرا میشن. پس از Merge هم انتشار مرحلهای، Feature Flag و مانیتورینگ کمک میکنن مشکلات سریع شناسایی و در صورت نیاز Rollback بشن.
۳. همهی تغییرات به یک اندازه بررسی نمیشن
میزان بررسی انسانی به ریسک تغییر بستگی داره. تغییر کمریسک ممکنه با چکهای خودکار و بدون تأیید انسانی Merge بشه؛ اما تغییرات حساس مثل Billing، فرایند انتشار یا زیرساخت CI به بررسی انسانی جدیتری نیاز دارن.
نکته اینه که تأیید AI جایگزین تأیید انسانی در تغییرات حساس نشده و تغییرات با ریسک متوسط به حداقل یک ریویوی انسانی و تغییرات با ریسک بالا به ریویوی حداقل دو نیروی انسانی نیاز دارن.
۴. خود سیستم بررسی هم دائماً بهتر میشه
باگهایی که به Incident یا Revert منجر میشن، به مجموعهی ارزیابی Reviewer اضافه میشن. مهندسان این موارد رو بررسی میکنن و عملکرد سیستم، از جمله هشدارهای اشتباه، مرتب ارزیابی میشه.
یعنی فرایند کدریویو فقط کد رو بررسی نمیکنه؛ از اشتباهات قبلی هم یاد میگیره.
۵. جلوگیری از کدریویوی بیپایان
یک بار یک PR بیش از ۵۰ دور بررسی شد و در نهایت نویسندهش متوجه شد که وارد یک حلقهی تکراری شده و متوقفش کرد. برای جلوگیری از این وضعیت، Anthropic چند قاعده گذاشته:
- بعد از سه دور بررسی، Reviewer از نویسنده میخواد رویکردش رو دوباره ارزیابی کنه.
- بعد از دورهای ابتدایی، تمرکز روی تغییرات جدید در diff قرار میگیره.
- مشکلات دستهبندی میشن و همه موارد مربوط به یک دسته، با هم رفع میشن.
- یافتههای تکراری دوباره گزارش نمیشن.
۶. نقش انسان حذف نشده
انسانها همچنان دربارهی معماری، تغییرات پرریسک و تصمیمهای مهم قضاوت میکنن و مسئولیت نتیجه رو میپذیرن. AI کارهای تکراری و قابلبررسی رو انجام میده تا توجه انسان جایی صرف بشه که واقعاً به قضاوت نیاز داره.
پن:
پن: از لحاظ هزینه و زمان، پیادهسازی همهی این جزئیات برای اکثر شرکتها بهصرفه نیست. ولی حتی اگه تیمتون یک نفره باشه و از AI استفاده کنید، بهنظرم بخش زیادی از ریویو رو میشه اتوماتیک کرد. چند تا کار ارزون برای شروع:
- قبل از ساخت PR، یه ایجنت با کانتکست تازه diff رو ریویو کنه.
- قواعد و اشتباهات تکراری پروژه رو یه جا بنویسید (مثل CLAUDE.md) تا ایجنت هر بار اونها رو چک کنه.
- به تمپلیت PR دو سؤال اضافه کنید: «چطور تست شده؟» و «چطور برش گردونیم؟»
- میزان ریویوی انسانی رو با ریسک تغییر تنظیم کنید، نه با حجمش.
انتروپیک قوانین خودش رو آپدیت کرده و از این به بعد اگه به کلاد بیاحترامی کنید و یا باهاش بدرفتاری کنید، ممکنه اکانتتون رو ببندن. شلاقها رو غلاف کنید که دیگه اون ارباب ما محسوب میشه.
🛌 بحران هویتی مهندسین نرمافزار؛ چه بلایی سر شغلی که یه روز عاشقش بودیم اومده و چطوری میتونیم تو مارکت جدید زنده بمونیم؟
برای سالهای طولانی، مهندسی نرمافزار یکی از مهارتهای با تقاضای خیلی بالا و درآمد خوب بود و آدمهای زیادی با عشق و انگیزه، ساعات خیلی زیادی رو درگیر نوشتن کد، دیباگینگ و حل مسائل میشدن ولی امروزه با فراگیر شدن ai، تقریبا هیچکدوم از اون کارها به معنای قبلی وجود ندارن و انجام دادنشون اتلاف وقت و انرژی تلقی میشه چون تو خیلی از این موارد، خروجی موردنظر تو مدت زمان خیلی کمتری نسبت به قبل پیادهسازی میشه و با مقداری بررسی و سر و کله زدن با ai، به خروجی کاملا قابل قبولی تبدیل میشه.
به همین دلیل، نیاز به نیرو هم به شدت کاهش داشته و کاری که قبلا با یک تیم ۱۰ نفره قابل انجام بود، الان با یک نفر انجام میشه و همون یک نفر هم کاری جز نوشتن پرامپت و ریویو کردن کد و زدن گزینه always approve نمیکنه. ولی چیزی که هست اینه که شرکتی که قبلا یک محصول تولید میکرد الان میتونه همزمان ۵ محصول رو جلو ببره و خب همین کماکان نیاز به نیروی انسانی داره ولی سوال اصلی اینه که ما چطوری میتونیم اون نیروی انسانی مورد نیاز باشیم؟
تو همچین وضعیتی، تایتلهای شغلیای مثل برنامهنویس بکاند، فرانت و... هر روز کمرنگتر از دیروز میشن و به مرور زمان معناشون رو از دست میدن و کار پیدا کردن براشون سختتر میشه. اگه واقعا میخواید کماکان تو این حرفه به کار ادامه بدید، باید خیلی فراتر از این استکها خودتون رو تعریف کنید و از فلان محیط انجینیر/دولوپر، کم کم مسیر خودتون رو به سمت شناخت عمیقتر از محصول و همچنین بهبود مهارتهای نرم خودتون ببرید و اینها رو با مهارت فنی خودتون ترکیب کنید که بتونید تاثیر خیلی بیشتری بذارید. یکی از تایتلهای جذاب این حوزه، Product Engineering هست که مسئولیتهای زیر رو به شما میده:
- کشف مسئله و نیاز کاربر
- طراحی راهحل برای حل اون مسئله
- پیادهسازی با ai
- تست، ریویو و بررسی جنبههای مختلف راهحل پیادهشده و انتشار
- دریافت بازخورد و شروع این چرخه از اول
به عبارتی، شما به جای مقابله با ai، باید قبول کنید که یک ابزار اومده که کار شما رو خیلی جاها بهتر انجام میده و هر روز هم با سرعت باورنکردنیای داره پیشرفت میکنه و تنها کاری که میتونید بکنید اینه که باهاش سازگار بشید و خودتون رو به کد محدود نکنید و از اون برای تسریع روندهای کاری و یادگیریتون استفاده کنید وگرنه با هر آپدیت از کلاد و OpenAI، یک قدم به خاطره شدن نزدیکتر میشید.