دیباگ به انگلیسی؛ توصیفِ مشکل، فرضیهسازی و «found it!»
دیباگِ گفتاری سه فاز دارد: توصیفِ دقیق (It happens when…, I can reproduce it in 3 steps), فرضیهسازی (My theory is the cache is stale), و جمعبندی (Found it — the fix is one line). با گزارشِ ساختاریافته، کمکِ تیم نصفِ عمرِ باگ را کم میکند.
باگ، پنهانترین گفتگوی روزانهٔ فنی است: کسی چیزی نمیداند، شما چیزی را میبینید، همه جملههای نصفه رد و بدل میشود. تفاوتِ تیمِ حرفهای و خسته، در «زبانِ باگ» است: گزارشِ ساختاریافته و فرضیهٔ شفاف، دو-سه ساعتِ شکار را نصف میکند — و تو را از «فردِ اذیتشده» به «مهندسِ مسئله» ارتقا میدهد.
این درس علاوه بر جملهها، فرمولِ گزارشِ باگ را میدهد که در Jira و GitHub issue هم همان است — یعنی سرمایهگذاریِ یکبار و بازدهیِ هرروزه.
توصیفِ دقیق؛ گزارشی که خودش نصفِ حل است
فرمولِ گزارشِ کامل: ۱) انتظار vs واقعیت: "Checkout should show the total, but it shows zero." ۲) بازسازی: "Steps to reproduce: add two items, apply the discount code, go to checkout — total is zero." ۳) دامنه: "Only on production, only for logged-in users. Staging is fine." ۴) زمان: "Started after yesterday's release — worked fine before." — همین چهار بند، ۸۰٪ سوالهای اولیهٔ helpers را جواب میدهد و به آنها «شروعِ گرم» میدهد. واژهها: reproduce (بازسازی), expected behavior (رفتارِ موردِ انتظار), actual behavior (رفتارِ واقعی), consistent / intermittent (همیشه / گاهیبهگاه — باگِ بیثبات را intermittent بگو، خدایانِ دیباگ قربانی میخواهند: flaky برای تستها).
فرضیهسازی؛ بلند فکرکردنِ منظم
قالبهای فرضیه: "My theory is the cache is stale — the config changed but the TTL is long." · "I suspect a race condition: two workers pick the same job." · "It's either the token expiring or the clock drift — let me check the logs." (It's either A or B — قالبِ دوگانهٔ شکار) و مراحلِ حذف: "I've ruled out the network — same behavior on localhost." (شبکه رو حذف کردم — روی لوکال هم همینه.) زبانِ حذفِ گزینهها، به تیم نشان میدهد که شکارِ سیستماتیک در جریان است نه گیرزدنِ کور.
کمکخواهی و جمعبندی؛ جامعهٔ شکار
کمکخواهیِ هدفمند: "Has anyone seen this error before? Connection reset by peer — first time for me." · "Jack, you know the payments service best — got 10 minutes to pair on this?" و جمعبندیِ دو حالت — پیروزی: "Found it! The discount was applied twice — fixing now, PR in 30 minutes." (پیداش کردم! تخفیف دوبار اعمال میشد — الان درستش میکنم، PR تا ۳۰ دقیقه) و شکستِ موقت: "No luck today. I've narrowed it to the webhook handler. Picking it up fresh tomorrow." — هر دو، جملههایِ حرفهایِ پایانِ شیفتِ شکارند. و بعد از فیکس: "Added a regression test so it never happens again." — بستنِ حلقه، امضای مهندسِ بزرگ.
گرامرِ عمیقتر: زبانِ حدس و حذف — might و must و رِجاکسیسم
دیباگ، گرامرِ احتمال دارد: might (شاید — احتمالِ ضعیف), could (ممکن است — امکان), must (حتماً — استنتاجِ قوی: «The user must have double-clicked» — حتماً دوبار کلیک کرده), can't (نمیتواند باشد — استنتاجِ منفی: «It can't be the DNS — localhost fails too»). برای حذف: I've ruled out X (X رو حذف کردم), That leaves Y (پس فقط Y میمونه), It works until it doesn't (کار میکنه تا لحظهای که نمیکنه — جملهٔ مقدسِ intermittentها!). و نتیجه: It turned out to be X (معلوم شد X بود).
گفتگو: جفتشکارِ سیدقیقهای
اشتباههای رایجِ فارسیزبانها در همین درس
این بخش را با یک قرارداد بخوان: هر ❌ یعنی «مغزِ فارسیزبانت این را میسازد و طبیعی است»، و هر ✅ یعنی «این همان چیزی است که گیرندهٔ انگلیسیزبان میشنود». خطاها اثرِ مستقیمِ ترجمهٔ ذهنیِ فارسی به انگلیسیاند؛ با هر جفت بلند تکرار کن تا شکلِ درست در گوشت نشست کند.
تمرینهای این درس — چهار قدم، بیعجله
زبانِ شکارِ باگ، زنجیرهٔ حدس و حذف است؛ چهار تمرین را بلند اجرا کن و بعد پاسخها را باز کن — استنتاجِ نصفهگفته، استنتاجِ نصفهفروخته است.
- زنجیرهٔ استنتاج را کامل کن: «It ___ (can) be the DNS — localhost fails too. It ___ (must) be the connection pool.»
- ترجمه کن: «خودِ کوئری را حذف کردم؛ پس فقط کانفیگِ اتصال میماند.» — با قالبِ ruled out / leaves.
- حالتِ بیثباتِ معروف را گزارش کن: در staging کار میکند، در prod میمیرد، لوکال هم بازسازی نمیشود.
- نتیجه را برای تیکت بنویس: «معلوم شد رِیس بین دو retry بود — هر دو قبل از تمامشدنِ اولی شلیک شدند» + بگو تستِ regression برایش چه میشود — با It turned out.
پاسخ تمرینها — اول خودت جواب بده، بعد باز کن
پاسخ تمرین ۱
پاسخ تمرین ۲
پاسخ تمرین ۳
پاسخ تمرین ۴
چالشِ امروز
🎯 باگِ بازِ فعلیات را برای یک همکار در سه جمله روایت کن: نشانه، حذفشدهها، حدسِ بعدی — و زنجیره را همانجا در تیکت کامنت کن.
نکات مکالمهٔ واقعی که کتابها کم میگویند
- can't → must → leaves — زنجیرهٔ استنتاج را بلند بگو: «نمیتونه X باشه… حتماً Yئه… پس فقط Z میمونه» — شنونده، مسیرِ فکرت را میخرد نه فقط جواب را.
- Can't reproduce را با جزئیات بگو — «Can't reproduce locally — works with 100 users, fails at 10k» — همین یک قید، نصفِ تیم را به سمتِ درستِ مشکل میفرستد.
- It turned out to be را ثبت کن — پایانِ هر شکار را در تیکت بنویس: «Turned out to be a race between X and Y» — دانشِ پیداشده، فقط وقتی ماندگار است که نوشته شود.
گزارشِ باگ چهاربندی: انتظار/واقعیت + steps to reproduce + دامنه + زمان. فرضیهسازی با قالب: my theory is… / I suspect… / it's either A or B / ruled out. کمک: has anyone seen this? / got 10 minutes to pair? بستنِ حلقه: Found it + regression test. باگِ بیثبات = flaky/intermittent — و توصیفِ دقیق، نصفِ راهِ حل است.