برنامه‌نویس‌ها بخوانند: چگونه استخدام شویم؟!

وقتی می‌خواستم به عنوان این مقاله فکر کنم داشتم بین «چگونه رزومه بنویسیم؟» و «چگونه توانایی‌هامون رو در رزومه نمایش بدیم؟» و امثال اینا فکر می‌کردم ولی دیدم نزدیک‌ترین عنوان به حرفی که می‌خوام بزنم اینه که چگونه استخدام شویم!حدود سه سال هستش که دائما درگیر فرآیند مصاحبه افراد در بله هستم و با رزومه‌های مختلفی روبرو شدم. از رزومه‌هایی که می‌گن «آماده پذیرش مدیریت تیم‌تون هستیم» و تا افرادی که یک صفحه خالی ورد رو باز کردن و چند خط توضیح نوشتن و همون رو پی‌دی‌اف کردن و فرستادن!توی این متن حاصل این بررسی سه ساله و اطلاعاتی که از فرآیند و معیار‌های شرکت‌های مختلف جمع‌ کردم رو می‌خوام بگم. اینم بگم که این نکات هیچ ترتیب خاصی ندارن و رعایت کردنشون اولویتی بر هم ندارن و باید تلاش کنید که همشون رو انجام بدید! خب بریم سراغ اصل مطلب!- خلاصه نویسی!هر چقدر که شرکتی که براش رزومه می‌نویسید بزرگ‌تر باشه و برند شناخته شده‌تری داشته باشه احتمالا تعداد رزومه‌هایی که داره براش ارسال می‌شه بیشتره و بنابراین آدم‌ها توجه و حوصله کمتری در فیلتر کردن رزومه‌ها که اولین مرحله استخدامی هست دارن و بنابراین شما باید در رزومه‌تون خلاصه‌نویسی کنید و رزومه‌تون از یک صفحه بیشتر نشه.به این فکر کنید که اگر خودتون رو در حداکثر ۳ کلمه بخواید توصیف کنید چی می‌گید؟ مثلا من احتمالا می‌گم برنامه نویس بک‌اند! روی اون بخش تمرکز کنید و توانایی‌ها و تجربیاتتون رو بیان کنید. هر کلمه‌ای که در رزومه می‌نویسید باید یک دلیلی داشته باشید و اون دلیل نباید این باشه که شما ی چیزی رو می‌خواید به اون فردی که رزومه شما رو می‌بینه بگید بلکه باید اون دلیل این باشه که اون فرد داره توی رزومه شما دنبال اون بخش می‌گرده. بنابراین حقوقی که در شرکت قبلی می‌گرفتید احتمالا دلیلی نداره در رزومه‌تون باشه یا اینکه توانایی کار با اکسل و ورد رو دارید! اگر رزومتون خالی‌تر باشه اشکالی نداره ولی هدف اصلی که اون ۳ کلمه‌ هست رو برسونه. در مورد این بخش به پوزیشنی که دارید براش اپلای می‌کنید هم دقت کنید. اگر دارید برای بک‌اند دولوپر اپلای می‌کنید احتمالا انتخاب ۳ کلمه‌تون نباید عکاس طبیعت باشه!- از تجربه‌هاتون حرف بزنیدشرکتی که دنبال جذب نیروی کارآموز نباشه به تجربه‌های شما توجه جدی‌ای می‌کنه. اما در مورد این بخش خیلی‌ها ممکنه بگن که خب ما هیچ‌ جایی کار نکردیم که تجربه‌ای داشته باشیم! اگر تجربه‌ای ندارید برید در بوت‌کمپ‌ها شرکت کنید و تلاش کنید حتی به رایگان در یک شرکت کارآموزی برید و این فرصت‌هارو خیلی جدی بگیرید. کار کردن در یک شرکت و یک پروژه واقعی در اسکیل بزرگ با خوندن کتاب و مقاله و درسای دانشگاه خیلی فرق داره و توانایی‌هایی رو می‌طلبه که فقط با کار کردن در شرکت‌های بزرگ یاد می‌گیرید. برای بدست آوردن این فرصت‌ها تلاش کنید و خیلی جدی‌شون بگیرید.اگر فرد با تجربه‌ای هستید حتما از تجربیاتتون صحبت کنید. البته با تمرکز روی چیز‌هایی که برای اون فردی که داره رزومه‌هارو فیلتر می‌کنه اهمیت داره. برای مثال: - به جای اینکه بگید من در شرکت X به مدت ۲ سال کار کردم بگید که در این شرکت مسئولیت توسعه میکروسرویس Y رو با تکنولوژی Z داشتم. - در این پروژه پرفورمنس سیستم رو ۶۰٪‌ افزایش دادیم. - در پروژه Y که ۵ میلیون کاربر داره کار می‌کردماسم بردن از تکنولوژی‌ها و صحبت کردن از اتفاقاتی که شما در اون نقش داشتید خیلی کمک می‌کنه که فردی که رزومه شما رو می‌بینه بهتر با توانایی‌ها و تجارب شما آشنا بشه. و البته موضوع خلاصه نویسی رو رعایت کنید! یعنی برای یک تجربه‌کاری بیشتر از دو تا جمله کلیدی ننویسید (اگر در چندین کار مهم در یک شرکت نقش داشتید پررنگ‌ترین‌ها و پر چالش‌ترین‌هاشون رو بنویسید)- دانش عمیق فیلدکاری و یادگیری تکنولوژی‌های حوزه کاری‌تونبعد از فیلتر رزومه نوبت مصاحبه تخصصی می‌شه که می‌تونه یک یا چند مرحله باشه. برای این مرحله خیلی مهمه که در فیلد کاری خودتون دانش عمیقی داشته باشید و چیزایی که در رزومه‌تون نوشتید رو کاملا بلد باشید. برای مثال اگر نوشتید که به صورت حرفه‌ای جاوا رو بلدید برید Advanced Java Interview Questions سرچ کنید و ببینید که واقعا به همه سوالات می‌تونید پاسخ بدید ؟اگر در حوزه بک‌اند برای پوزیشن سینیور می‌خواید رزومه بفرستید با تکنولوژی‌های مختلف مثل دیتابیس‌های SQL و NoSQL و تفاوت‌هاشون و نحوه عملکردشون و Message Broker هایی مثل کافکا و RabbitMQ و پترن‌هایی مثل Circuit Breaker و Saga و Event Sourcing و CQRS آشنا بشید. اینکه درک و دانش عمیقی از این‌ها داشته باشید خیلی در حل مسائل بهتون کمک می‌کنه. تست نویسی رو فراموش نکنید و حتما با روش‌های مختلف تست و یک فریمورک معروف مربوط به زبان برنامه‌نویسی خودتون آشنا باشید. مدل توسعه TDD رو تمرین کنید و تلاش کنید در کد‌هاتون ازش پیروی کنید. با داکر و کوبر آشنا بشید و ابزار‌های CICD مثل gitlab-ci رو بشناسید. این‌ها مواردی هست که از یک برنامه نویس سینیور انتظار می‌ره و اگر برنامه‌نویس تازه‌کار هستید اینکه به یادگیری خودتون توجه کنید و وقت براش بذارید معیار خیلی مهمی می‌شه. دانش عمیق برنامه‌نویسی هم برای برنامه‌نویس تازه‌کار و هم برای برنامه‌نویس سینیور یک الزام هست و خیلی مهمه که بهش توجه کنید. صرف اینکه می‌تونین کد بزنین احتمالا برای یک شرکت کافی نیست و اینکه دانش خیلی خوبی داشته باشید و بتونید مسئله حل کنید خیلی اهمیت ویژه‌ای داره.- وقت خرج استخدام شدن‌تون بکنیدخیلی از رزومه‌هارو می‌بینم که یا هیچ قالبی استفاده نکردن و فقط یک فایل ورد باز کردن و توضیح دادن توش و یا اینکه با فونت ۸ توی یک جدول توضیح دادن که توی شرکت قبلی چقدر حقوق می‌گرفتن و چرا جدا شدن از اون شرکت. برای نوشتن رزومه دنبال قالبی ساده اما قشنگ بگردید و با حوصله همه مواردی که مد نظرتون هست رو در اون بنویسید. اگر به زبان انگلیسی مسلط هستید می‌تونید رزومه‌تون رو انگلیسی بنویسید و اگر زبان انگلیسی رو بلد نیستید حتما رزومه‌تون رو فارسی بنویسید! چون فقط نشون می‌دید که انگلیسی بلد نیستید! اینکه رزومه مرتبی نداشته باشید این پیام رو می‌رسونه که حاضر نیستید برای استخدام شدن خودتون وقت بذارید چه برسه به اینکه در شرکت کار کنید!در مورد skillهای مختلفی که توی رزومه‌تون گفتید دوباره سرچ کنید و مطالعه کنید و مطمئن شید که با termهای مختلفش هم آشنایی دارید. برای تمرین حل مسئله وقت بذارید و ی سری تسک‌هایی که توی سایت‌های مختلف برای حل مسائل برنامه‌نویسی هست رو انجام بدید و سعی کنید دوباره با تکنولوژی‌هایی که اسم بردید کار کنید که مطمئن شید مسیر مصاحبه تخصصی رو درست طی کنید.- راحت بگید «نمی‌دونم!»توی مصاحبه‌ها خیلی‌هارو دیدم که ازشون ی سری سوال می‌کنم و چون نمی‌دونن تلاش می‌کنن با حدس زدن ی جوابی فقط داده باشن! ی دوستی دارم که ی بار رفته بود مصاحبه بهش گفته بودن اگر بخوای تلگرام برامون پیاده کنی چیکار می‌کنی؟ گفته بود تلگرام ی اپلیکیشن اینترنتیه و از شبکه استفاده می‌کنه و باید شبکش رو پیاده کنیم. شبکه هم ۷ لایه داره و اگر از لایه اول به قضیه نگاه کنیم ... من معمولا در مصاحبه‌ها اینقدر پیش می‌رم تا یک نمی‌دونم از طرف مقابل بگیرم و ببینم که بلده بگه نمی‌دونم یا نه! ی موقع‌هایی هم اونطرفی می‌شه قضیه و هرچیزی می‌پرسم می‌گه نمی‌دونم! این آدمه هم تلاش کنید نباشید :)- کد بخونید و تمرین کنیدیکی از تفاوت‌های اصلی یک برنامه‌نویس خوب با یک برنامه نویس معمولی در اینه که بتونه علاوه بر حل مسئله کد تمیز و ساده‌ای بنویسه. این ویژگی چیزی نیست که بدون کمک دیگران به این راحتی رشد کنه و تجربه می‌خواد. در واقع در حالت طبیعی اینطوری آدم تمیز و ساده کد زدن رو یاد میگیره که یک مساله رو روز اول کاریش حل می‌کنه، اگه شانس بیاره و یک سال بعد همون شرکت باشه و روی همون سیستم کار کنه، بارها باید برگرده و همون کد رو بهبود بده، فیچرهای جدید بهش اضافه کنه، باگ برطرف کنه و اینها! و این مرور زمان کمک می‌کنه ببینه که اگه روز اول تمیز و ساده کد زده بود، الان که یک سال بعده کمتر اذیت می‌شد! تنها راه میانبری که برای این داستان هست code review عه! هم اینکه کد شما رو بقیه بخونن، هم شما کد بقیه رو بخونید!اگه توی تیم منسجمی نیستید و از نعمت code review محرومید، احتمالا تنها راه‌هایی که براتون می‌مونه اینه که بگردید code baseهای تمیز و مشهوری که توی حیطه‌تون هست رو پیدا کنید و بخونید و تلاش کنید درک کنید که چرا هر قسمت از چه تکنیکی استفاده کردن! مثلا ما که جوون بودیم می‌گفتن اگه میخوای C یاد بگیری Nginx رو بخون، خیلی کد اش تمیز و اصولیه!البته در کنار این فراموش نکنیم که حل مسئله هم یکی از پیش‌نیاز‌های برنامه نویس خوب بودنه. تمرین های تیپ الگوریتم ورزش ذهنی خوبیه و کمک می کنه که خیلی از آزمون های مختلفی رو که شرکت ها میگیرن برای فرد راحت بشه. در این مورد فقط تمرین کردن می‌تونه بهتون کمک کنه که ذهنیت حل مسائل الگوریتمی رو بگیرید. البته دقت کنید همونطور که در بالا گفتم شرکت‌ها به پیچیدگی راه‌حل و کد استایلتون هم خیلی توجه می‌کنن پس تمرین کنید که با کد استایل تمیز و مرتب کد بزنید (کتاب Clean Code و Clean Architecture رو حتما برای این قسمت بخونید و حتما Design Pattern ها و SOLID و معماری‌های نرم‌افزاری مثل MVC رو کامل بلد باشید)‌ و تلاش کنید ساده‌ترین راه حل ممکن رو پیدا و پیاده کنید. چون معمولا تایم این تسک‌ها در حد ۲ - ۳ ساعت هست احتمالا راه حل خیلی ساده‌ای دارن و خیلی لازم نیست پیچیده کنید همه چیز رو. از آزمون‌های ACM و سایت‌هایی که تسک می‌دن کمک بگیرید که تمرین کنید برای یادگیری حل مسئله! تمرین کردن تنها راه افزایش توانایی حل مسئله‌ست.- صادق باشید!هیچوقت در توانایی‌هاتون اغراق یا فرونتی نکنید! اگه دارید شرکت خوبی میرید، پیش‌فرضتون این باشه که کسی که مصاحبه‌تون می‌کنه آدم حسابیه، پس هر چی هم توی رزومه اغراق کرده باشید،‌ توی صحبت متوجه میشه و اتفاقا به ضررتون تموم میشه. اگر هم شرکت خوبی نباشه و فکر بکنید که اغراق در رزومه رو متوجه نمی‌شن، بهتره که اغراق نکنید که استخدامتون نکنند! :)یه اشتباهی هم هست که بین هم بچه‌هایی که برای شرکت‌های خارجی رزومه می‌فرستن رایجه. اینکه فکر می‌کنن طرف مقابل‌شون آدم فضاییه یا شاید یه در مخفی یا تریکی باشه که اگه تو رزومه بیاد خفن‌اش می‌کنه.مثلا فکر می‌کنن اگه چند تا repo توی گیت‌هاب داشته باشن خیلی اتفاق خاصی می‌افته. کلا باید یاد بگیرید که اینطوری فکر کنید که خودتون رو بذارید جای شرکتی که میخواد استخدامتون کنه. به چه درد اش می‌خوره که طرف ریپو داره (غیر از اینکه کدش رو بررسی کنه پیشاپیش و نسبت به توانایی‌هات پیش‌داوری کنه؟) یا به چه درد شرکت می‌خوره که اون فرد به جز برنامه نویسی بک اند، هشت تا مدرک مختلف برای کار کردن با MS Office داره؟حرف آخراستخدام شدن در یک شرکت عالی شاید سخت باشه و لازم باشه که خیلی تلاش بکنید براش ولی به نظرم اگر به شرکت کمتر از عالی رضایت بدید به آینده خودتون ضربه زدید و هرچقدر که برای پیشرفت خودتون سرمایه‌گذاری کنید در نهایت سودش به خودتون می‌رسه.در پایان می‌خوام از دوستان عزیزم، حسین آیت و سید محمد مهدی احمدپناه بابت راهنمایی‌هایی که به من در نوشتن این مقاله کردن تشکر کنم :)موفق باشید.