مهندس نرم افزار
آیا ابزارهای AI واقعاً توسعهدهندگان را کند میکنند؟

همه ما شاهد هجوم ابزارهای AI به دنیای برنامهنویسی بودیم. از Cursor تا GitHub Copilot، همه میگن که این ابزارها انقلاب کدنویسی رو به همراه آوردن. ولی یه سوال مهم پیش میاد: آیا واقعاً این ابزارها ما رو سریعتر میکنن؟ یا اینکه فقط حس میکنیم سریعتر شدیم؟ یه تحقیق تازه جواب این سوال رو به شکل غافلگیرکنندهای داده.
تحقیق جدید: ابزارهای AI کدنویسی توسعهدهندگان رو ۱۹٪ کندتر میکنن!
یه مطالعه فوقالعاده جالب توسط یه سازمان غیرانتفاعی به اسم Model Evaluation and Threat Research (METR) منتشر شده. کارشون چی بوده؟ ۱۶ تا برنامهنویس حرفهای که روی پروژههای بزرگ اپنسورس کار میکردن رو جذب کردن و ازشون خواستن ۱۳۶ تا باگ واقعی رو با دستمزد ساعتی ۱۵۰ دلار حل کنن.نکته اینجاست که بعضیها ابزارهای AI داشتن، بعضیها نداشتن. تمام کارشون رو ضبط کردن و ۱۴۶ ساعت ویدئو رو تجزیه و تحلیل کردن.
نتیجهای که بدست اومد واقعاً غافلگیرکنندهست:
"عجیب اینکه متوجه شدیم وقتی برنامهنویسا از ابزارهای AI استفاده میکنن، ۱۹٪ بیشتر وقت میبرن تا کارشون تموم شه. یعنی AI اونا رو کند میکنه! این فاصله بین تصور و واقعیت واقعاً تکوندهندهست: برنامهنویسا فکر میکردن AI قراره سرعتشون رو ۲۴٪ بیشتر کنه، و حتی بعد اینکه کندی رو تجربه کردن، بازم معتقد بودن که AI سرعتشون رو ۲۰٪ افزایش داده!"
این نتیجه واقعاً شگفتانگیزه! اما ببینیم چه خبره؟ وقتی به جزئیات تحقیق نگاه میکنیم:

