چطوری Senior Developer بشیم؟

اگه شما هم یه برنامه نویس هستید احتمالا پیش اومده که به کسانی برخورد کرده باشید که خودشون رو سنیور معرفی میکنن ولی در عمل خیلی جاهای کارشون میلنگه. این احساس ممکنه اثر دانینگ کروگر باشه و یا یه توهم. در هر حال به نظرم باید تعریف درستی از "سطوح مختلف تجربه" داشته باشیم که بهتر بتونیم خودمون یا افرادی که باهاشون برخورد داریم رو ارزیابی کنیم و اگه لازمه هدفمند تر توی مسیر شغلیمون حرکت کنیم.Keep calmبرای اینکه متوجه بشیم چی باعث میشه یه نفر Senior باشه اول باید ببینیم Junior و Mid-level و Intern و ... یعنی چی و ببینیم الان خودمون کجای کاریم.در ادامه به ترتیب با این سطوح مختلف آشنا میشیم و بعد من سعی میکنم یکسری راهکار برای توسعه فردی خودمون بگم که بخشیش از مطالعه و بخشیش هم با تجربه به دست آوردم.کارآموز یا Internخب از اسمش مشخصه، کسی که احتمالا بعد از دانشگاه میخواد وارد بازار کار بشه یا از روی علاقه شخصیش میخواد کار کنه و کار یاد بگیره و تجربه حرفه ای و زیادی نداره. کارآموز خوب، به نظرم کسیه که دائم داره سعی میکنه چیز یاد بگیره و خودشو محدود به چیزی که بهش گفتن انجام بده نمیکنه. به نظرم کنجکاوی و مهارت یادگیری دائمی از مهم ترین ویژگی های یه کارآموز یا برنامه نویس جونیوره.برنامه نویس Juniorمعمولا بین ۶ ماه تا یک سال و نیم الی ۲ سال تجربه کار دارن. این زمانی که گفتم لزوما درست هم نیست ها، یعنی ممکنه یه نفر ۴ سال هم کار کنه بازم جونیور باشه یکی هم ۶ ماه کار کنه سطحش خیلی بیاد بالاتر.احتمالا از هر مبحثی در حد مقدماتی میدونن و عمیق نیستن. با مشکل پیدا کردن کار مواجه هستن. سافت اسکیل هاشون غالباً چنگی به دل نمیزنه، مخصوصا تو قبول کردن اشکال کارشون. البته من منظورم همه این عزیزان نیست ولی طبق تجربیات من اکثرا این مسائل رو دیدم که باهاش درگیر بودن. یه تفاوت دیگه که با بقیه گروه ها دارن اینه که در مورد انتخاب تکنولوژی ها استفاده کردن ازشون خیلی هیجانی تصمیم میگیرن و دورنمای پروژه رو دیدن براشون سخت تره. توی برآورد زمانی تسک ها معمولا دقیق نیستن که البته این به خاطر تجربه کمشون هست. برای معماری سیستم های بزرگ مناسب نیستن که مشخصا به خاطر تجربه کمی که دارن هست.زیاد دیدم که خیلی متکی به دوره های آموزشی یا معلم هستن.برنامه نویس های Mid-levelبرنامه نویس های میدلول اکثرا همون هایی هستند که خودشونو با سنیور ها اشتباه میگیرن! توی زمانبندی و برنامه ریزی اوضاعشون خیلی بهتر از جونیور هاست و میشه روشون حساب کرد. همچنان توی طراحی و معماری سیستم های بزرگ نمیشه بهشون تکیه کرد. خیلی ممکنه درگیر مسأله اعتماد به نفس کاذب بشن که این بهشون خیلی هم ضربه میزنه. برخلاف گروه های قبل میتونیم بگیم یه جورایی دیگه تکلیفشون با خودشون روشنه و میدونن چه مسیری میخوان برن و روی چی عمیق بشن. معمولا بین ۲ تا ۳ سال سابقه کار دارن.خب حالا که تقریبا با این سطوح آشنا شدیم، احتمال میدم که براتون باید پیدا باشه که یک برنامه نویس Senior چه خصوصیاتی داره.تجربه، حرف اول رو در میزان Senior بودن هر شخص میزنه، یه جورایی سنیور ها ستون ها و قهرمان های هر کسب و کار هستند. بعد از به دست آودن تجربه های زیاد خودشون هم میدونن که هیچی نمیدونن و تازه اول راهن برای همین معمولا متواضع هستن و سعی میکنن به بقیه تا جای ممکن کمک کنن. معمولا حداقل ۴-۵ سال سابقه کار حرفه ای دارن. بهترین مربی ها و منتور ها برای افراد جونیور و میدلول حساب میشن. میشه از این آدما خیلی چیز یاد گرفت. چه مهارت های برنامه نویسی، چه نوع برخورد با مسائل و تحلیلشون. نحوه خرد کردن پروژه و تقسیم کار و کنار اومدن با چالش ها و ...حالا ببینیم برای اینکه تبدیل به یک برنامه نویس سنیور بشیم چه مسیری باید طی کنیم.زماناولین نکته ای که خیلی مهمه زمان هست! اصلا نباید انتظار داشته باشید که مسیری که خیلی ها شاید توی ۵-۶ سال رفتن رو شما توی ۶ ماه طی کنید. پس زمان بدید. احتمالا توی کار به مشکلات زیاد بر میخوریدانتخاب کار خوبتوی انتخاب محل کارتون، الویت رو خود کار قرار بدید، ببینید اگر وارد اون کار بشید چقدر تجربه به دست میارید. چه چیزی بدست میارید و چی از دست میدید. اگر هدفتون حرفه ای شدنه، باید سعی کنید همیشه جایی باشید که همه افراد اونجا از شما بهتر باشن. باید سعی کنید تا جایی که میشه ازشون یاد بگیرید. اگر هدفتون مسیر شغلی تون هست، ابعاد مالی میرن تو الویت های بعد.در کل میتونم بگم سعی کنید همیشه درگیر کار هایی باید که شما رو از اون Comfort zone تون بیاره بیرون. همیشه باید در حین انجام کار ها ترس و دلهره داشته باشید و به توانایی های خودتون شک کنید! این اتفاق کاملا طبیعیه.سافت اسکیلچیزی که کمتر بهش توجه میشه، مهارت های نرم (یا به قول Simon Sinek مهارت های انسانی) هست. حوزه مهارت های نرم خیلی بزرگه، ولی من اینجا به چندتاش اشاره میکنم.انعطاف پذیر باشید،بذارید از کاری که انجام دادید انتقاد بشه، با آغوش باز بپذیرید و اعمال کنید. از تغییر تکنولوژی ترس نداشته باشید، همیشه برنده کسیه که راحت تر با تغییرات وفق پیدا میکنه. تغییر کردن و آماده شدن برای تغییر رو یاد بگیرید. دائم در حال یاد گیری باشید، یه برنامه نویس باید زمان قابل توجهی از روزش رو مطالعه کنه. کمک بخواید، قرار نیست همیشه همه کار ها رو خودتون تنهایی جلو ببرید.صبور باشید، فرآیند یادگیری کار که زمانبریه، انتظار نتایج سریع نداشته باشید.ارتباطات، بهتره روی مهارت ارتباط برقرار کردن، صحبت کردن در جمع و مذاکره کردن ماهر باشید.احترام، احترام، احترام.مهارت حل مسألهیکی از مهم ترین توانایی های یه برنامه نویس حرفه ای، حل مسأله است. علاوه بر توانایی حل مسائل الگوریتمی، باید این توانایی رو داشته باشید که خوب تحلیل کنید، تمام جوانب مختلف کار رو بسنجید، کار رو خرد کنید. برای بهبود توانایی حل مسائل الگوریتم توصیه من leetcode هست. نیازی نیست بشینید ۲۴ ساعته پاش، ولی در حد هفته ای ۱-۲ تا مسئله حل کردن خیلی کمک میکنه. معمولا روش حل این مسائل تکراریه، یه سری الگو هست که میتونید ازشون برای مسائل دیگه هم استفاده کنید.سعی کنید کارای مختلف رو از روش های متفاوت انجام بدید، به انجام شدنشون بسنده نکنید، بعد از حل هر چالش ببینید چطور میتونی بهبودش بدید، چه چیزایی هست که هنوز جای بهتر شدن داره.دیدگاهتون رو گسترده تر کنیدهر تکنولوژی، کتابخونه، دیتابیس، زبان برنامه نویسی و ... رو نیازی نیست بلد باشید یا یاد بگیرید ولی خوبه که دیدگاهتون هم انقدر منعطف باشه که برای تغییر آماده باشید، هم بدونید هر تکنولوژی به درد چه کاری میخوره. اینطوری نباشید که از یک چیز که بلدید بخواید همیشه و همه جا استفاده کنید.علاوه بر اینها، خوبه که یاد بگیرید سیستم چطور کار میکنه، از چه اجزایی تشکیل شده، توی مباحث زیرساختی خوبه که وارد باشید اگر متخصص نیستید. کتاب گستره هم کتاب خوبیه و دیدگاهتون به این بحث رو وسیع تر میکنه.یاد بگیرید چطور تیمی بازی کنیدکار های بزرگ رو تیم های خوب انجام میدن. خیییییلی به ندرت پیش میاد که یه کار شاهکار رو یک نفر به تنهایی انجام داده باشه، بنابراین مهمه که بلد باشید چطور توی تیم بازی کنید. یه تمرین خیلی خوب برای یاد گرفتن کار تیمی فعالیت توی دنیای اوپن-سورسه. توی اوپن-سورس یاد میگیرید که به کار دیگران احترام بذارید، به جای غر غر کردن خودتون دست به کار بشید و کارو انجام بدید، منتقد خوبی باشید و الکی هم به چیزی گیر ندید. همه این ها که گفتم رو اگر بتونید توی تیم خودتون، توی محل کارتون هم انجام بدید میشه بهتون گفت شما یه هم‌تیمی خوب هستید. یادتون نره که سنیور بودن صرفا به معنی آدم خفنی بودن و خدای یه زبون برنامه نویسی و تکنولوژی بودن نیست، ارتباط برقرار کردن و حفظ این رابطه خوب با هم‌تیمی ها خیلی بحث مهمیه.در مورد بحث اوپن-سورس آرمان یه مطلب خیلی خوب نوشته که توصیه میکنم حتما بخونید: https://virgool.io/@ahhshm/%DA%86%D8%B1%D8%A7-%D9%88-%DA%86%D8%B7%D9%88%D8%B1-%D8%AA%D9%88%DB%8C-%D8%A7%D9%BE%D9%86-%D8%B3%D9%88%D8%B1%D8%B3-%D9%85%D8%B4%D8%A7%D8%B1%DA%A9%D8%AA-%DA%A9%D9%86%DB%8C%D9%85-lq8ikbpdeoc2 یاد بگیرید که خودتون رو ارائه بدیداگر همه چیز هایی که بالاتر گفتم رو هم داشته باشید اما نتونید اونطوری که واقعا هستید خودتون رو ارائه بدید احتمالا سرتون کلاه میره. یاد بگیرید چطور از خودتون تعریف کنید، نه طوری که همه ازتون بدشون بیاد، بلکه طوری که اگر لازم شد نشون بدید چی تو چنته دارید. مهارت مارکت کردن خودتون یکی از مهم مهارت هاییه که باید یاد بگیرید که بتونید کار بهتری پیدا کنید، که بتونید تو تیم های بهتری باشید، که بتونید پول بیشتری دربیارید!مرسی که مطلب رو خوندید، اگه چیزی جا مونده بود یا اشتباه بیان شده بود حتما بهم بگید. میتونید توی اینجا توی لینکدین منو پیدا کنید.