سلام دوستان من علی نظری هستم. برنامهنویس و توسعهدهنده وب. توی مقاله امروز میخوایم سه رده شغلی توسعهدهنده ها رو با هم بررسی کنیم. اگه نمیدونین توسعهدهنده به چه کسی میگن، پیشنهاد میکنم این مقاله رو بخونید.
هیچ وقت نمیشه به کسی، فقط برحسب تعداد سالهای فعالیتش، لقب Junior, Mid-level و Senior داد. یک توسعهدهنده مبتدی (Junior) ممکنه از لحاظ سنی و حتی تعداد سالهای فعالیتش، از یک توسعهدهنده ارشد (Senior) برتر باشه. اما همه چیز برمیگرده به مهارت! البته این به این معنی نیست که یک توسعهدهنده ارشد باید همه چیز رو بلد باشه. ولی میشه گفت یک توسعهدهنده ارشد توی یک خیلی از معیارهای کوچیک و بزرگ (که امروز بررسی میکنیم) از توسعهدهندههای میانرده (Mid-level) و مبتدی بالاتره که این تنها به مهارتهای کدنویسی برنمیگرده.
دانش
مشخصا توسعهدهنده ارشد نسبت به توسعهدهنده مبتدی اطلاعت تخصصی خیلی بالاتری داره. این اطلاعات شامل الگوهای طراحی (Design Patterns)، معماریهای طراحی، سرعت، کیفیت، امنیت و ... کار میشن. البته دونستن همه چیز شما رو تبدیل به یک توسعهدهنده ارشد نمیکنه. چیزی که اهمیت داره اینه که به چه صورت از این اطلاعات استفاده بشه.
کدنویسی
شاید اکثرا تصور کنیم که کدنویسی، ارتباط با یک کامپیوتر هست. ولی هرچقدر که از سمت مبتدی به سمت ارشد میریم، متوجه میشیم که کدنویسی بیشتر ارتباط با انسانهاست. چون کدی که نوشته میشه، نهایتا به صفر و یک تبدیل میشه و زبان کامپیوتر در واقع همین صفر و یک ها هست. اگه سیر تکاملی زبانها رو ببینیم، زبانهای امروزی برای یک انسان خواناتر شدن.
کدی که نوشته میشه، باید برای بقیه توسعهدهنده های برنامه قابل درک باشه. یک شخص یا یک تیم که کدها رو برای اولین بار میبینه، باید بتونه براحتی اون رو توسعه بده و رفع اشکال کنه. توی این مرحله یک تفاوت بزرگ از توسعهدهنده مبتدی و ارشد مشخص میشه. یعنی کیفیت کدها میتونن معیار خوبی باشن.
چه جوری توسعهدهنده مبتدی رو تشخیص بدیم؟
مسلما یک توسعهدهنده مبتدی بیتجربه هست. ذهنیتش به این شکله که فقط برنامهش با موفقیت اجرا بشه و به اینکه کدش برای بقیه افراد خوانا باشه یا نه اهمیت نمیده. نوشتن یک کد ساده و قابل فهم راحت نیست. شما خیلی راحت میتونین با نگاه کردن به یک تکه کد، تشخیص بدین که این کد توسط چه شخصی نوشته شده؛ مبتدی یا ارشد.
چه جوری توسعهدهنده ارشد رو تشخیص بدیم؟
توسعهدهنده ارشد کدها رو ساده مینویسه. با نگاه کردن به یک تکه کد از یک توسعهدهنده ارشد، متوجه میشم که خوانایی این کدها چقدر بالاست. یک توسعهدهنده ارشد، یک مسئله پیچیده رو به سادهترین روش خواهد نوشت. در واقع یک توسعهدهنده ارشد اصل رو به خوبی پیاده سازی میکنه.
توسعهدهنده ارشد با این ذهنیت کد مینویسه که کدش قابل فهم و قابل توسعه باشه. توسعهدهنده ارشد تلاش میکنه کدش توسط بقیه قابل فهم باشه، در صورتی که توسعهدهنده مبتدی تلاش میکنه کدش فقط برای کامپیوتر قابل فهم باشه.
...
در کنار مهارتهای کدنویسی، معیارهای دیگهای هم وجود داره که یک توسعهدهنده مبتدی رو با یک توسعهدهنده ارشد جدا میکنه.
یک توسعهدهنده مبتدی، عموما کارهای سادهای بهش محول میشه یا کارهایی که بهش محول میشه، تاثیر کمی روی برنامه داره. اونها هیچوقت مسئول طراحی معماری نرمافزار نیستن! این موضوع برای توسعهدهندههای میانی هم صدق میکنه. اونها دخالت کمی توی طراحی معماری نرمافزار دارن. تفاوت اونها با توسعهدهنده مبتدی اینه که یک توسعهدهنده میانی نیاز به نظارت کمتری داره. اونها همچنان کارهای رو انجام میدن که بهشون محول شده. اما یک توسعهدهنده ارشد میتونه یک نرمافزار رو از صفر تا صد خودش طراحی کنه.
البته این به این معنی نیست که یک توسعهدهنده ارشد، طی پروسه طراحی نرمافزار هیچ سوالی واسش پیش نمیاد. برای هر توسعهدهندهای همیشه سوالهای متفاوتی پیش میاد و این قضیه همیشه وجود خواهد داشت.
کیفیت و سطح یک توسعهدهنده رو میشه از نوع و سطح سوالاتی که میپرسه، متوجه شد. یک توسعهدهنده ارشد میدونه چه سوالاتی بپرسه و چه جوری به جواب برسه. یک توسعهدهنده میانی هم تقریبا این قابلیت رو داره که سوالات درستی رو بپرسه، ولی روی وظایف پیچیده همچنان نیاز به کمک داره و به تنهایی نمیتونه از پس اونا بر بیاد. از یک توسعهدهنده مبتدی نباید انتظار داشته باشیم که سوالات خوب و با کیفیتی بپرسه. اونها هنوز اول کار هستن و سوالاتی که براشون پیش میاد ممکنه گاها لبخندی رو روی صورت افراد با تجربهتر بنشونه :)
پس با توجه به چیزی که اینجا مطرح کردیم، سوالات، برای همه و همه پیش میاد و هیچ کس نمیتونه ادعا کنه که من همه چیز رو بلدم. حتی برای یک توسعهدهنده ارشد شرایط و سوالاتی پیش میاد که فقط باید از کسی بپرسه که توی اون زمینه تجربه داره.
از مبتدی به میانی
همه چیز تجربهست! از اونجایی که توسعهدهندههای مبتدی هنوز اول راه هستن و تجربه خیلی کمی دارن، یکی از شرایطی که توی اون یه توسعهدهنده مبتدی میتونه خیلی زود ارتقا پیدا کنه اینه که حداقل چندبار خودش رو توی سیکل کامل توسعه نرمافزار دخالت بده. اینطوری خیلی زودتر با چالشها مواجه میشه و تجربیاتی که بدست آورده واقعا کمک خواهد کرد.
توی بحث کدنویسی، یک توسعهدهنده مبتدی باید کدها رو به سادهترین حالت بنویسه و از اعمال پیچیدگی اضافی خودداری کنه. همچنین نکته مهمتر اینه که این کدها رو جوری بنویسه که یک نفر دیگه بتونه بیاد همین کدها رو توسعه بده. یک توسعهدهنده مبتدی باید با روشهای اشکال زدایی (Debugging)، معماریها، عملکرد (Performance) و امنیت نرمافزار آشنا بشه.
از میانی به ارشد
رفتن از مبتدی به میانی کار نبستا سادهای خواهد بود. اما از میانی به ارشد، هرگز! اکثر توسعهدهندههای میانی، در تمام دوران فعالیتشون توی همین سطح خواهند موند.
توسعهدهنده های ارشد در گذشته اشتباهات و تجربیات سخت و فراوانی داشتن. اونها با درس گرفتن از این تجربیات به سطحی رسیدن که میتونن از صفر تا صد یک نرمافزار رو براحتی مجسم کنن.
اگه میخواین به این سطح برسین، باید آماده باشین تا وظایفی رو قبول کنین که هیچ کسی قادر به حل اونها نیست! انجام چنین وظایفی هست که یک توسعهدهنده میانی رو از یک توسعهدهنده ارشد جدا میکنه.
یکی دیگه از وظایف توسعهدهنده ارشد اینه که یک مربی و معلم برای توسعهدهندههای کم تجربهتر باشه و بتونه بدرستی اونا رو راهنمایی کنه. شما به عنوان یک توسعهدهنده ارشد، مرجعی برای بقیه توسعهدهندهها خواهید بود :)
و مورد آخر اینکه یک توسعهدهنده ارشد علاوه بر مهارتهای بالای کدنویسی، باید با نرمافزارها و ابزارهایی که برای توسعه نرمافزار بکار میره کاملا آشنایی داشته باشه و بتونه ازشون استفاده کنه.
نتیجه گیری
تفاوت بین توسعهدهنده مبتدی، میانی و ارشد، به تعداد سالهای تجربه کاری نیست. میشه گفت که توسعهدهنده های ارشد، نسبت به بقیه ماهر تر هستن. ولی صرفا داشتن دانش، کافی نیست. یک توسعهدهنده ارشد یک ذهنیت منسجمتری داره که باعث میشه کدهای سادهتر و قابل توسعه بنویسه. یکی از وظایف مهم توسعهدهنده ارشد اینه که بتونه در نقش یک مربی برای توسعهدهندههای میانی و مبتدی باشه.
هیچ کسی نمیتونه ادعا کنه که من همه چیز رو بلدم که این مطمئنا شامل توسعهدهندههای ارشد هم میشه. اما برای توسعهدهندههای ارشد سوالات متفاوتتری پیش میاد و شاید جواب اونها رو کسی ندونه. توسعهدهندههای ارشد خودشون رو مسئول وظایفی میدونن که هیچکس دیگهای قادر به انجام اونها نیست.
این جلمه رو من خیلی دوست دارم:
اگر به کدهای 6ماه قبلتون نگاه کردین و حالتون بد شد، این یعنی پیشرفت کردین :)
...
برای اینکه از سطح مبتدی پیشرفت کنیم، باید به کدهای بقیه نگاه کنیم، از اونها تقلید کنیم یا اونها رو به چالش بکشیم.
برای اینکه از سطح میانی پیشرفت کنیم، باید خودمون رو آماده شیرجه زدن تو مسائلی کنیم که کمتر کسی مایل به حل اونهاست و همچنین باید تو نرمافزارها و ابزارهای مرتبط تبدیل به یک استاد بشیم.
آقای میگه:
یک برنامهنویس نادان، کدی مینویسه که فقط یک کامپیوتر بتونه اون رو بفهمه. یک برنامهنویس خوب کدی مینویسه که یک انسان بتونه اون رو متوجه بشه
امیدوارم از این مقاله استفاده کرده باشین. برای این مقاله از یه سری اطلاعات شخصی و این منبع زیر استفاده کردم:
