کد رو مثل کتاب نخون
خلاصهٔ کاملتر
شان گودکی تو این پست میگه کتاب رو از صفحهٔ اول تا آخر میخونیم، ولی کد رو نباید اینطوری خوند. به گفتهٔ اون سه تا فرق اصلی هست. اول اینکه ترتیب کد رو کامپیوتر تعیین میکنه نه خواننده؛ نمیشه یه خط رو فقط چون مقدمهٔ بهتریه ببری اول فایل. دوم اینکه کد معمولاً به شکل diff خونده میشه، یعنی تکههای تغییرکرده، نه یه محصول کامل. سوم اینکه ساختار کد خیلی پیچیدهتره: وابستگیهای یه متن معمولاً تو یه پاراگراف میمونه، ولی وابستگیهای کد میتونه کل codebase رو بگیره. «جنگ و صلح» حدود 600 هزار کلمهست، در حالی که خیلی از codebaseهای بزرگ همینقدر خط کد دارن.
نویسنده معتقده برنامههای بزرگ اونقدر پیچیدهان که هیچکس نمیتونه کامل بفهمتشون، پس خوندن کد یعنی تصمیم بگیری کجا رو عمیق بفهمی و از کجا رد بشی. به نظرش بیشتر آدمها کد رو بد میخونن: مثل کتاب جلو میرن و مسیر اجرا از دستشون در میره، یا فقط diff رو میخونن و اهمیت بخشهای تغییرنکرده رو نمیبینن، یا خسته میشن و حدس میزنن.
روشش از تکنیکی به اسم dyadic scanning میاد که برای خوندن مقالههای ریاضی معرفی شده بود، یعنی بهجای یه دور آروم و ترتیبی، چند دور میزنی: اول ساختار کلی، بعد زیرساختارها، آخر سر جزئیات. برای کد این یعنی خوندن نامرتب. اون یه مسیر مهم رو انتخاب میکنه، مثلاً happy path فیچری که diff اضافه کرده، و فقط دنبال میکنه کدوم تابع کدوم رو صدا میزنه. بعد هر دور یه تابع یا یه داده رو میگیره و همهٔ جاهایی که استفاده شده رو دنبال میکنه، حتی بیرون از diff. برای diff کوچیک با ctrl+f جابهجا میشه و برای diff بزرگ تو ادیتور با ctrl+click؛ هر چیز دیگهای رو جعبهٔ سیاه فرض میکنه.
فقط وقتی مطمئن شد diff رو فهمیده، یه بار کامل از اول تا آخر میخونه؛ اونم نه برای فهمیدن ساختار، بلکه برای پیدا کردن تیکههای عجیبی که تو دورهای قبلی ندیده. اگه چیز عجیبی ببینه، برمیگرده سراغ همون دورها. نویسنده میگه این روش شاید کند به نظر بیاد، ولی هر دور خیلی سریعه چون روی تکتک خطها گیر نمیکنی. این روش رو برای diffهای چندصدخطی میگه؛ diff کوچیک رو میشه یهسره خوند.
آخر سر جواب کسایی رو میده که میگن با LLMها دیگه لازم نیست کد بخونی. به گفتهٔ اون، تو کد تولیدشده با AI مرتب خطاهای بزرگ پیدا میکنه؛ نه باگ، بلکه مشکل alignment، یعنی کد کاری رو میکنه که AI میخواسته نه چیزی که تو میخوای. مثالش یه تغییر کوچیک بود که به یه diff سههزارخطی تبدیل شد، چون ایجنت یه race condition بیخطر رو دیده بود و براش یه سازوکار پیچیده ساخته بود. به نظرش LLM میتونه تو خوندن کد کمکت کنه، ولی چون ارزشهای فنیش با تو یا شرکتت یکی نیست، هم خروجیش رو باید بخونی هم خود کد رو.
نکات کلیدی:
- کد به سه دلیل با کتاب فرق داره: ترتیبش رو کامپیوتر تعیین میکنه، به شکل diff خونده میشه و ساختارش پیچیدهتره
- «جنگ و صلح» حدود 600 هزار کلمهست و خیلی از codebaseهای بزرگ همینقدر خط کد دارن
- روش پیشنهادی dyadic scanning هست: چند دور سریع از کلی به جزئی
- اول happy path رو دنبال کن، بقیه رو جعبهٔ سیاه فرض کن، آخر یه بار کامل بخون
- این روش برای diffهای چندصدخطیه؛ diff کوچیک رو یهسره بخون
- نمونهٔ نویسنده: یه تغییر کوچیک که ایجنت AI به یه diff سههزارخطی تبدیلش کرد




