کد نوشتن ارزان شد، کد خواندن گران

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

کدنویسی نمرده است. چیزی که تمام شده، دورانی است که کد نوشتن کارِ سختی بود.

و این دو تا خیلی با هم فرق دارند.

می‌دانم این حرف برای چه کسی نگران‌کننده‌تر است. اگر تازه شروع کرده‌اید، یا یکی دو سال است دارید جاوااسکریپت و فرانت‌اند یاد می‌گیرید، سؤالتان این است: «چیزی که دارم یاد می‌گیرم، تا وقتی یادش بگیرم بی‌ارزش شده؟»

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

کارِ سخت جای خودش را عوض کرده

تا دو سال پیش، سخت‌ترین قسمت ساختن نرم‌افزار «نوشتن» بود. شما می‌دانستید چه می‌خواهید، ولی رسیدن به آن سه هفته تایپ کردن لازم داشت. برای همین هم مهندس خوب کسی بود که سریع‌تر و تمیزتر می‌نوشت.

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

اما دو چیز اصلاً ارزان نشده‌اند: اینکه تصمیم بگیرید چه چیزی باید نوشته شود، و اینکه بفهمید چیزی که نوشته شده درست است یا نه.

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

قسمت بعدی، خواندن و بررسی کد است.

و اینجاست که اشتباه رخ می‌دهد: سرعت تولید ده برابر می‌شود و توان بررسی همان‌قدر می‌ماند که بود. نتیجه‌اش کد بیشتر نیست؛ بدهی فنیِ سریع‌تر است. یعنی مشکلاتی که امروز نمی‌بینید و شش ماه دیگر باید بنشینید جمعشان کنید.

یک اشتباه که هیچ‌کس ندید

به‌جای مثال فرضی، یک مورد واقعی از همین هفته بگویم.

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

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

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

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

هیچ تستی این را نمی‌گرفت، چون از نظر تست چیزی نشکسته بود. پیدا شد چون کسی به‌جای اینکه به سبز بودن همه چیز اعتماد کند، رفت همان فایل تنظیمات را خواند و پرسید: «این درخواست دقیقاً کجا می‌رود؟»

این همان جنس اشتباهی است که از این به بعد گران می‌شود. نه کدی که خطا می‌دهد. کدی که خطا نمی‌دهد و اشتباه است.

کار شما شده مرزبندی

وقتی می‌گویم «وقت معماری است»، منظورم کشیدن دیاگرام‌های قشنگ نیست. منظورم این است که کار اصلی شما مشخص کردن این است که ایجنت کجا اجازه دارد کار کند و کجا ندارد.

یک ایجنت دقیقاً به اندازهٔ اطلاعاتی که به او می‌دهید باهوش است، و دقیقاً به اندازهٔ دسترسی‌هایی که دارد خطرناک. پس کار شما این است که سیستمی بسازید که اشتباه کردن در آن ارزان باشد.

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

اگر این‌ها نباشد، ایجنت سرعت شما را زیاد نمی‌کند. فقط سریع‌تر شما را به دیوار می‌کوبد.

کار با ایجنت بیشتر شبیه مدیریت کردن است تا پرامپت نوشتن

بهترین قیاسی که پیدا کرده‌ام این است: یک ایجنت مثل یک نیروی جونیورِ خیلی سریع است که خسته نمی‌شود، چیزی یادش نمی‌ماند، و خجالت هم نمی‌کشد.

سریع است، پس کار زیاد تحویل می‌دهد. خسته نمی‌شود، پس هیچ‌وقت نمی‌گوید «این کار حوصله می‌خواهد». چیزی یادش نمی‌ماند، پس همان اشتباه هفتهٔ پیش را دوباره می‌کند، مگر اینکه شما جایی نوشته باشیدش. و خجالت نمی‌کشد، پس وقتی چیزی را بلد نیست، با اعتماد‌به‌نفس کامل چیزی می‌سازد که درست به نظر می‌رسد.

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

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

مهارتی که کم‌کم گران می‌شود: خواندن

این نکته‌ای است که کمتر کسی می‌گوید، چون تیتر جذابی ندارد.

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

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

هیچ ایجنتی این‌ها را برایتان انجام نمی‌دهد، چون این‌ها مسئلهٔ نوشتن متن نیستند. برای این تصمیم‌ها باید بدانید کاربر چه می‌خواهد، کسب‌وکار از کجا پول درمی‌آورد، و سر این سیستم در ده سال گذشته چه آمده. ایجنت هیچ‌کدام را نمی‌داند.

پس اگر تازه شروع کرده‌اید

حالا جواب آن سؤال اول.

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

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

هر بار که یک ایجنت برایتان چیزی می‌نویسد، صد خط کد جلوی شماست که خودتان ننوشته‌اید. بیشتر آدم‌ها نگاه می‌کنند، می‌بینند کار می‌کند، و رد می‌شوند. کاری که کم کسی می‌کند این است:

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

و از هر چیزی که کار کرد یک سؤال بپرسید: «اگر این خراب شود، من از کجا می‌فهمم؟» اگر جوابی نداشتید، کار هنوز تمام نشده.

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

سؤال دیگر این نیست که آیا ایجنت‌ها کد می‌نویسند یا نه. می‌نویسند. سؤال این است که وقتی نوشتند، چه کسی می‌فهمد چه نوشته‌اند.

خبرنامه‌ی فارسی

اگر این نوشته به کارتان آمد، نوشته‌ی بعدی را مستقیم برایتان می‌فرستم. نه تبلیغ، نه اسپم، و لغو اشتراک با یک کلیک.

ترجیح می‌دهید ایمیل ندهید؟ نوشته‌های تازه در گروه تلگرام هم اعلام می‌شود.

پیوستن به گروه تلگرام

بیشتر بخوانید