طراحی مصاحبه برای جذب مهندس نرم‌افزار

(این نوشته پیش‌تر به شکل رشته توییت نوشته شده بوده و سپس در ویرگول رونوشت شده)برای مصاحبه‌ی مهندس نرم‌افزار، شرکت‌های بزرگ کم و بیش به رویه‌ی مشابهی برای سنجش فنی و غیرفنی افراد هم‌گرا شدن. خلاصه‌ای از این فرآیند به همراه تجربیات شخصی از اجرای اون رو در این گفتار می‌نویسم.بخش اول، سوال‌های داده‌ساختاری/الگوریتمی و پیاده‌سازی (به زبان دل‌خواه) هست. ولی زبان خاص یا تکنولوژی یا framework تقریبا اصلا مهم نیست - به استثنای شغل‌های خاص که اینجا مجالش نیست. ایده اینه که زبان و تکنولوژی رو حین کار یاد می‌گیرن. کسی که python نویس باشه go نویس هم می‌شه. اخیرا شنیدم که در بازار ایران، دستمزد یک go نویس خیلی بیشتر از java نویسه و این عجیب بود. به هر حال از نیروی تازه انتظاری نمی‌ره تا چند ماه پربازده باشه. این به خود نیرو هم گفته می‌شه تا الکی استرس و سندروم ایمپاستر نگیره. البته سوال خیلی از کاندیداها بعد استخدام اینه که ما که همه داریم کار گِل می‌کنیم پس اون مساله‌های جذاب الگوریتمی کِی پیش میان - این مشکل باشه برای یک وقت دیگه.هدف مصاحبه این نیست که کاندیدا حتما در زمان موجود (مثلا ۴۵ دقیقه) به کُد کامل و درست برسه بلکه فرآیند حلش مهمه. مساله تعمدا کلی بیان می‌شه و برخی نیازها در آغاز گفته نمی‌شه (مثلا خصوصیات ورودی) تا ببینیم آیا طرف همه‌ی جوانب رو می‌بینه و سوال می‌پرسه یا از خودش فرض غلط می‌کنه.بخش دوم، ارزیابی گُنجیدن فرهنگی (culture fit) هست. به کاندیدا می‌گیم فرض کن در فلان موقعیت قرار گرفتی (مثلا تضاد با تیم دیگه) و بگو چه می‌کنی، یا از یکی از تجربیاتت زمانی که به فلان سناریو خوردی بگو (مثلا انتظاراتِ بیرونیِ غیرممکن). در گوگل، این بخش مصاحبه اخیرا مهم‌تر شده.فرهنگ کاری شرکت سرمایه‌ی بزرگی هست و اگر به سمت خراب شدن بره، هزینه‌ش زیاد و اصلاحش سخته. به تجربه‌ی محدود و جسارتا عرض می‌کنم، شرکت‌های ایرانی نیاز به کار بیشتر در این زمینه دارن. برخی شرکت‌های غیرایرانی که من باهاشون همکاری داشتم هم همین‌طور، ولی الان مخاطب نیستن.در این بخش و در بخش‌های دیگه، کاندیدا به شکلِ «خوبه» یا «خوب نیست» ارزیابی نمی‌شه بلکه در سنجه‌های از پیش معلوم ارزیابی می‌شه مثل توانایی پیش‌روی در شرایط ابهام، کار تیمی، احساس مسؤلیت در قبال هم‌تیمی‌ها، به چالش کشیدن وضع موجود. این آخری واقعا یک ارزشه، فرمان‌بردار محض بودن ارزش نیست (*).مثال از سنجه‌های فنی: دانش داده‌ساختاری، توانایی پیاده‌سازی، توانایی فهم و توانایی بیان، کارایی/سرعت، طراحی/رویکرد سیستماتیک - مثال‌ها به ناچار نادقیق و ناکامل هستن. ارزیابی شامل یک امتیاز جداگانه در هر سنجه‌ی ارزیابی شده به همراه توضیحات هست - که به سلیقه‌زدایی کمک می‌کنه.مهم‌ترین نکته در طراحی مصاحبه، این سنجه‌هاست نه سوال‌های مصاحبه. همچنین بهتره که مصاحبه، فرآیند مدوّن داشته باشه و موضوعات و زمان‌بندی‌هاش در شرکت استانداردسازی بشه.مهمه که شرایط رو برای کاندیدا مهیا کنیم که بهترینِ خودشو ارائه بده. پیش از هر مصاحبه ببینیم راحته، چیزی می‌خواد. آخر مصاحبه بهش وقت بدیم که درباره‌ی شرکت سوال بپرسه - مصاحبه دو طرفه‌ست. در طول مصاحبه نذاریم استرس ببردش، مثبت و خوش‌رو باشیم. سوالات شخصی نپرسیم. به ما ربطی نداره کاندیدا چند سالشه یا اصالتش کجاییه یا دینش چیه یا بچه داره یا نه. اینا باعث سودِهی (bias) می‌شه.مهمه که مصاحبه رو سلیقه‌زدایی کنیم: اگر کاندیدای الف رو چه من چه همکارم مصاحبه کردیم باید امتیازات مشابه دربیاد. مثلا آموزش و تمرین مصاحبه و به خصوص جلسات قِلِق‌گیری (calibration) بین مصاحبه‌کنندگان مفیدن - قلق‌گیری در ارزیابی کارمندان هم خیلی مهمه و باشه برای یک وقت دیگه.بخش سوم، مصاحبه‌ی طراحی سیستمه، البته نه برای رده‌ی junior. سوال‌های معروف که از این بخش در اینترنت پخشه امثال «dropbox رو طراحی کنید» هست. ما معمولا سوال مشخص‌تر می‌پرسیم مثل طراحی «یک سیستم payment که با فلان و فلان موجودیت حرف می‌زنه» یا «یک cache برای فلان منظور خاص».از اهداف این مصاحبه اینه که کاندیدا چه سوال‌هایی می‌پرسه و چه قدر نگاه همه‌جانبه و ذهن کمّی‌نگر داره. اگر کاندیدا کلی‌گویی کنه مثلا «اینو redundant می‌کنیم» یا اسم‌های معروف (buzzword) بپرونه مثل «اینجا nosql می‌ذاریم»، حساس می‌شیم که چگونگی و (به خصوص) چراییش رو توضیح بده.متاسفانه تجربه‌ی (شاید غلط) من از بازار فن‌آوری ایران اینه که کلی‌گویی و buzzword گفتن فراوونه و انگار اعتباره، و در رده‌های متوسط بازار اینجا هم همین‌طور (صِرفا یک رده‌بندی دِیمی) ولی در فرهنگ شرکتیِ مثلا گوگل، عموما زشت و مبتدیانه حساب می‌شه اگر فقط کلی‌گویی کنی یا بی‌پایه نظر بدی و نتیجه‌گیری کنی. (شاید در خیلی تیم‌ها هم این فرهنگ نباشه،‌ هدف تعریف نیست بلکه مثال هست.)چه در این بخش (طراحی) و چه بخش اول (الگوریتم)، هیچ اشکالی نداره که مصاحبه‌گر به مصاحبه‌شونده راهنمایی بده - درست دریافت کردن و اصلاح مسیر بر اساس راهنمایی‌ها یک امتیاز بزرگ در کاندیدا هست. وقتی فکر می‌کنیم آیا خوبه این شخص همکارمون بشه یا نه، خیلی ارزش نیست که طرف «اصلا راهنمایی نخواد» ولی این که سوال‌های درست رو بپرسه و خوب بفهمه و ارتباط موثر کلامی داشته باشه ارزشه.این داده‌های پراکنده بر اساس تجربه‌ی محدود من از چند سال مصاحبه‌گری در شرکت خودمون و مصاحبه شدن در چند شرکت دیگه هست. خوشحال می‌شم تجربیات همکاران رو هم بدونم. البته سال‌ها پیش با شرکت‌هایی هم مصاحبه داشتم که این کارا رو نمی‌کردن (عموما شرکت‌های کوچک‌تر) و مثلا از روی رزومه جلو می‌رفتن یا جزییات تکنولوژی می‌پرسیدن، ولی الان بعد از اندک تجربیات این سال‌ها می‌تونم با اطمینان بگم که اون روش حتی برای همون نقش خاص هم اشتباه و به ضرر شرکته - نظر شخصی.________________________________________(*) پانویس: برای یک شرکت نوآور، این نهایتا به نفع شرکته که کارمنداش در حباب خودشون گیر نکنن، نگاه چالش‌گر داشته باشن و از این کار نترسن، وگرنه شرکت رو به پایین می‌ره نه بالا. طبیعتا این مستلزم فرهنگ سالم چالش‌گری و نگاه باز و غیردُگم هست، هم از طرف گیرنده که نگاه غیرتی و قلمروی نداشته باشه و هم از طرف شخص چالش‌گر که بدونه به اندازه‌ی کافی نمی‌دونه، مثلا در بیشتر موارد جواب اینه که تغییر وضع موجود هزینه‌ش به فایده‌ش نمی‌ارزه، ولی گاهی هم می‌ارزه. نهایتا «نفع شرکت» قراره مثل آسِ حُکم باشه در هر بحثی و بهتره تکرار هم بشه تا دچار تیم‌گرایی نشیم. البته بدونید که در مثلا گوگل هم این مشکلات کامل حل نشده، ولی اوضاع بد نیست (در آمازون که ...). سلسله مراتب ارتشی، مناسب شرکت نوآور نیست - نظر غیرتخصصی. در شرکت ما، این خصیصه (در حباب نموندن و شجاعت) حتی در ارزشیابی نیم‌سالانه‌ی شخص امتیاز مثبته. از دیگر ساز و کارهایی که کارمندان پشت یک فرد (مدیر) گیر نکنن اینه که کارمند، علاوه بر مدیرش معمولا با مدیر مدیرش هم جلسات دونفره‌ی منظم هرچند دیر به دیر داره. مدیر توسط کارمندان ارزیابی نیم‌سالانه می‌شه. همچنین کارمند یک ‌پرسش‌نامه‌ی سالانه هم درباره‌ی مدیر و مدیر مدیر و بالادستی‌هاشون پُر می‌کنه--جستجو کنید "googlegeist"-- که از جمله می‌پرسه برای اون مدیر، چه قدر «شرکت» در اولیته نه تیم یا شخص. قصدم تعریف و پُز نیست، سعی دارم چند عنصر از فضایی که چالش‌گری رو محیا می‌کنه توضیح بدم. این فضا، بخشی از فرهنگ شرکتی هست و قطعا منظور این نیست که در شرکتی که فرهنگش این نیست از فردا این طور رفتار کنید، یا به مدیرانی که این‌طوری فکر نمی‌کنن به چشم عقده‌ای نگاه کنید! تغییر فرهنگ سخته. در گوگل هم فرهنگ‌های غلطی وجود داره و باید کنار اومد - یعنی نتیجه‌ی این گفتار این نباشه که کمال‌گرا و غرغرو بشیم. همچنین این یک نسخه برای «هر» شرکتی نیست. ولی چندین شرکت چه در ایران و چه بیرون دیدم که به نظرِ (شاید غلطِ) من بهتر بود این‌طور می‌بودن و نبودن. معمولا هم به سودمندی‌های این تفکر آشنا بودن، مثلا مدیران در گروه تلگرامی‌شون این مطالب خوش‌آوازه رو رد و بدل می‌کردن، ولی هنگام اجرا بهانه‌های خودشون رو داشتن. به هر حال اگر ایگوی شخصی رو هم بذاریم کنار، اینرسی نیروی بزرگیه - این قضاوت شخصی و دِیمی هست. شما اگر دستی در کار دارید و صلاح می‌دونید، بد نیست فراهم کردن چنین بستری رو برای شرکتتون سبک و سنگین کنید.