در قسمت قبل راجع به وایب کدینگ صحبت کردیم. و من همین‌طور ذهنم درگیره و دارم به این قضیه فکر می‌کنم. اما این دفعه برخلاف قبل می‌خوام کمی از اون طرف قضیه صحبت کنم.

  • کمی تو سر وایب کدینگ بزنیم و ایرادهاش رو بگیم.
  • این مدل‌ها کجاها ضعف جدی دارند؟
  • این ضعف‌ها چطوری خودشون رو تو مهندسی‌نرم‌افزار نشون میدن؟

قبلش یه چیزی رو بگم. حرفای اپیزود قبل من از اون مدل‌ها بود که زیاد شنیده بودم و الان هر جا برید از این حرف‌ها تو بورسه. این که AI چقدر خوبه و چقدر خوب کد می‌زنه و همه باید استفاده بکنند.

ولی بیشتر که بررسی کردم دیدم قضیه اصلاً صفر و یکی نیست. نه میشه گفت «همه» کارها رو بدیم AI انجام بده و نه میشه گفت «همه» کارها رو مثل قدیم خودمون انجام بدیم.

به نظرم دو گروه الان دارن مسیر اشتباهی رو می‌رن:

  • یکی آدم‌هایی که هیچ استفاده از این AI نمی‌کنند و اصلاً سمتش نمی‌رن. این رو تو قسمت قبل بیشتر گفتم که چرا اشتباهه.
  • یک دسته هم آدم‌هایی هستند که کلاً همه چیز رو به AI برون‌سپاری کردند. حتی می‌بینم بعضاً «فکر کردن» رو هم برون‌سپاری کردند و محدودیتی برای استفاده از AI قائل نیستند. راجع به این می‌خوایم در این قسمت صحبت کنیم.

تو این قسمت می‌خوایم راجع به گروه دوم صحبت کنیم.

شنیدن اپیزود

همه اپیزودهای این پادکست تو کانال کست باکس منتشر میشه و البته می‌تونید از جاهای دیگه هم بشنوید.
Listen on Apple Podcast Listen on Castbox Listen on Spotify Listen on Telegram Listen on Youtube Music Watch on Youtube Visit Linkedin Page Subscribe RSS Feed

اینجا هم می‌تونید فایل صوتی این قسمت رو گوش بدید:

مقدمه

اول این رو بگم که می‌دونم بحث چالشی‌ای هست و احتمال این که برچسب دمده و قدیمی بخورم زیاده. خصوصاً این که ذی‌نفعان بحث‌هایی مثل این فقط ماها نیستیم.

حتی بالاترین لایه‌های مدیریت شرکت‌ها دستورالعمل‌های سفت و سخت میدن راجع به استفاده از AI. بعضی‌ها کلاً منع می‌کنند (بیشتر تو سازمان‌های دولتی). بعضی‌ها هم خیلی سنگین تشویق می‌کنند. مثلاً CEO شاپیفای (لینک مقاله)، تو یه نامه لو رفته راجع به این صحبت کرد که استفاده از AI دیگه اختیاری نیست. تو هر رده شغلی‌ای «باید» استفاده بشه. نه تنها باید استفاده بشه، بلکه تو عملکرد شغلی شما هم این که چقدر از AI استفاده کردید لحاظ میشه.

یعنی صرفاً کارا بودن دیگه کافی نیست. بلکه باید به شکلی که من بهت میگم کارا باشی. وقتی استفاده از AI به این شکل اجباری بشه، دیگه صحبت کردن راجع به معایبش تابو میشه. مثل بحث مذهبی میشه. حق نداری بگی که برای فلان کار ابزار خوبی نیست. بلکه تصمیم گرفته شده که برای همه کارها خوبه.

تو ذهن این دسته افراد، این که AI نمی‌تونه فلان کار رو انجام بده، حتماً مشکل پرامپته. اگر مشکل پرامپت نبود مشکل Skill هست (که خوب ننوشتی). یا مشکل Agent هست. نمیگم این‌ها محتمل نیست. میگم اصلاً فضای این گفتگو باز نمیشه که راجع به ضعف‌هاش هم صحبت کرد.

دقت کنید این حرف‌ها رو از کسی نمی‌شنوید که اصلاً با این ابزارها کار نکرده. من بصورت میانگین تو هر روز کاری ۵ ۶ ساعت با این ابزارها درگیرم و استفاده شدیدی ازشون می‌کنم. ولی باز هم معتقدم ضعف‌های اساسی‌ای وجود دارن که به این زودی‌ها حل نمیشن و باید تو محاسبات‌مون در نظر بگیریم.

وایب کدینگ چیه؟

بحثی نیست که بخش بزرگی از کد رو الان مدل‌های زبانی می‌نویسند. بحث اینه که هنگام Merge کد آیا باید کد خونده بشه یا نه؟ تا چه حد خونده بشه؟

الان روال متداول این‌طوری هست که با Claude Code یا هر ابزار دیگه یه Branch درست می‌کنند و تقریباً به طور تمام اتوماتیک تسک رو بهش میدن که انجام بده. متداول هم هست برای صرفه‌جویی تو وقت و پیاده‌سازی به جای این که هی پرامپت بدن، Plan میدن و بهش میگن پیاده‌سازی کن. خودمون هم می‌ریم سر یه بخش مشابه دیگه روش فکر می‌کنیم یا با یه Agent دیگه یه بخش دیگه از کار رو جلو می‌بریم تا نتیجه دربیاد.

اما یک Bottleneck جدید بوجود میاد. این که کد رو چه کسی Review کنه؟ خود مدل؟ یا آدم؟ تا چه حد و اندازه کد خونده بشه؟ کی اجازه Merge کردن کد رو داشته باشه؟ برنامه‌نویس سنیور تیم یا همه؟

بخشی از داستان سر همین قسمته. به کسانی که معتقدند هر چی هست خوبه و کد رو نباید خوند رو میگن Vibe Coder. حالا بماند که این دسته حتی اگر کد رو می‌خوندند هم نمی‌فهمیدند چی نوشته.

بخش دیگه‌ای هستند که معتقدند فرق نمی‌کنه کد رو کی نوشته، AI یا آدم. برای Review کردن کد همون کاری که قبلاً می‌کردیم رو الان هم می‌کنیم!

اگر اجازه بدید معایبش رو شروع کنیم. مسئله‌ اینه که به مرور زمان کدی که وایب‌کدر تولید می‌کنه، پتانسیلش رو داره که تبدیل به AI Slop بشه. من به «خزعبلات هوش‌مصنوعی» ترجمه‌اش می‌کنم.

اخیراً از ایسنتاگرام هم زیاد شنیدم که محتواهای تولید هوش مصنوعی زیاد شده و بعضاً خیلی حال به هم زنه و تکراری. دیگه جای اون محتوای اصیل سابق خالیه. حالا این جدای از اون که ایسنتاگرام قبلش هم شبکه اجتماعی جالبی نبود.

انگار همون ذهنیت که کدنویسی کار بیهوده‌ای هست به تولید محتوا هم کشیده شده. و جالبه که آدم‌ها به مرور دارن یاد می‌گیرن که اگر تو متن کسی نشونه‌هایی که هوش مصنوعی بودن، بود، ازش فاصله بگیرن. اصلاً همین که شما الان دارید به حرف‌های من گوش می‌دید، یعنی هنوز معتقدید که این حرف‌ها رو AI نمی‌تونه بزنه.

به نظرم اصل مشکل به این برمی‌گرده که مدل‌های زبانی با شکل و فرم فعلی‌شون میانگین هستند. میانگین همه چیز. تو بحث کد میشه میانگین کدهای گیت‌هاب مثلاً. و میانگین اصلاً خوب نیست. همه جور آشغالی ممکنه داخلش باشه.

خیلی‌ها حرف‌شون اینه که AI «می‌فهمه» و تشخیص میده ولی شواهدی در رد یا تاییدش داریم که تامل‌برانگیزن.

جالب این که اگر سؤالات مذهبی از LLM بپرسید، بسته به این که به چه زبانی بپرسید، جواب کاملاً متفاوتی می‌گیرید. مثل اینه که من از شما بپرسم به خدا باور داری یا نه و اگر انگلیسی بپرسم یک جواب بدی و اگر فارسی یه جواب دیگه. علتش هم ساده است. فلسفی‌اش نکنید. توزیع حرف‌های تأییدکننده یا ردکننده راجع به فلان مذهب تو وب‌فارسی با وب‌انگلیسی فرق داره.

Is Lying Only Sinful in Islam? Exploring Religious Bias in Multilingual Large Language Models Across Major Religions

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

به هر حال مستقل از باور من یا شما باید به این فکر کنیم که مسئول کد کیه؟ همون‌طور که تو مدیریت میگن «اختیار رو میشه تفویض کرد و مسئولیت رو نه»، من نوعی نمی‌تونم بگم فلان کد رو کلاد زده. پس اگر فلان PR رو زدم و چشم بسته Merge کردم بازم مسئول منم. نمی‌تونم ازش دربرم. بگم نه چاقو بود که گردن گوسفند رو برید. من که مأمور بودم و معذور.

