من به تازگی هفت مصاحبه حضوری در شرکتهایی در Silicon Valley داشتم. ولی در نهایت من پیشنهادی از طرف facebook را برای کار به عنوان یک توسعه دهنده را پذیرفتم.
در این مقاله نحوه آمادگی برای این مصاحبه ها و آنچه در این زمینه آموختهام ذکر شده است.
سفر چند ساله من به سمت Silicon Valley
هنگامی که در دانشگاههای استرالیا مشغول تحصیل در رشته کامپیوتر بودم، همیشه آینده خودم را بهعنوان یک مهندس نرمافزار در Silicon Valley میدیدم.
این که من روزی در قلب تمام نوآوریهای صنعت فناوری -و همچنین اشتباهات آن- قرار بگیرم. انگیزه مرا بیشتر میکرد و کمک میکرد تمرکز بیشتری روی درسهایم داشته باشم.
من کار خود را به عنوان مهندس iOS در یک شرکت عالی و خوب در ملبورن ترک کردم و برای ادامه تحصیل به شهر خودم بازگشتم. در آنجا برای مصاحبهای در Silicon Valley آماده میشدم. میدانستم که فوقالعاده سخت و طاقتفرسا خواهد بود.
اگر راجب فرایند مصاحبههای فنی با مهندسان نرمافزار صحبت کنید، بسیاری از آنها روشهای معمول مصاحبه را رد خواهند کرد و معتقداند که حل الگوریتمها روی تخته وایتبرد یا صفحه کاغذ در واقع مهارت یک توسعه دهنده را نشان نمیدهد.
در این مقاله، من انواع مختلف شیوههای مصاحبه را از دید یک داوطلب بررسی میکنم، و همچنین آنچه را از روند مصاحبهها آموختهام، را بیان میکنم.
مصاحبه یک مهارت است
من در طول فرایند آمادهسازی و تمرین برای مصاحبه، همیشه میدانستم که مصاحبهها بسیار چالشبرانگیز است و فکر نمیکردم چقدر میتواند سخت باشد، تا زمانی که در اولین مصاحبهام شکست خوردم.
من برای آمادگی مصاحبهها، هم از خدمات پولی و هم از خدمات رایگانی که وجود داشت، استفاده کرده بودم. یعنی کدنویسی و مصاحبههای فنیتر را از طریق تلفن با افرادی که تجربه مصاحبه با داوطلبها را دارند، شبیه سازی میکند. این مصاحبهها برای آماده کردن من در برابر فشار استرسها ضروری بود. اما همانطور که بعدا فهمیدم، آنها فقط بخش کوچکی از مصاحبههای واقعی بودند.
من توصیه میکنم بدون مصاحبههای تمرینی و برای اولین بار برای شغل رویایی خود به مصاحبه نروید. عصبی بودن میتواند به طرز عجیبی نتیجه مصاحبه را عوض کند.
مانند بسیاری از موارد دیگر در زندگی، تمرین کردن، میتواند اعتماد به نفس شما را بیشتر کند.
انواع مصاحبههایی که با آنها روبرو شدهام
اگر به اندازه کافی تمرین کنید و آماده شوید و عملکرد خوبی هم داشته باشید، مصاحبه شما معمولاً چهار تا شش ساعت طول میکشد.
در طول سفر به Silicon Valley، در مجموع هفت مصاحبه موفق داشتم. این مصاحبهها دیدگاه منحصربهفردی از فضای کار و مصاحبه به من داد.
به طور معمول، یک مصاحبه حضوری شامل سه قسمت اصلی میشود: الگوریتمها، طراحی یک سیستم و رفتار و برخورد داوطلب است. که من درباره آنها اطلاعات زیادی در حین تمرینها و مصاحبهها بهدست آوردم. با این حال، برخی از شرکتها وجود دارند که از این روند استفاده میکنند و مصاحبههای خود را گسترش میدهند تا تمام مهارتهای داوطلب را پوشش دهند.
من به طور خلاصه، هر یک از موضوعاتی را که با آن روبهرو شدم در مصاحبهها را ذکر میکنم.
الگوریتمها
حل الگوریتمها رایجترین نوع مصاحبه است که با آن روبرو خواهید شد. مصاحبهکننده از شما میخواهد الگوریتم را روی تخته وایتبرد حل کنید که دانش شما را در مورد ساختار دادهها، الگوریتمهای پیچیده، تحلیل پیچیدگی زمان/فضا و همچنین تشخیص الگوها ارزیابی کند. در این مصاحبه، شما معمولاً با سوالهای بی رحمانه روبهرو میشوید، و سپس باید سعی کنید راهحل آن را کشف کنید و در صورت وجود اختلافات، باید درباره راهحلهای مختلفی که پیشنهاد میدهید، بحث کنید و نظر خود را بگویید.
این کار هر روز من بود که به مدت شش هفته، الگوریتمها را روی یک صفحه سفید حل میکردم، پیچیدگیهای مربوط به زمان/مکان آنها را تجزیه و تحلیل میکردم و همچنین واقعاً سعی میکردم بفهمم در هر خط کد چه اتفاقی میافتد.
من شخصاً از حل الگوریتمها روی یک صفحه یا یک تخته وایتبرد بسیار لذت میبرم. زیرا بیشتر اوقات نگران نحوه درست کد نویسیهایم روی تخته وایتبرد نیستم و به من این امکان را میدهد که فقط بر روی صورت مسئله موجود تمرکز کنم. ممکن است افراد دیگر از الگوریتمها بدشان بیاید، اما من میگویم که اگر آنها را به طور مداوم تمرین کنند، ممکن است نظرشان را تغییر کند.
طراحی قسمتهایی از یک پروژه
این قسمت مصاحبه بسیار جالب است و مصاحبهای است که من آن را بسیار دست کم گرفتم. مصاحبهکننده از شما میخواهد سیستمی (البته روی تخته وایتبرد) مانند سیستم بلیط پارکینگ، پیام رسان چت، توییتر و سایر سیستمهای رایج را طراحی کنید.
آنچه شما را مورد ارزیابی قرار میدهد، این است که شما چگونه یک مفهوم گسترده را به یک سیستم که تمام شرایط و محدودیتهای امروزه را ندارد تبدیل میکنید. داوطلب باید که سوالات صحیحی را در ذهن خود به وجود بیاورد و بتواند به آنها پاسخ دهد و بتواند شرایط و محدودیتها را از بین ببرد. همه چیز کاملاً سطح بالا است، و هیچ کدی نخواهید نوشت.
به طور طبیعی، شما باید مکالمهها را هدایت کنید تا دانش خود را در مورد نحوه کار سیستمها پوشش دهید. اگر برنامه نویس front-end باشید، به جزئیات دیگر برنامه اشاره نمیکنید، مگر اینکه در آن زمینه تخصص قبلی داشته باشید. من یک مهندس iOS هستم، بنابراین در مورد الگوهای طراحی کلی آن، API، افزودن کاربرها، AWS و موارد دیگر صحبت کردم.
مصاحبههای رفتاری
مصاحبهکننده از شما سوالاتی در مورد خود و نحوه برخورد شما را با انواع مشکلات را میپرسد. آمادهسازی خود برای این سوالات به سختی بقیه نیست، اما شما باید روی شخصیت و رفتار خود کار کنید.
سوالات معمولاً در امتداد این موارد است:
چگونه با شکست کنار میآیید؟
بزرگترین ضعف شما چیست؟
ناسازگاریها را چگونه حل میکنید؟
·چه کار متفاوتی میتوانید انجام دهید که شما را نسبت به بقیه متمایز میکند؟
من احساس میکنم پاسخ دادن به این سوالات بسیار دشوار است اما بسیاری از مردم سعی میکنند نقاط ضعف خود را به نقاط قوت مبدل کنند، و پاسخهایی که مصاحبهکننده دوست دارد بشنود، را بیان میکنند و حقیقت را مخفی میکنند یا ممکن است پروژههای ناموفق را به گردن افراد دیگر بیاندازند و بگویند:
ضعف من این است که من بیش از حد متمرکز هستم.
این همه تقصیر جری بود، او در بیشتر زمان پروژه مریض بود.
مصاحبهکنندگان آموزش دیدهاند تا افراد حیلهگر را شناسایی کرده و توجه زیادی به حرف این افراد نداشته باشند. این یک روش سریع برای حذف داوطلب است. فقط کافی است اصیل باشید، به کار خود اشتیاق نشان دهید، نقصهای خود را قبول داشته باشید، برای پیشرفت خود برنامه و ابتکار عمل را نشان دهید.بدون شک مصاحبه خوبی پیش رو خواهید داشت.
فرهنگ متناسب
این قسمت مصاحبه معمولاً با مصاحبه رفتاری ارتباط دارد و معطوف به این است که آیا شما با ارزشها و قوانین شرکت همسو هستید یا خیر. به عنوان مثال، facebook دنبال شخصیتهایی که جسارت و ایدههای جدید، آزمایش کردن هر ایده و نترسیدن از شکست را درون شخصیت خود دارند، است. در حالی که Airbnb میخواهد جهانی ایجاد کند که در هر جایی، مردم احساس کنند متعلق به آن هستند. بنابراین به دنبال افرادی با مهارتهای بیشتری میرود.
بسیاری از شرکتهای بزرگ فناوری تأکید زیادی بر فرهنگ دارند و افراد را بر اساس همسویی آن فرد با ارزشهای شرکت استخدام میکنند. اگر درشرکتی مصاحبه میکنید، بسیار مهم است که ارزشهای آنها را درک کنید و تجربیاتی به دست بیاورید و ببینید که میتوانید با آن شرکت ارتباط برقرار کنید یا خیر.
همکاری با چند برنامهنویس
یک قسمت بسیار جالب این است که با برنامهنویس دیگری در یک پروژه همکاری کنید دقیقاً مانند آنچه در دنیای واقعی است. به شما یک وظیفه اساسی داده میشود که لیستی از الزامات را باید تکمیل کنید، و با پایان هر کاری مصاحبهکننده از شما میخواهد تا در زمان محاسبه شده کارها را انجام دهید و شما میتوانید از منابعی که میخواهید استفاده کنید، مانند Stack Overflow یا اسناد آنلاین.
احساس میکنم موفقیت بسیاری از داوطلبها در این مصاحبه با قرار گرفتن در معرض دنیای واقعی کار و تجربیات تعیین میشود. برخلاف نوشتن الگوریتم کدها بر تخته وایتبرد، دانستن چگونگی نوشتن کدها از نظر قوانین نوشتاری الزامی است، بنابراین باید با زبان و محیط برنامهنویسی خود آشنایی داشته باشید زیرا نمیخواهید زمان زیادی را در اینترنت صرف جستجوی پاسخ سوالات برنامهنویسی خود کنید.
در طول کار قبلی خودم، وقتی روی یک پروژه کار میکردم کدهای تمیز و مرتبی مینوشتم و پس از آنکه احساس کردم کار به پایان رسیده است، به دنبال بهینهسازی آنها بودم. این کار برای این نوع مصاحبه مفید نبود. من موفق به بهینهسازی کدها نشدم. متوجه شدم که نوشتن کد اضافی و متفاوت عمل کردن و داشتن ایده، بهتر از کدهای تمیز و مرتب و بدون هیچ ایده جالبی است.
یافتن Bugها
یکی از کارهایی که ما به عنوان توسعه دهنده باید انجام دهیم، یافتن و اصلاح کردن Bugهایی است که از منابع مختلف به ما گزارش داده میشود. در این مصاحبه لیستی از کدهایی که دارای اشکال است به شما داده میشود تا شما آنها را بیابید و اصلاح کنید.
من فقط یک نمونه از این نوع مصاحبهها را دیدم و احساس میکنم آماده شدن برای این قسمت مصاحبه بسیار دشوار است، مخصوصاً اگر یک فرد، جوان و بدون تجربه باشد. هر محیط برنامهنویسی ویژگی و تفاوتهای ظریف و مختص به خود را دارد، من بسیاری از چیزهایی را که یاد گرفتم از تجربیات قبلی با IDE و چارچوبهای مربوط به آن بود، که در طول سالها این تجربهها را به دست آوردم.
دانش
اصول برنامهنویسی در اکثر زبانهای رایجی که امروزه میبینیم اساساً یکسان است. این زبانها را میتوان به زبانهای دیگر منتقل کرد و اشتراکاتی بین انها پیدا کرد.
با این حال، این مصاحبه بر جنبههایی تمرکز دارد که نمیتوان آن را مختص به یک زبان خاص کرد. در مورد محیط مربوط به API، مدیریت حافظه، قابلیتها، محدودیتها، تاریخچه و موارد دیگر با شما مصاحبه میشود.
تمرینهایی میتواند برای این موضوع مناسب باشد. مشابه مصاحبهایی که برای پیدا کردنbug ها بود، بسیاری از پاسخها از تجربیات قبلی ناشی میشود. بسته به سطح نقشی که برای آن داوطلب شدهاید، ممکن است پاسخهایی که ارائه میدهید متفاوت باشد. به عنوان مثال، اگر کسی که برای پستی با سطح اهمیت کمتر نسبت به بقیه کارها دواطلب میشود، ممکن است از ساختار یک API اطلاع نداشته باشد، با این حال، اگر دواطلبی که برای یک پست مهمتر دواطلب میشود، از ساختارآن اطلاعی نداشته باشد، ممکن است امتیاز منفی بگیرد.
درک سیستم عاملها
بسته به شغل یا تیمی که میخواهید با آنها مصاحبه کنید، ممکن است مصاحبهایی داشته باشید که فقط بر روی سیستم عاملها تمرکز داشته باشد. در این مصاحبه از شما سوالات آسانتری پرسیده میشود که درک شما را از سیستم مکانیکی رایانهها را ارزیابی میکند.
این مصاحبه من را غافلگیر کرد. سیستم عامل چیزی بود که من در طی سالهای اولیه تحصیل در دانشگاه آموخته بودم، اما بعد از آن من این موضوع را کاملا فراموش کرده بودم. این موضوع در عملکرد من تاثیر گذاشت.
چگونه باید آماده شوید
همانطور که پیشتر نوشتم، مصاحبه کردن یک نوع مهارت است. حتی اگر قبلاً در کارهای خود یک برنامهنویس عالی بودید یا در درسهای دانشگاه خود نمرات عالی میگیرید، وقتی در یک اتاق مصاحبه کوچک هستید، این مهارتها دقیقاً به درد شما نمیخورد. سخت کوش بودن، تکرار و سازگاری و آمادگی و تمرین برای مصاحبه از عوامل تعیینکننده اصلی نتیجه شما خواهد بود.
حداقل دانش
اگر کسی از من بپرسد که روی چه موضوعاتی بیشتر وقت بگذارد، من موارد زیر را پیشنهاد میکنم:
بیاموزید که ابتدا الگوریتم کد را با دست روی کاغذ یا تخته وایتبرد بنویسید و سپس شروع به نوشتن کدهای اصلی کنید.
ایجاد دانش عمیق در مورد ساختار دادهها، نقاط قوت و ضعف آنها و مقایسه با یکدیگر میتواند در یادگیری موثر باشد. من کشف کردم که کد نویسی و کار کردن با کدها خیلی بیشتر از آنچه به صورت تشریحی یاد گرفتهام به من آموخته است.
نماد O را به لحاظ پیچیدگیهای زمان و مکان استفادهی آن، کاملاً بفهمید، آنرا کاملا با الگوریتم و سوالاتی که از شما میپرسند هماهنگ کنید و تطبیق دهید.
همه الگوریتمهای اصلی را درک کنید. زیرا تفاوتهایی که در زمان یا مکان استفاده الگوریتمها دارند، ممکن است راهحل بهینه شما را برای الگوریتمی که میخواهید حل کنید از بین ببرد.
چه موقع شروع کنیم
با توجه به برنامه زمانی خود، ممکن است بخواهید زمان بیشتر یا کمتری را برای آمادگی مصاحبه بگذارید بسیاری از شرکتهایی که با آنها مصاحبه کردم، 12 ماه دوره کار آزمایشی دارند و اگر آن داوطلب موفق نشود، آن فرد حذف میشود. اگر میدانید که ظرف یک سال آماده نخواهید شد، همین حالا روند تمرین کردن را شروع کنید و ببینید که چگونه مراحل مصاحبه را پشت سر میگذارید، بنابراین وقتی آماده مصاحبه شدید، برنده خواهد شد. مصاحبه ترسناک نیست.
نگران نباشید.
شما تمام ویژگیهای لازم برای قبول شدن در مصاحبه را دارید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید