من چه نوع برنامه نویسی هستم؟

حتما یکی از این نوع برنامه نویس (Coder / Programmer / Developer / Software Engineer) رو شنیدید حتی برای کسانی که در صنعت نرم افزار کار می کنند، این عناوین بسیار گیج کننده به نظر می رسند. بنابراین، چگونه بین این اصطلاحات تمایز قائل شویم؟ آیا می دانید که به چه معنایی هستند و زمانی که نیاز به انجام کاری دارید، به چه کسی باید مراجعه کنید؟ در واقعیت، این اصطلاحات اغلب به جای یکدیگر استفاده می شوند، که از سازمانی به سازمان دیگر نیز متفاوت است، و حتی می تواند بسته به شرایط، به معنای چیزهای مختلفی نیز باشد. در این مقاله قصد دارم، درباره این چهار تایپ مختلف از برنامه نویس ها رو براتون توضیح بدم.کدنویس (Coder) کیه؟افرادی که بعضا خارج از صنعت نرم افزار هستند، معمولاً به هر کسی که می تواند کد بنویسد، به عنوان کدنویس یاد می شود. اما معمولاً کدنویس ها، به عنوان برنامه نویس کم تجربه یا آموزش دیده در نظر گرفته می شوند. مثل کسی که ابزار آشپزی رو بلده و اگر بهش کتاب آشپزی بدید، میتونه یک دستور پخت رو از توی کتاب انتخاب کنه و غذا رو واستون درست کنه ولی روی طعم و مزه ی غذا نمیتونید حساب کنید و فقط میتونید انتظار یک غذا رو داشته باشید. مثلا میتونید تصور کنید که این یک قورمه سبزی هست حالا با هر کم و کاستی که از نظر طعم داره. این افراد دانش الگوریتمی یک Programmer یا Developer را ندارند، زیرا اغلب در این زمینه مبتدی هستند و فقط در یک زبان برنامه نویسی مهارت دارند. معمولاً به کدنویس ها وظیفه نوشتن کدهای ساده داده می شود که به راحتی توسط توسعه دهندگان قابل واگذاری است. گاهی اوقات با عنوان "Junior Programmer" یا "Junior Developer" استفاده می شود. برنامه نویس (Programmer) کیه؟همانند coder، همون کار هایی که کدنویس بلده رو میتونه انجام بده و با این تفاوت که کیفیت کار هم براش اهمیت داره، مثل آشپزی که یک غذا درست میکنه و غذا نیز همون غذایی هست که انتظار خواهید داشت و با این تفاوت که یکسری فوت و فن آشپزی هم بلده و خیال تون از طعم غذا نیز راحته.توسعه دهنده (Developer) کیه؟دولوپر مثل یک سرآشپز میمونه که علاوه براینکه آشپزی رو بلده، مدیریت آشپزخونه رو هم بلده. ذاعقه مشتری هاشو بشناسه و با خلاقیتی که داره، میتونه یک منوی جدید طراحی بکنه و همچنین میتونه آشپزهایی که دارند توی اون اشپزخونه کار میکنند نیز هدایت و رهبری بکنه. توسعه دهندگان در برخی از شرکت ها گاهی اوقات به عنوان ناظران شروع تا پایان یک پروژه شناخته می شوند که مسئول طراحی کلی برنامه هستند.آنها (Programmer و Developer) کدنویسان با تجربه تری هستند که حداقل به دو تا سه زبان مسلط هستند و کدهای تمیز و بدون خطا می نویسند. آنها می توانند دانش الگوریتمی خود را برای ایجاد سطوح پیچیده تری از برنامه نویسی نرم افزار به کار گیرند.مهندس نرم افزار (Software Engineer) کیه؟از میان عناوین گفته شده، بالاترین سطح و متخصص ترین هستند و اغلب به سه زبان برنامه نویسی یا بیشتر تسلط دارند و از مهارت های خود برای طراحی و اجرای معماری کلی برنامه استفاده می کنند. محصول نهایی را ماژولار طراحی می‌کنند تا یک رابط تمیز ایجاد کنند و سپس با Programmerها و Developerها همکاری می‌کنند. جایگاه مهندسی معمولاً به این معنی است که شما توسعه دهنده ای هستید که دارای یک نوع مدرک خاص، دانش مهندسی و توانایی طراحی یک سیستم نرم افزاری هستید. به بیان ساده تر، برای مدیریت کردن یک رستوران یک سرآشپز کافیه، اما در مورد یک هتل که چندتا رستوران و چند مدل منوی مختلف داره و حالا ما کسی رو میخواهیم که این رستوران ها رو کنترل بکنه و حواسش باشه که هر کدوم از این منو ها رو که داره طراحی میکنه، باعث عدم هماهنگی در اون رستوران ها نشه و کار رو درست بین سراشپز های رستوران تقسیم کنه.حالا در فضای فنی این موارد رو بررسی کنیم. بخاطر پیچیدگی که در دنیای نرم افزار وجود داره، نمیتونیم تنها به یک سرآشپز اکتفا کنیم. ما چندین دولوپر و مهندس نرم افزار نیاز داریم و اینجاست که اهمیت کار تیمی خودشو نشون میده که ده ها مهندس نرم افزار باید با هم همکاری کنند که کدشون، شور یا بی نمک نشه. با شناخت این تعاریف سطح توقع ما از کسی که برنامه نویس هست مشخص خواهد شد و فرضا از یک کدنویس انتظار مدیریت چندین برنامه نویس رو نخواهیم داشت.حالا در مورد حداقل مهارت هایی که یک مهندس نرم افزار باید داشته باشه رو باهم بررسی میکنیم. بطور کلی مهارت های یک مهندس نرم افزار رو ما میتونیم به دو دسته تقسیم کنیم:1- Hard Skills (Technical Skills)2- Soft Skillsبه عنوان مهندس نرم افزار، Soft Skills اهمیت بیشتری نسبت به Technical Skillsداره. به دلیل اینکه به نحوه ی ارتباطات و تعاملات شما در زندگی برمیگرده و در تولید محصول نرم افزاری کار تیمی اولویت بالاتری داره.ترجیحا Soft Skills رو مهارت نرم نخونید. همون Soft Skills استفاده کنید.مهمترین Soft Skills که باید به عنوان یک برنامه نویس بدونیم رو در ادامه براتون توضیح میدم:- به آدم های اطراف تون توجه کنید.همه مثل خود شما احتیاج دارند که مهم باشند و دیده بشن، پس بهشون فضا بدید.- هیچوقت آدم ها رو قضاوت و نقد نکنید، در عوض کارشون رو نقد کنید.- برای کار و زندگی تون هدف گذاری کنید و هر چندوقت یکبار خودتون رو مورد ارزیابی قرار بدید و بدونید کجای کار هستید.- مسئولیت پذیر باشید و اگر اشتباهی کردید اون رو بپذیرید و جبرانش کنید. به هر حال برای همه ممکنه اشتباه پیش بیاد.- دانش خودتون رو با بقیه به اشتراک بگذارید و از این کار هراسی نداشته باشید.- یاد بگیرید که چطوری چیز های جدیدی رو یاد بگیرید.- به سلامت جسم و روان تون اهمیت بدید.هر کدوم از این موارد رو میشه کلی بحث کرد و از دید فیزیولوژی مباحث عمیقی هست، منتها من سعی کردم موارد رو تیتر وار در موردش صحبت کنم. اگر تمایل به تقویت مهارت سافت اسکیل خود داشتید، کتاب Own Your Tech Career رو به شما پیشنهاد میکنم.حالا بریم در مورد مهارت های فنی (Technical Skills) صحبت کنیم. مهارت های فنی مهارت های متنوعی هستند و من اینجا سعی کردم یکسری موارد رو نام ببرم.- به یک زبان خاص یا یک فریمورک خاص وابسته نشید. در واقع زبان ها و فریمورک ها مثل ابزار های جعبه ابزار شما هستند و هر چی جعبه ابزار شما کامل تر باشه ، موقع کار کردن راحت هستید.البته این نکته رو هم اشاره کنم که این به معنای یادگیری همه ی زبان ها یا فریمورک ها نیست بلکه به یکی یا دوتا زبان یا فریمورک تسلط پیدا کنید و مابقی در حد اشنایی باشه که در صورت نیاز بتونید به ابزار دیگه ای سوییچ کنید و منعطف باشید، چون کانسپت و مفاهیم برنامه نویسی یکسان هست.- توی حوزه ی یادگیری، حتما از مباحث و تکنولوژی های پایه شروع کنید. مثلا بجای اینکه اول برید سراغ یادگیری ریکت، ابتدا جاوااسکریپت رو خوب فرا بگیرید.از طرفی اگر شما فریمورک محور باشید در صورتی که فریمورک جدیدی بیاد یا تغییری در اون فریمورک رخ بده مثلا منقضی بشه سوییچ کردنش برای شما سخت خواهد بود چون مبحث پایه ش که جاوااسکریپت هست رو مسلط نیستید.- حتما در پروژه هاتون از سورس کنترل هایی مثل گیت استفاده کنید.- در مورد طراحی و معماری نرم افزار مطالعه داشته باشید. مثل دیزاین پترن ها ، کلین کد و…- حتما برای کدتون تست بنویسید و قابل تست نوشتن باشه.- با فرایند های توسعه نرم افزار مثل اجایل و اسکرام اشنا باشید.- از ابزار های مانیتورینگ یا issue tracking استفاده کنید.- یاد بگیرید که چطوری محصول تون رو درست دیپلوی کنید و در مورد DevOps و زیرساخت اطلاع باشید.و سایر موارد ....قطعا موارد دیگری نیز وجود داره که من نام نبردم، اگر موارد دیگری هست که من فراموش کردم، حتما کامنت بزارید. اگر دوست داشتید میتونید به کانال تلگرامم هم سر بزنید، یکسری از تجربیاتم رو اونجا هم منتشر میکنم. ممنون که وقت گذاشتید و مطالعه کردید :)Difference Between a Programmer, Coder, Developer, and Software EngineerWhat is the difference between a programmer, coder, developer and software engineers?