بازم دقت کنید. راجع به Code Generation صحبت نمی‌کنم. بحثم اینه که اگر کلاد من به خاطر پرامپتی که بهش دادم ۱۰ هزار خط رو عوض کرد و من Merge کردم، مسئول منم؟ آیا اصلاً نباید کد رو خوند؟ یا این که باید حداقلی خوند؟

نظرمون راجع به سیستم‌های حساس هم مهمه. مثلاً سیستم بانک یا سیستم هواپیما یا فلان دستگاه پزشکی به عنوان چند تا از سیستم‌های بسیار مهم که خطا نباید داخل‌شون باشه، رو در نظر بگیرید.

آیا اگر بازم وقتی که به این سیستم‌ها برسیم وایب کد می‌کنیم؟ یا می‌گیم نه و این‌ها مهم‌تر از این حرفان؟ و تبعاتش هم می‌پذیریم؟ مثلاً سیستم هواپیما اگر دچار نقص فنی بشه و صدها نفر بمیرن، چی می‌گیم؟ یا دستگاه پزشکی به همین شکل؟

و اگه وارد این بازی شدیم و قبول کردیم که به هر حال بعضی جاها نیاز به خوندن دقیق تک به تک کدها هست، آیا هیچ بخشی از نرم‌افزار ما نیست که همچنان نظارت بخواد؟

و متأسفانه این‌ها چیزهایی هست که گم میشه. ما فرض می‌کنیم که این مدل‌ها همواره دارن بهتر میشن. فرض می‌کنیم که از ما همیشه و همه جا بهتر کد می‌زنن. فرض می‌کنیم که می‌فهمند چی می‌زنند. فرض می‌کنیم که اصلاً کدنویسی یه چیز کلا منسوخ شده است.

بازم میگم بحثم این نیست که کلاً استفاده نکنیم. سؤال اینه که آیا Human in the loop تو مرحله آخر لازمه باشیم یا نه؟

کما این که تو کرنل لینوکس هم گفتن که می‌خوان از AI استفاده کنند. اما استفاده از AI به معنی وایب کدینگ نیست. من ندیدم جایی بگن مثلاً Issueهای کرنل اتوماتیک میان خونده میشن و AI کد رو می‌زنه و اتوماتیک خودش مرج می‌کنه.

پس دو سر طیف داریم: یک سر AI Assisted Software Development و سر دیگه Vibe Coding.

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

هر چند بخش بزرگی از صنعت نرم‌افزار داره به سمت نرم‌افزارهای Vibe Code شده میره. نرم‌افزارهایی که به تجربه نشون دادن که خیلی بی‌کیفیت هم هستند. من از خوره‌های نرم‌افزارم و زیاد دنبال می‌کنم. اخیراً یه روندی که تو ردیت دیدم اینه که آدم‌ها چقدر دید بدی نسبت به نرم‌افزارهایی دارند که وایب‌کد میشن. ۱۰ تا فیچر داره. ۳ تاش کار نمی‌کنه. تست نشده.

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

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

برداشت من این هست که در کتاب فروشی‌های معمولی در کشورمان در بخش آثار غیرداستانی، از هر ۱۰ کتاب، هشت یا نه‌تاش نباید هرگز چاپ می‌شد.

شاید صنعت نرم‌افزار هم همین اتفاق براش بیفته. تاریخ می‌تونه قضاوت کنه.

مهارت‌های مهم

حالا همه این حرف‌ها رو زدم چه برداشتی می‌شه ازش کرد. چه فایده‌ای برای ما داره؟

می‌خواستم بگم که حواس‌مون باشه اولاً در طی فرآیند کار کردن با AI فکرمون تعطیل نشه. من نشم آدمی که صرفاً پرامپت می‌زنه. که اگر این‌طوری شد مزیت رقابتی ندارم.

بازم اینجا از محمدرضا شعبانعلی یه حرفی رو شنیدم که خیلی به دلم نشست. من راستش حرف‌ آدم‌های زیادی رو گوش میدم. اما کمتر حرفیه به دلم بشینه.

چیزی که من به تجربه فهمیده‌ام اینه که (اگر بخوام خیلی خلاصه‌اش کنم) بهترین روش استفاده از AI اینه که هر کسی در زمینه‌هایی که هستهٔ اصلی کارش نیست از AI استفاده کنه.

واقعیتش هممون می‌دونیم که پرامپت زدن مزیت رقابتی پایدار نیست. اما این که من بگم کیفیت کارم جوری هست که AI نمی‌تونه انجام بده، مزیته. وگرنه اگر AI بتونه انجام بده که اصلاً دلیلی نداره کسی به من پول بده.

When AI writes almost all code, what happens to software engineering?

و این چیزیه که جاهای مختلف بهش اشاره میشه. هر چی برنامه‌نویس سنیورتر باشه، حتی اگر با AI کد بزنه خروجی بهتری داره. نسبت به کسی که جونیوره. انگار این شهودی که تو این سالیان سال توسعه نرم‌افزار بدست آورده باعث شده که بتونه بخش‌های سیستم رو بهتر درک کنه و خروجی بهتری بده.

اگر بخوام خیلی مصداقی‌تر صحبت کنم یکی از روش‌هاش معماری نرم‌افزاره. معماری نرم‌افزار چیزیه که تو فکر من هنوز AI خیلی ضعیفه. یعنی با اختلاف ضعیفه. یک نرم‌افزار مدرن چه اجزایی داره. چه الگوهایی طراحی‌‌ای وجود داره. کی باید از کدوم استفاده کنیم. این که فلان جا معماری pub sub بزنم یا یه وب‌هوک ساده بگذارم یا هر چیز دیگه‌ای.

خصوصاً این که ماها این موارد رو تو جلسات تصمیم می‌گیریم و بعداً می‌گیم AI انجام بده. بگذره این که هوش مصنوعی واقعاً هم تو این کارها خوب نیست. احتمالاً اگر به AIهای فعلی خیلی معتقد باشید میگید که یه skill بنویس و نمی‌دونم یه Agent بگو بررسی کنه و فلان و بیسار. اما حداقل تجربه من و خیلی‌ها این رو میگه که AI تو این بازی اصلاً تو دیواره.

و تهش هم به این برمی‌گرده که ما چقدر معتقدیم AI میفهمه. آیا می‌فهمه یا این که صرفاً یه سری توکن پشت سر هم می‌چینه با زنجیره احتمالات؟ به کدوم نزدیک‌تره؟

حالا این که میگم تو دیواره مقاله داریم راجع بهش. خیلی جالبه که مقالاتی داریم که به مدل‌های هوش مصنوعی تسک میدن حل کنند و می‌بینن که به مرور اگر همه تصمیمات رو خودشون بگیرند چه بلایی بر سر کدبیس میاد.

SlopCodeBench: Benchmarking How Coding Agents Degrade Over Long-Horizon Iterative Tasks

یه تجربه‌ای هم هست از آقای کریس تایتس تک که اونم به همچین چیزی رسیده.

I Spent 1.5 Billion AI Tokens on Absolute Slop

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

اگر توصیه اساتیدی مثل Scott Hanselman رو هم بخواید بشنوید، اینها روی پایه‌های مهندسی نرم‌افزار خیلی تأکید دارند. این آقا رو من سال‌هاست دنبال می‌کنم و خیلی قبولش دارم. روی یادگیری معماری، فهم کد و اصول مهندسی نرم‌افزار در کل خیلی تأکید دارند.

System Design in a Hurry | Hello Interview System Design in a Hurry

من فیلمش رو پایین تو لینک‌‌های ویدئو گذاشتم اگر خواستید و علاقه داشتید ببینید. بحثی که امروز مطرح کردم در کل خیلی بحث پیچیده‌ای هست و بین بزرگان فیلد هم دعواست. این زاویه دید منه نسبت به این بحث‌ها و اصلاً هم unbiased نیست.

برداشت من اینه که خصوصاً مدیران و پروداکت منیجرها ممکنه بیشتر به وایب‌کدینگ متمایل میشن و به ضعف‌هاش اهمیتی نمیدن. انگار ما آدم‌ها فرافکنی می‌کنیم و ویژگی‌های خودمون رو به مدل نسبت می‌دیم و با چند تا نشونه کوچیک فکر می‌کنیم مدل هم لابد مثل ماست؛ ولی هر چی آدم بیشتر با این مدل‌ها مستقیماً‌ درگیر باشه و تو سطوح پروداکشن (نه فقط پروتوتایپ) باهاش کار کنه، مشکلاتش رو هم بیشتر می‌بینه.

خیلی حرف زدم. اگر بخوام جمع‌بندی کنم کمی تو سر وایب‌کدینگ زدم. بحث من این بود که برای پروژه‌ آخر هفته عالیه، برای پروتوتایپ خداست ولی روی پروژه‌های که هزاران کاربر دارن استفاده می‌کنند و مهم و حیاتی هست، به این سادگی‌ها نمیشه وایب‌کد انجام داد. و نهایتاً یه Core Value باید برای خودمون پیدا کنیم که بگیم هوش مصنوعی نمی‌تونه فلان کار رو با این کیفیت انجام بده و من انجام میدم.

امیدوارم که براتون مفید بوده باشه.

منابع و لینک‌ها