مصاحبه فنی موفق و پرسش و پاسخ‌های رایج

سلما الشهاوی، فری‌کدکمپ — همه آدم‌ها دوست دارند آنقدر از این شرکت به آن شرکت بپرند تا بالاخره بهترین جایگاه شغلی ممکن را برای خودشان پیدا کنند. در حال حاضر، من به دنبال کار در شرکت‌هایی هستم که در فرهنگشان به حفظ تعادل بین کار و زندگی اهمیت می‌دهند. در همین پروسه، برای شرکتی رزومه فرستادم که به دنبال مهندس نرم‌افزار بود. افراد این شرکت از حرفه‌ای‌ترین افرادی بودند که به عمرم با من مصاحبه کرده بودند. مصاحبه‌گر از قبل خودش را کاملاً برای مصاحبه آماده کرده بود و در جلسه‌مان هم زمان کافی کنار گذاشت تا بتوانیم از همدیگر سوال بپرسیم.درباره رزومه‌نویسی این مطلب را در کوئرامگ بخوانید: راهنمای ساخت یک رزومه بی‌نظیر برای برنامه‌نویس‌ها و مهندس‌های نرم‌افزاردر این پست، می‌خواهم سوالاتی که این مصاحبه‌گر از من پرسید را با شما در میان بگذارم. این سوالات انواع مختلفی دارند؛ هم سوالات رفتاری هستند و هم سوالات فنی. در پایان مصاحبه، وقتی نوبت به من رسید من هم سوالاتی از طرف مقابلم پرسیدم که آنها را هم با شما درمیان می‌گذارم.چرا این مصاحبه را اینجا ثبت می‌کنم؟ چون معتقدم این مصاحبه، تجربه ارزشمندی بود که از مصاحبه رفتاری و فنی داشتم. شاید به بقیه مهندسان هم کمک کند تا درک بهتری در مورد نحوه پاسخ دادن به این نوع سوالات پیدا کنند!سوال‌های مصاحبه استخدام و علت آن‌هاسوال ۱ در مصاحبه استخدام: از خودت برایم بگو.هدف از پرسیدن این سوال، این است که با ارائه اطلاعاتی مختصر درباره خودتان، توجه کامل مصاحبه‌گر را به خود جلب کنید! بنابراین، باید از قبل تمرین کرده باشید که در جواب این سوال چه خواهید گفت. من دوست دارم قبل از مصاحبه، یک خلاصه مختصر و مفید در مورد خودم بنویسم و بعد با تمرین، سعی کنم این خلاصه را حداکثر در سی ثانیه (به روش معرفی آسانسوری یا همان Elevator Pitch) بیان کنم.جواب من: من مهندس نرم‌افزاری هستم که در رشته مهندسی مکانیک تحصیل کرده‌ام. علاقه خاصی به نوشتن کد تمیز، منظم و تست‌شده دارم. سابقه و تجربه کار با زبان‌های تابعی (Functional) و اسکریپتی را دارم.من اپلیکیشن‌های SaaS زیادی ساخته‌ام، از جمله در زمینه‌های احراز هویت (Authentication)، صدور مجوز (Authorization)، و پرداخت امن تجربه دارم. با کدنویسی در شغل قبلی‌ام آشنا شدم؛ آنجا اپلیکیشن‌هایی برای کمک به فرآیند طراحی می‌ساختم. حالا می‌خواهم مهارت‌هایم را به یک تیم خوب عرضه کنم که به دنبال عضوی جدید می‌گردد؛ عضوی که متعهد باشد و با عرصه‌های مختلف فناوری آشنایی داشته باشد.سوال ۲ در مصاحبه استخدام: موقعیتی را توصیف کن که وقت و منابع کافی در اختیار نداشتی، اما باید یک Feature کامل را در مدت زمان محدود تحویل می‌دادی.برای این نوع سوالات، شما باید این سه چیز را به شنونده توضیح بدهید: مسئله، راه‌حل، و عمل انجام شده. و باید این توضیح را در قالب یک داستان ارائه کنید!جواب من: قرار بود در یک اسپرینت دو هفته‌ای، نسخه دمو یک Feature را تحویل دهم. داستان کاربر (User Story) برای این Feature، دقیق مشخص نشده بود و تصمیم قطعی در مورد نحوه پیاده‌سازی آن گرفته نشده بود. علاوه بر این، مدیر محصول شرکت هم تازه استخدام شده بود و هیچ ایده‌ای در مورد این Feature نداشت. در عین حال، من هم وقت و منابع کافی برای شناسایی ورودی‌ها، خروجی‌ها و وابستگی‌ها در اختیار نداشتم.بنابراین تصمیم گرفتن با مدیر محصول و مدیر تیم جلسه‌ای مشترک تدارک ببینم تا بتوانیم با کمک هم، بارش فکری انجام دهیم و یک داستان کاربری ساده بسازیم که عملکرد مورد نظرمان را شبیه‌سازی کند. با این کار، ما به یک داستان کاربری دست پیدا کردیم که مورد تایید مدیر محصول‌مان بود. در نهایت، با مشخص شدن Feature، نوشتن و پیاده‌سازی کدهای پروژه را شروع کردم.سوال ۳ در مصاحبه استخدام: موقعیتی را برایم تعریف کن که در آن باید مشکلی را به مقام بالاتر از خودت انتقال می‌دادی.جواب من: قرار بود برای کدهای پروژه که یک توسعه‌دهنده دیگر نوشته بود، یک Unit Test بنویسم که Coverage بالاتری داشته باشد. باگی در کد بود که باعث می‌شد در یک بلوک بخصوص، Unit Test هیچ‌وقت موفقیت‌آمیز نباشد.من من فرآیند اشکال‌زدایی (Debugging) را شروع کردم تا ببینم باگ کجاست و درستش کنم. باگ را پیدا کردم؛ یک Query در دیتابیس بود که مشکل داشت. بررسی کردم تا ببینم مسئول این Feature چه کسی بوده، و ایمیل مفصلی در مورد مشکلی که در سر راه حل این مسئله وجود داشت، برایش فرستادم. او در پاسخ نوشت که بهتر است Unit Testها را طبق کد موجود که همچنان دارای باگ است بنویسم؛ زیرا همین فردا قرار بود دموی اسپرینت داشته باشیم و او مطمئن نبود که بشود مسئله را قبل از فردا صبح حل کرد.در این موقعیت، من تصمیم گرفتم قضیه را با مدیر تیم در میان بگذارم؛ زیرا Unit Test نوشتن برای یک باگ مثل این است که ماشین را عقب عقب برانی. مدیر تیم مسئله را بررسی کرد و از کسی که Feature را ساخته بود خواست تا کد پروژه را تصحیح کند.سوال ۴ در مصاحبه استخدام: از کجا مطمئن می‌شوی که دستوراتی که به شما داده شده دقیق و صحیح است؟جواب من: با بررسی دقیق و موشکافانه. به بعنوان مثال، وقتی که قرار است چیز جدیدی از یک متن راهنمای آموزشی یاد بگیرم، در هر قدم از کار خروجی را کنترل می‌کنم تا مطمئن شوم خروجی من عین همان چیزی شده که طبق راهنما قرار بوده باشد.سوال ۵ در مصاحبه استخدام: از کجا مطمئن می‌شوی که داده‌های تو با موفقیت در دیتابیس ذخیره شده است؟جواب من: راه‌های مختلفی برای این کار وجود دارد. می‌توانم با استفاده از یک تابع کمکی (Helper Method)، آن قسمت از داده را در دیتابیس چک کنم. اگر داده وجود داشت، Flag می‌زنم و مقدار آن را روی True تنظیم می‌کنم. اگر نبود، مقدار Flag را روی False می‌گذارم. شاید راه‌های دیگر هوشمندانه‌تر باشند، اما من دوست دارم با چشم خودم تایید نهایی را ببینم.سوال ۶ در مصاحبه استخدام: از کجا مطمئن می‌شوی که خروجی‌ کارت دقیقاً همان خروجی‌ای است که در داستان کاربر آمده؟جواب من: وقتی کاری به من محول می‌شود، یک فلوچارت می‌کشم و ورودی‌ها، خروجی‌ها و وابستگی‌ها را روی آن نشان می‌دهم. به این ترتیب اگر حواسم پرت چیزهای دیگر شود، می‌توانم با نگاه کردن به فلوچارتم سریعاً به موضوع اصلی برگردم. علاوه بر این، اگر یک جای کار گیر کنم، می‌توانم فلوچارتم را به افراد دیگری که با کدهای پروژه من آشنا نیستند هم نشان داده و با راحتی بیشتری از آنها کمک بگیرم.سوال ۷ در مصاحبه استخدام: به طور مفصل، موقعیتی را برایم تعریف کن که در آن تصمیم گرفتی که باید به سیاست‌های شرکت وفادار بمانی.جواب من: من شخصاً چنین موقعیتی را تجربه نکرده‌ام، اما یادم است که یکی از اعضای تیمم در چنین موقعیتی قرار گرفته بود. همکارم باید کدهای پروژه‌اش را با فراخواندن یک سیستم بیرونی (External) تست می‌کرد تا مطمئن شود که خروجی مطلوب را دریافت کرده است. برای این فراخوانی، لازم بود پروکسی‌ای را فعال کند که او را به سایت‌های بیرونی هدایت می‌کرد. فعال کردن این پروکسی مستلزم داشتن تاییدیه‌ (Certificate) بود. همکارم طبق رایج سیاست شرکت رفتار کرد و منتظر دریافت مجوز ماند.در اینجا مصاحبه‌گر از من پرسید که اگر جای همکارم بودم، در مدت انتظار برای گرفتن مجوز چه کار می‌کردم؟اگر این اتفاق برای من می‌افتاد، ترجیح می‌دادم در این مدت به بقیه در انجام کارهایشان کمک کنم؛ چون بدم می‌آید بیکار بنشینم.در اینجا مصاحبه‌گر از من تشکر کرد و گفت که اگر سوالی از او دارم، او آماده پاسخ دادن است. من معتقدم مصاحبه یک فرآیند دو طرفه است؛ بنابراین از قبل خودم را آماده کرده بودم و سوالاتی در چنته داشتم. این سوالات به من کمک می‌کردند تا فرهنگ شرکت را بهتر بفهمم و تصمیم بگیرم که آیا برای من جای مناسبی است یا خیر.سوالات خوبی که در مصاحبه استخدام می‌توانید بپرسیدحتماً سعی کنید که بر مبنای توضیحاتی که در آگهی شغلی داده شده، حداقل دو تا سوال در چنته داشته باشید. این سوالات باید عمیق و پرمعنی باشند و نشان دهند که شما به کار کردن در این جایگاه شغلی علاقه دارید.سوال ۱: شما با چه معیارهایی موفقیت‌آمیز بودن یا به شکست انجامیدن یک پروژه/اسپرینت را می‌سنجید؟در این سوال، من می‌خواستم ببینم که آنها در پیاده‌سازی Featureها چقدر خوب عمل می‌کنند. آیا فقط سعی می‌کنند اسپرینت را تمام کنند، یا اینکه کیفیت هم برایشان مهم است؟ سوال ۲: چطور مدت زمان انجام تسک‌ها را تخمین می‌زنید؟ و چه کسی این تخمین‌ها را می‌زند؟من می‌خواستم بدانم که آیا آنها توسعه‌دهنده‌ها را تحت فشار قرار می‌دهند و بدون اینکه از خودشان بپرسند به آنها کار محول می‌کنند؟ آیا داشتن چارچوب زمانی واقع‌گرایانه برایشان مهم است یا خیر؟ مدت زمان انجام تسک را می‌توان با ترکیبی از تئوری و تجربه تخمین زد: یعنی با استفاده از یک دنباله فیبوناچی ساده برای مشخص کردن حجم انجام کار، و با تخمین خود برنامه‌نویس‌ها.سوال ۳: چه کسی مسئول مستندسازی پروژه (Project Documentation) است؟ چند وقت یک بار این متون را به روز می‌کند؟در اینجا، می‌خواستم مطمئن شوم که اگر به این جایگاه شغلی برسم، لازم نیست منتظر بنشینم که یک نفر دیگر برای راهنمایی من بیاید و با پروژه آشنایم کند. اگر مستندسازی به خوبی انجام شده باشد، من یا هرکس دیگری می‌توانیم به راحتی و بی‌دردسر همه چیزهای لازم را متوجه شده و خودمان را به بقیه تیم برسانیم.سوال ۴: آیا شما ابزارهای آماری بخصوصی برای Coverage تست‌ها دارید؟هدف من از پرسیدن این سوال این بود که ببینم چقدر به کیفیت کد اهمیت می‌دهند. این ابزارها میزان Coverage موجود برای Test Caseها را نشان دهد.سوال ۵: آیا شما در شرکت‌تان مرتباً جلسات بحث و گفتگوی تخصصی برگزار می‌کنید؟ من کنجکاو بودم که بدانم آیا آنها به پیشرفت شغلی دولوپرهایشان اهمیت می‌دهند؟ آیا رشد مهارت‌های مهندسانشان برایشان مهم است؟سوال ۶: ساعات کاری شما تا چه حد منعطف است؟ آیا می‌توانید بعضی روزها از خانه کار کنید؟این سوال چیزهای زیادی را در مورد محیط کار آشکار می‌کند و دقیقاً به شما نشان می‌دهد که این شرکت از کدام نوع شرکت‌هاست. من اول چند تا سوال تخصصی پرسیدم تا خودم را به مصاحبه‌گر اثبات کنم، و بعد سراغ این سوال آمدم. اول احترامشان را جلب کنید، بعد از این نوع سوال‌های شخصی بپرسید!سوال ۷: از چه چیز این شرکت بیشتر از همه خوشتان می‌آید؟ و چه چیز تیمتان را بیشتر از همه دوست دارید؟من می‌خواستم ببینم که آیا مصاحبه‌گرم از کارش در این شرکت راضی است یا نه. این را به راحتی می‌توانید از لحن و تن صدای مصاحبه‌گر بفهمید: او یا با خوشحالی حرف خواهد زد و یا با لحن خنثی. هیجانی که در جوابش دارد، به شما نشان می‌دهد که آیا این شرکت استحقاق شما را دارد یا خیر.نکته‌های پایانی در مصاحبهنکته مهم در مصاحبه این است که تصویر خوبی از خودتان در ذهن مصاحبه‌گر به یادگار بگذارید. باید کاری کنید که او هرگز شما را از یاد نبرد. این گفتگو، فرصتی است برای اینکه چیزهای جدیدی از مصاحبه‌گرتان یاد بگیرید. سوالات هوشمندانه‌ بپرسید؛ سوال‌هایی بکنید که تصویر مثبتی از شما ایجاد کنند و به آنها نشان دهند که شما ارزش افزوده‌ای برای تیمشان خواهید بود. تا زمانی که می‌توانید، به سوال پرسیدن ادامه دهید. امیدوارم تجربه من بتواند به دولوپرهای دیگر در مصاحبه‌هایشان کمک کند.برای دیدن فرصت‌های شغلی برنامه‌نویسی می‌توانید به وبسایت کوئرا مراجعه کنید.ترجمه و ویرایش بر اساس:How answer — and ask — questions intelligently in tech interviews by Salma Elshahawy @ freeCodeCampکوئرامگ مجله‌ای تخصصی برای توسعه‌دهندگان است که هر هفته با مطلب‌هایی در زمینه تکنولوژی، رشد فردی و آینده برنامه‌نویسی به‌روزرسانی می‌شود. برای اطلاع از آخرین مطلب‌های ما، می‌توانید توئیتر یا کانال تلگرام کوئرا را دنبال کنید.