هدف من از این نوشته آشنا کردن برنامه نویسان ایرانی و مصاحبه کنندگان در شرکت های ایرانی با روند مصاحبه و استخدام برنامه نویس و مهندس نرم افزار در شرکت های بزرگ دنیاست. این مطلب و ادامه آن در وب سایت https://dorostcode.com نیز منتشر می شود. در پست های آینده نمونه ای از مسایل مطرح شده در مصاحبه های برنامه نویسی و نحوه پاسخگویی به آنها را مرور خواهیم کرد.
در ایران روش سازمان یافته ای برای مصاحبه های برنامه نویسی وجود ندارد. شرکت ها تاکید اضافی روی بلد بودن فریم ورک ها و تکنولوژی هایی دارند که امروز بوجود می آیند و خیلی سریع با یکی بهتر جایگزین می شوند. در این دنیای وانفسا، برنامه نویسان هم نمی دانند که چه چیزی را برای مصاحبه یاد بگیرند و چگونه برای مصاحبه های برنامه نویسی آماده شوند. روش انجام مصاحبه ها موجب شده است که شرکت های توسعه نرم افزاری نتوانند برنامه نویسان را درست محک بزنند و نهایتا معمولا آنهایی انتخاب می شوند که در رزومه خود کار با ابزارهای جدید را ولو بسیار محدود گنجانده باشند. در عمل این پدیده منجر به استخدام برنامه نویسانی خواهد شد که معمولا مهارت های کلیدی یک برنامه نویس خوب را ندارند و وبال گردن شرکت خواهند شد. در شرکت های بزرگ دنیا و همچنین در دنیای استارت آپ هایی که نرم افزار تولید می کنند، مهارت حل مسایل برنامه نویسی یک مهارت کلیدی است و معیار اصلی برای استخدام برنامه نویس است.
روش جاری استخدام برنامه نویس در ایران خطر انتخاب اشتباه برنامه نویسان را افزایش می دهد. بخصوص، شخصیت ویژه برنامه نویسان احتمال انتخاب اشتباه را افزایش می دهد. به عنوان مثال، در حالیکه در بسیاری مشاغل درونگرا بودن یک فاکتور شخصیتی منفی تلقی می شود، تیپ شخصیتی تعداد قابل توجهی از برنامه نویسان قدر می باشد. یک مصاحبه کننده ناوارد که روش درستی برای مصاحبه در پیش نمی گیرد ممکن است یک مصاحبه شونده کم مهارت اما پرحرف در زمان مصاحبه را به یک دورنگرا با مهارت بسیار بیشتر ترجیح دهد. معیار اصلی ارزیابی یک برنامه نویس قدرت حل مساله می باشد.
اهداف اصلی یک مصاحبه کننده در یک مصاحبه برنامه نویسی آن است که ما (متقاضی استخدام برای شغل برنامه نویسی) را از دیدگاه توانایی درک و حل مساله، پیاده سازی، و ارتباط با تیم برنامه نویسان بسنجد. بطور خاص ما باید نشان دهیم که:
بسیاری از برنامه نویسان جویای کار تصویر دقیقی از یک مصاحبه برنامه نویسی در شرکت های خوب دنیا ندارند. برخی به اشتباه تصور می کنند که در این مصاحبه ها تست هوش برگزار می شود. این واقعیت ندارد. هدف این بخش آن است که تصویر دقیقی از یک مصاحبه برنامه نویسی به سبک شرکت های بزرگ دنیا بدهد.
یک برنامه نویس خوب مهمترین دارایی یک شرکت نرم افزاری است و شرکت ها برای استخدام استعدادهای برتر با یکدیگر در رقابتند. همانطور که شما یک متقاضی استخدام را ارزیابی می کنید، او نیز شما را ارزیابی می کند. بنابر این بسیار مهم است که نماینده خوبی برای شرکت باشید. حتی اگر مصاحبه شونده توانایی علمی مناسب ندارد با احترام رفتار کنید. این امر نهایتا منجر به اوازه خوش کمپانی شما از نظر فضای کاری می شود.
دوستانه و دستیافتنی (approchable) باشید و سوالاتی که یک متقاضی استخدام دارد را با حوصله پاسخ دهید.
شفاف، صادق، و عادل باشید. در مورد حقوق، امکانات رفاهی برای کارکنان، بزرگ یا کوچک بودن تعداد کارکنان و پروژه ها، نحوه کار کردن، حجم و ساعات کار و غیره صادق باشید. توجه کنید که دیر یا زود عضو جدید شرکت شما به حقایق پی خواهد برد. در طولانی مدت، بی صداقتی مهلک ترین ضربه ها را به شما وارد خواهد کرد.
در انتخاب سوال مصاحبه دقت کنید. به عنوان مثال سوال <<الگوریتم دایجکسترا را پیاده کن>> خوب نیست. به این دلیل که (۱) معمولا برای الگوریتم های معروف پیاده سازی های استاندارد وجود داره و (۲) اگر هم مصاحبه شونده بتونه جواب بده نشان دهنده حافظه خوب هست نه توانایی حل مساله. بنابر این باید از بانک سوالات درست یک سوال انتخاب بشه. با جستجو در سایتهایی مانند leetcode.com می توانید سوالات خوبی را برای مصاحبه انتخاب کنید.
مصاحبه شونده را غافلگیر نکنید. مهم این هست که مصاحبه شونده بداند که شما چگونه مصاحبه می کنید. بنابر این، هنگام دعوت برای مصاحبه، نحوه انجام مصاحبه را برای وی توضیح دهد. توضیحات می تواند شامل طول مدت مصاحبه، نوع سوالی که قرار است از وی بپرسید، نحوه پاسخگویی (مثلا پای تخته یا با کامپیوتر)، طول مصاحبه و زمان بندی ( مثلاحدود ۴۰ دقیقه برای حل مساله و نوشتن کد وقت) و معرفی منبعی که بتوانند سوالات مشابه را ببینند یا تمرین کنند. شفافیت شما با مصاحبه شونده فرهنگ کاری شما را نشون می دهد و یاد می دهد که آنها نیز با شما شفاف باشند.
در پست بعدی نحوه پاسخگویی در مصاحبه های برنامه نویسی را همراه یک نمونه بصورت مفصل شرح می دهد.