مصاحبهٔ فنی ۱؛ حلِ مسئله با صدای بلند
در مصاحبهٔ coding، ارزیابیشده «صدای فکرِ» توست نه فقط کد: سوالهای شفافساز بپرس, بلند فکر کن, پیچیدگی را بگو (O(n log n)), و تست بنویس. جملهٔ نجاتِ گیرکردن: "Let me step back and rethink the approach" — بازگشتِ آبرومند، مهندسی است.
مصاحبهٔ coding، ترسناکترین ۴۵ دقیقهٔ هر برنامهنویسِ غیرِ بومی است: مسئله + کد + انگلیسی، همزمان. اما ساختارش کاملاً بازیپذیر است: مصاحبهگرها یک روبکِ ارزیابی ثابت دارند (communication, problem solving, coding, testing) و بلند-فکرکردنِ ساختارمند، امتیازِ همان روبریک را میگیرد — حتی وقتی جوابِ نهایی ناقص است.
این درس، مسیرِ کامل را با دیالوگ میدهد: از «ببخشید، سوال را دقیقتر بخواهم» تا «اجازه بده تستش کنم». درسِ بعد system design است؛ درس ۶۳ رفتاری (behavioral).
درکِ مسئله؛ سوالهای شفافساز
قبل از کد، سه-چهار سوال بپرس — همین سوالها اولین امتیازِ توست: ۱) ورودی/خروجی: "So the input is a list of integers, and I should return the indices — right?" ۲) لبهها: "Can the list be empty? Can it have duplicates?" ۳) اندازه: "How big can n get? — That tells me if O(n²) is fine or I need better." ۴) مفروضات: "Is the input sorted? Can I modify it in place?" — و جمعبندِ بازگویی: "So to confirm: given an unsorted list and a target, return any pair that sums to it. Empty list means no answer." بازگویی، تو را از نصفِ خطاهای مصاحبه دور نگه میدارد.
بلند فکرکردن؛ قالبهای مسیرِ حل
سه قالبِ صدای فکر: ۱) رویکرد اولیه: "My first instinct is the brute force — two nested loops, O(n²). It works, but let me see if I can do better." (همیشه از brute force شروع کن — صداقتِ فنی است) ۲) بهبود: "I can trade space for time: one pass with a hash map — O(n) time, O(n) space." ۳) تصمیمِ نوشتن: "I'll code the hash-map version — it's clean and n can be a million." و جملههای میانِ کد: "I'm writing a helper for…" · "This part assumes the input is not null — I'll add a guard." · "Let me name it clearly — findFirstPair." اسمِ خوب و کامنتِ «چرا»، امتیازِ نوشتارِ فنیات است.
تست، پیچیدگی و گیرکردن؛ سهگانهٔ پایان
تست (بعد از کد): "Let me trace through an example: input 2, 7, 11 — target 9. First iteration stores 2, second finds 7's complement… returns 0,1. Looks right. Edge case: empty list — returns null, as agreed." پیچیدگی: "Time is O(n) — single pass. Space is O(n) for the map. If memory were tight, the sorted two-pointer approach gives O(1) extra space at O(n log n) time." و جملههای نجاتِ گیر: "Hmm, this doesn't handle the negative case. Let me step back and rethink." · "I'm going in circles here — can I get a hint? I'd rather ask than stall." — درخواستِ hint با این صراحت، در روبریکِ communicationِ بیشترِ شرکتها امتیاز دارد نه جریمه: گیرِ بیصدا جریمه دارد، گیرِ شفاف نه.
گرامرِ عمیقتر: زبانِ پیچیدگی و زمانِ مصاحبه
مصاحبهٔ کدنویسی، جملههای ثابتِ فنی دارد: "This runs in O(n) time and O(1) space." (این با زمانِ O(n) و فضای O(1) اجرا میشه) — دو بعدِ پیچیدگی را همیشه با هم بگو. "I can trade memory for speed" (میتونم حافظه رو با سرعت عوض کنم) — قالبِ بهبود. "The naive approach is O(n²); I can do better with a hash map." و برای تست: "Let me trace through an example" (بذار با یه مثال ردیابی کنم) — ردیابیِ بلند، امتیازِ تستِ ذهنی است. و سوالِ شفافسازِ ابدی: "Can the input be empty?" / "Are duplicates possible?"
گفتگو: چهار دقیقهٔ اوجِ مصاحبهٔ کدنویسی
اشتباههای رایجِ فارسیزبانها در همین درس
این بخش را با یک قرارداد بخوان: هر ❌ یعنی «مغزِ فارسیزبانت این را میسازد و طبیعی است»، و هر ✅ یعنی «این همان چیزی است که گیرندهٔ انگلیسیزبان میشنود». خطاها اثرِ مستقیمِ ترجمهٔ ذهنیِ فارسی به انگلیسیاند؛ با هر جفت بلند تکرار کن تا شکلِ درست در گوشت نشست کند.
تمرینهای این درس — چهار قدم، بیعجله
مصاحبهٔ کدنویسی، گفتارِ حینِ فکرکردن است؛ چهار تمرین را بلند و با وقفهٔ طبیعی اجرا کن، بعد پاسخها را باز کن.
- برای مسئلهٔ «اولین کاراکترِ یکتا» دو سؤالِ شفافساز دربارهٔ ورودی بپرس.
- پیچیدگیِ راهِ بیرحمانه را کامل بگو: دو حلقهٔ تو-در-تو — زمان و فضا، هر دو.
- جملهٔ معاوضه را کامل کن: «I can trade ___ for ___: one pass with a hash map gives…»
- ردیابی را بلند اجرا کن: برای رشتهٔ swiss شمارشها را بگو و پاسِ دوم را گزارش کن.
پاسخ تمرینها — اول خودت جواب بده، بعد باز کن
پاسخ تمرین ۱
پاسخ تمرین ۲
پاسخ تمرین ۳
پاسخ تمرین ۴
چالشِ امروز
🎯 امروز یک مسئلهٔ سادهٔ برنامهنویسی را بلند حل کن — شفافسازی، طرح، ردیابی، همه با صدا. مصاحبه از گوشِ تمرینندیده عبور نمیکند.
نکات مکالمهٔ واقعی که کتابها کم میگویند
- شفافسازی = امتیاز — سه-چهار سوالِ آغازین، امتیازِ مستقلِ مصاحبه است — سکوتِ شروعِ فوری، نمرهٔ communication را میسوزاند.
- Blind blind را بلند بگو — «Let me trace through an example» — ردیابیِ بلند، هم تست است هم نشانهٔ ذهنِ منظم؛ سکوتِ ایدهآل، سکوتِ فکر شمرده میشود نه ابهام.
- گیر کردی؟ مثل حرفهای بگیر — «Let me step back and rethink the approach» یا «Can I get a hint? I'd rather ask than stall» — درخواستِ hint با این صراحت، امتیاز است.
روتینِ مصاحبهٔ coding: شفافسازها (ورودی/لبه/اندازه/مفروضات) + بازگویی + بلند-فکر (brute force → بهبود → تصمیم) + تستِ ردیابی + پیچیدگی (O(n)/O(n²) را راحت بگو). گیر که خوردی: "Let me step back" یا درخواستِ صریحِ hint. صدای فکر، همان چیزی است که مصاحبهگر میخرد.