در این مطلب سعی میکنم نکات کلیای که برای یک توسعهدهنده تازهکار به نظرم مهمه که بلد باشه و در مصاحبهها هم رعایت کنه رو، ذکر میکنم.
یک- شما تازهکار هستید، پس لازم نیست که همه چیز رو بلد باشید، مصاحبهکننده هم انتظار نداره همه چیز رو بلد باشید
دو- از شما انتظار میره مفاهیم پایهای رو بدونید و تجربه کرده باشید، مثلا اینکه اصلا HTTP چیه، فرق tcp و udp چیه، این REST API که همه میگن چطوری کار میکنه و چه قابلیتهایی داره و از این دست مطالب
سه- اصلا سعی نکنید کلماتی رو استفاده کنید که اصلا تجربه کار باهاش رو ندارید و عمیقا درکش نکردید، مثلا فکر نکنید اگه اون وسط کلمه grpc بپرونید یا از CQRS دم بزنید مصاحبهکننده میگه چقدر باحال، خیر، برعکس، نمره منفی محسوب میشه اگه ندونی واقعا چیه و کجا کاربرد داره و تجربهش هم نکرده باشی
چهار- به عنوان توسعهدهنده بکند، دانش اولیه شبکه و دانش اولیه دیتابیس ضروریه، اینکه چه مواردی رو شامل میشه تو اینترنت مطلب زیاد هست در موردش، ولی باز باید سعی کنی که مفاهیم پایهای تر رو عمیقتر درک کنی و بعد بری سراغ مطالب سطح بالاتر
پنج- اگه چالش طراحی سیستم براتون مطرح شد واقعا با دانش فعلیتون و چیزی که فکر میکنید درسته طراحی کنید، سعی نکنید ذهن مصاحبهکننده رو بخونید که بخواید جوابی بدید که مثلا مصاحبهکننده منتظرشه، مثلا: آره باید high available باشیم پس grpc میزنیم….!!!
شش- مصاحبهکننده معمولا در خیلی از مواقع برای طراحی سیستم، اصلا جواب خاصی تو ذهنش نیست، اون فقط منتظره که شما یه طراحی خاصی رو پیشنهاد بدید و از همون طراحی خودتون شروع کنه سوالات بعدی رو پرسیدن، در واقع از قبل سوالات رو ممکنه آماده نکرده باشه و حین مصاحبه بخواد از دل جوابهای خودتون سوال جدید طرح کنه، پس خیلی در به کار بردن کلمات دقت کنید، اگه یه معماری خاصی رو اصلا بلد نیستید سعی نکنید ازش اسم ببرید که مثلا بگید من خفنم!!!، چون مصاحبهکننده دنبال این نیست که شما خفن باشید، دنبال اینه شما متواضع باشید و اگه چیزی رو بلد نیستید بگید بلد نیستم ولی میرم یادش میگیرم و تمام…
هفت - در مورد ابزارها و زبانهای برنامهنویسی، واقعا فقط اونایی رو که کار کردید و مسلط هستید نام ببرید، مثلا شاید واقعا مهم نباشه که شما گولنگ بلد هستید یا نه، بلکه اگه میگید من php بلدم، واقعا php بلد باشید، اصول مهندسی نرمافزار در خیلی از موارد برای زبانهای مختلف یکسانه و قابل استفاده
هشت- تو فضای کاملا غیرقطعی مهندسی نرمافزار، جواب صفر و یکی نداریم، جواب صحیح و غلط نداریم، همه چیز trade-off داره، هر راه حلی یه سری مزایا داره و یه سری معایب. اصلا از شما انتظار نمیره که همه راه حل های خوب رو بلد باشید، از شما تنها انتظار میره راه حلی رو که ارائه میدید، بدی و خوبی ش رو بدونید، مثلا اگه میگید یه سیستم باید message driven طراحی بشه، بدونید که عموما سیستم مبتنی بر پیام اگه خوب طراحی شده باشه میتونه سرویس رو reliableتر کنه، ولی از اون سمت دیگه سرویس real time نمیتونه باشه یا خیلی سخت میتونه real time بشه (اینا فقط یکی از مزایا و معایب هست، کلی نکته دیگه هست که میتونید بگید)
نه- مصاحبه با یه شرکت خاص رو مرگ و زندگی نبینید، انتخاب شدن شما به هزاران فاکتور متفاوت بستگی داره که خیلی هاشم غیر فنی هستند.
ده- استرس نداشته باشید و به خدا توکل کنید، اینو بدونید ان شاءالله اگه تلاش کنید موقعیت های درخشانی در انتظارتونه، خیلی از توسعه دهندگان خوب بیشتر از اینکه مصاحبه موفق داشته باشند مصاحبه شکست خورده داشتند، مصاحبه خودش کلاس درس و تجربه است، فقط سعی کنید از مسیری که هستید لذت ببرید، اگه این موقعیت شغلی قسمت شما نشد، بدونید جلوتر هزاران موقعیت بهتر در انتظارتونه، فقط به خدا توکل کنید و تلاش تون رو ادامه بدید
پینوشت: این نکات تجربه شخصی بنده است و لزومی نداره درست باشه، ممکنه خیلیهاشم اشتباه باشند. هر مصاحبهکنندهای شیوه خودش رو داره و یه قانون رو نمیشه به همه مصاحبهها و مصاحبهکنندهها تعمیم داد، سعی کنید کورکورانه تقلید نکنید، صرفا سعی کنید نکاتی که گفتم رو تحلیل کنید و اگه از نظر شما هم نکات درست بودند اونارو استفاده کنید.