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

یک اعتراف: بیشتر کدی که این روزها با اسم من ثبت می‌شود را من تایپ نکرده‌ام.

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

مدتی این را سود خالص می‌دیدم. تا اینکه چیزی را متوجه شدم.

دو جایی که هنوز باید خودتان بنویسید

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

اولی ریویو است. پول‌ریکوئست یک نفر دیگر، یا خروجی خود ایجنت. کسی نمی‌تواند ریویو را پرامپت بزند. باید بنشینید، بخوانید و بگویید این درست است یا نه.

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

هر دوی این‌ها دقیقاً همان عضله‌ای را می‌خواهند که پرامپت نوشتن اصلاً درگیرش نمی‌کند.

چیزی که داشت از دستم درمی‌رفت

اولین بار وقتی فهمیدم که سر چیزهای کوچک مکث کردم.

نوشتن یک reduce با دست. اینکه اینجا Map بهتر است یا یک آبجکت ساده. امضای دقیق آن متد Promise که ماهی یک بار لازمم می‌شود. اینکه یک debounce را از صفر چطور می‌نویسند.

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

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

پس یک ابزار کوچک برای خودم ساختم

اسمش coding.gazar.dev است و بگذارید صادق باشم که چیست: محصول نیست. برای خودم ساختمش چون خودم لازمش داشتم، بعد بازش گذاشتم که اگر کس دیگری هم لازمش دارد استفاده کند.

شکلش ساده است. یک مسئله، یک تایمر، یک ادیتور خالی، و تست‌هایی که نمی‌بینیدشان. ده تا بیست دقیقه، نه بیشتر. از حافظه می‌نویسید؛ نه ایجنت، نه کپی‌پیست، نه سرچ. آخرش نمره می‌دهد و مهم‌تر از نمره، تعیین می‌کند همین سؤال کِی دوباره سراغتان بیاید.

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

اولین بار که یک سؤال تکراری آمد حرصم گرفت. بار دوم فهمیدم دقیقاً همان جایی است که دارد کار می‌کند.

سؤال‌ها معمای الگوریتمی نیستند

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

سؤال‌ها از دل مصاحبه‌های واقعی درآمده‌اند؛ چیزهایی که واقعاً از آدم‌ها پرسیده می‌شود. یک debounce بنویس. یک کش LRU. یک استخر پرامیس با سقف همزمانی. تلاش مجدد با تأخیر پلکانی. یک محدودکنندهٔ نرخ درخواست. مقایسهٔ عمیق دو آبجکت. یک EventEmitter کوچک.

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

و درجه‌بندی شده‌اند: مید، سنیور، استف. اینکه کدام سطح را باید تمرین کنید به شغلی که می‌خواهید ربط دارد، نه به حال آن روزتان.

نفع دومی که به اندازهٔ مصاحبه مهم است

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

اگر سینتکس خودتان تیز بماند، می‌توانید خروجی ایجنت را درست ریویو کنید.

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

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

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

خوب ریویو کردن و خوب نوشتن دو مهارت جدا نیستند. دومی همان چیزی است که اولی را ممکن می‌کند.

چند دقیقه در روز، همین

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

فقط ده تا بیست دقیقه در روز است، روی یک مسئلهٔ کوچک، از حافظه، با یک ساعت که دارد می‌شمارد. همین. عادتی که هیچ چیزی برای نشان دادن به کسی ندارد و دقیقاً به همین دلیل کم کسی نگهش می‌دارد.

اگر شما هم همین وضعیت را دارید، یعنی بیشتر کدتان از مسیر یک ایجنت رد می‌شود و حس می‌کنید دست خودتان کمی سرد شده، coding.gazar.dev همان‌جاست.

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

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

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

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

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

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