جزئیات بیشتر از تحقیق
هدف این تحقیق بررسی تاثیر Cursor بر کارایی برنامهنویسا بوده. تقریباً همه شرکتکنندگان از Cursor با مدلهای Sonnet 3.5 یا 3.7 استفاده کردن. نکته جالب اینه که ۴۴٪ از توسعهدهندگان اصلاً تا اون موقع Cursor رو امتحان نکرده بودن، و بقیهشونم حداکثر ۵۰ ساعت باهاش کار کرده بودن.
اونایی که از AI استفاده میکردن، کمتر وقت برای کدزدن خرج کردن - ولی در مجموع بیشتر طول کشید تا کارشون تموم شه. همچنین کمتر وقت برای تحقیق و تست گذاشتن. ولی چه کاری بیشتر وقتشون رو گرفت؟ پرامپت نوشتن، منتظار موندن برای AI، چک کردن جوابای AI، و کلی سربار IDE نسبت به اونایی که از AI استفاده نمیکردن. در نهایت، وقت اضافهای که با AI صرف کردن، همون وقتی رو که توی کدنویسی، تحقیق و تست صرفهجویی کرده بودن رو از بین برد.
نکته مهم اینه که این موضوع فقط مخصوص Cursor نیست - همه ابزارهای AI همین مشکل رو دارن. Cursor فقط اتفاقاً ابزاری بوده که برای این تحقیق انتخاب شده.
برنامهنویسا خیلی خوشبینانه فکر میکنن!
از نظرسنجیای که انجام دادن:
"هم متخصصان و هم برنامهنویسا به طور افراطی تأثیر مثبت AI رو روی بهرهوری دست بالا میگیرن، حتی بعد اینکه ساعتها باهاش کار کردن. این نشون میده که چقدر مهمه آزمایشهای درست و دقیق انجام بدیم، نه اینکه فقط به نظر متخصصا یا بازخورد توسعهدهندهها تکیه کنیم."
یه استثنا جالب: برنامهنویس باتجربه
یه نفر از شرکتکنندگان که بیش از ۵۰ ساعت با Cursor کار کرده بود، نتیجه فوقالعادهای گرفت! این شخص ۳۸٪ سریعتر کار کرد. البته یه نفر از ۱۶ نفر نمیتونه معرف کل گروه باشه، ولی جالبه.
نظر متخصصا چیه؟
Simon Willison که مهندس نرمافزاره و یه متخصص بیطرف توی حوزه ابزارهای AI محسوب میشه، این تحقیق رو اینطوری تفسیر میکنه:
"احساس من اینه که این مطالعه بیشتر نشون داده منحنی یادگیری برنامهنویسی با کمک AI اونقدر تندیش بالاست که وقتی از برنامهنویسا میخوایم این رو به کارهای روزانهشون اضافه کنن، عملکردشون افت میکنه تا یاد بگیرن چطوری ازش استفاده کنن."
واقعاً هم توی پادکست Pragmatic Engineer همین رو گفته بود: "باید انرژی خیلی زیادی بذاری برای یادگیری، آزمایش کردن، و فهمیدن چطوری ازش استفاده کنی. و هیچ راهنمایی هم نیست."
توی تحقیقی که روی حدود ۲۰۰ تا مهندس نرمافزار انجام شده، همین مسئله دیده شده: اونایی که کمتر از ۶ ماه با ابزارهای AI کار کرده بودن، نظر منفیتری داشتن. خیلیها میگفتن امتحان کردم، جواب نداد، ولش کردم.
حرفهای اون برنامهنویس باتجربه
اون توسعهدهندهای که ۳۸٪ بهتر عمل کرده، یه دانشجوی دکتری به اسم Quentin Anthony هست. اینا نظراتشه:
۱. سرعت AI ربطی به مهارت برنامهنویسی نداره
"همه برنامهنویسای این تحقیق فوقالعاده خوبن. فکر میکنم بیشتر مربوطه به اینکه آدم گیر میافته توی تلههایی که هم LLM داره هم خود آدم. ما دوست داریم بگیم LLMها ابزارن، ولی باهاشون مثل یه چیز جادویی رفتار میکنیم.
هر برنامهنویسی میدونه چه حس خوبی داره وقتی بالاخره یه باگ سخت رو پیدا میکنی. LLMها مثل یه دکمه میانبر dopamine هستن که ممکنه یکدفعه مشکلت رو حل کنن. حالا بگو آدم ادامه نده به فشردن دکمهای که ۱٪ شانس داره همه چی رو درست کنه؟ خیلی لذتبخشتره از کار سخت معمولی!"
۲. LLMها توی بعضی کارا خوبن، توی بعضیا بدن
"مسئله اینجاست:
چه کدهایی توی dataset آموزشی LLMها زیاد بوده
آزمایشگاهها چطوری موفقیت رو اندازه میگیرن
مثلاً LLMها توی کدهای سطح پایین سیستم (مثل GPU kernelها، parallelism و اینا) افتضاحن. چون این نوع کدها توی دادههاشون کمه و سنجیدن قابلیتهاشون سخته."
۳. حواسپرتی وقت تولید کد
"وقتی LLM داره کد تولید میکنه، خیلی راحت حواست پرت میشه. شبکههای اجتماعی رحم نمیکنن، و فکر میکنم آدما ۳۰ دقیقه scroll میکنن تا ۳۰ ثانیه منتظر تولید کد باشن!"
Quentin در نهایت میگه:
"LLMها ابزارن، و ما باید یاد بگیریم محدودیتهاشون چیه و خودمون رو بشناسیم. یکی از دلایلی که آدما از صحبتهای Andrej Karpathy لذت میبرن اینه که اون خیلی خودآگاهانه از LLM استفاده میکنه، و این تجربه رو زودتر از بقیه پیدا کرده چون خودش توی ساختنشون نقش داشته.
اگه میخوایم از این ابزار جدید درست استفاده کنیم، باید کاستیهاش (و خودمون!) رو بفهمیم و باهاشون کنار بیایم."
context switching: نقطه ضعف ابزارهای AI؟
یه فکری که مطرح شده اینه: آیا context switching ممکنه آشیل پای ابزارهای کدنویسی AI باشه؟ به عنوان یه برنامهنویس، بهترین کیفیت کار اون موقعه که کاملاً "توی زون" باشی - یعنی فقط روی یه مسئله متمرکز باشی بدون هیچ حواسپرتی. برگشتن به زون بعد از اینکه ازش در بیای خیلی سخته.
ولی وقتی از ابزار AI استفاده میکنی، نمیتونی توی زون بمونی. مجبوری کار دیگهای انجام بدی تا کد تولید میشه، و این باعث context switch اجباری میشه که هر بارش آدم رو کند میکنه.
اگه قرار باشه "توی زون بودن" در کدنویسی یه مزیت باشه، نه یه مشکل، چی؟ اگه برنامهنویسای باتجربه که از AI استفاده نمیکنن بهتر از اونایی که با AI مجبور به context switch مکررن عمل کنن، چی؟
اینجا یه نکته جالب هست: وقت صرفهجویی شده توی کدنویسی لزوماً به بهرهوری بالاتر توی ساخت نرمافزار منجر نمیشه.
AI اینجاست که بمونه و ما باید یاد بگیریم باهاش زندگی کنیم و کیفیت کارمون رو حفظ کنیم
این تحقیق چیز مهمی رو نشون میده: AI قراره تا مدتها اینجا بمونه و میتونه طرز کار توسعه نرمافزار رو از بنیان تغییر بده. ولی همونطور که انتظارش رو داریم، این تغییر بزرگ منحنی یادگیری عظیمی داره.
من فکر میکنم در درازمدت، مهندسایی که نتونن به طور موثر از AI استفاده کنن، توی بازار کار مشکل خواهند داشت. ولی همونطور که این تحقیق نشون میده، فقط دستمون رو روی ابزار بذاریم کافی نیست.
نکته کلیدی اینجاست: توی شرکتها و تیمهامون باید یه فرآیند مشخص برای به اشتراکگذاری تجربیات و بهترین شیوههایی که در هر مرحله از تطبیق با AI یاد میگیریم، ایجاد کنیم. چون الگوها و اصول پذیرفته شدهای برای استفاده از AI توی توسعه نرمافزار وجود نداره، مجبوریم در حین یادگیری و اصلاح روال کارمون، خودمون رو تطبیق بدیم.
این تحقیق به ما یادآوری میکنه که راه موفقیت با AI نه صرفاً استفاده کردن ازشه، نه هم نادیده گرفتنش. بلکه یادگیری هوشمندانه و تدریجی استفاده ازشه، با درک محدودیتها و فرصتهاش. این تحقیق و نمونه های مشابه اش، نشون میدن که این ابزارها واقعاً میتونن مفید باشن - ولی فقط وقتی که بلد باشیم چطوری ازشون استفاده کنیم.
بخش زیادی از این مقاله برگرفته شده از این منبع هست:
https://blog.pragmaticengineer.com/cursor-makes-developers-less-effective/
مقاله تحقیقاتی اصلی:
مطلبی دیگر از این انتشارات
مقایسه Dispatchers.Default و Dispatchers.IO در کاتلین کوروتین (kotlin Coroutine)
مطلبی دیگر از این انتشارات
مقایسه دو الگوی معماری MVVM و MVI در اندروید
مطلبی دیگر از این انتشارات
چطور unit test نوشتیم ؟