حتما یکی از این نوع برنامه نویس (Coder / Programmer / Developer / Software Engineer) رو شنیدید حتی برای کسانی که در صنعت نرم افزار کار می کنند، این عناوین بسیار گیج کننده به نظر می رسند. بنابراین، چگونه بین این اصطلاحات تمایز قائل می شود؟ آیا می دانید که به چه معنایی هستند که زمانی نیاز به انجام کاری دارید، به چه کسی مراجعه کنید؟ در واقع، این اصطلاحات جزئی به جای استفاده می شوند، که سازمانی به سازمان نیز متفاوت است، و حتی می تواند به شرایط، به معنای چیزهای دیگر نیز باشد. در این مقاله قصد دارم، درباره این چهار تایپ مختلف از برنامه نویس ها رو براتون توضیح بدم.

افرادی که خارج از صنعت نرم افزار هستند، معمولاً به هر کسی که می تواند کد بنویسد، به عنوان کدنویس یاد می شود. اما معمولاً کدنویس ها، به عنوان برنامه نویس کم تجربه یا آموزش دیده در نظر گرفته می شوند. مثل کسی که ابزار آشپزی رو بلده و اگر بهش کتاب آشپزی بدید، میتونه یک دستور پخت رو از توی انتخاب کنه و غذا رو واستون درست کنه ولی روی طعم و کتاب مزه ی غذا نمیتونید حساب کنید و فقط میتونید انتظار یک غذا رو داشته باشید. مثلاً می توانید تصور کنید که این یک قورمه سبزی است حالا با هر کم و کاستی که از نظر طعم دارد. این افراد دانش الگوریتمی یک Programmer یا Developer را ندارند، زیرا در این زمینه مبتدی هستند و فقط در یک زبان برنامه نویسی مهارت دارند. معمولاً به کدنویس ها وظیفه نوشتن کدهای ساده می شود که به راحتی توسط توسعه دهندگان قابل اجرا است. گاهی اوقات با عنوان “Junior Programmer” یا “Junior Developer” استفاده می شود.

همون کارایی که کدنویس بلده رو میتونه انجام بده و با این تفاوت که کیفیت کار هم براش خیلی مهمه، مثل آشپزی که یه غذا درست میکنه و غذا همون غذایی هست که انتظار داشت و با این تفاوت که یکسری فوت میکرد. فن آشپزی هم بلده و خیال تون از طعم غذا هم راحته.

دولوپر مثل یک سرآشپز میمونه که علاوه بر آن آشپزی رو بلده، مدیریت آشپزخونه رو هم بلده. ذاعقه مشتری هاشو بشناسه و با خلاقیتی که داره، میتونه یک منوی جدید طراحی بکنه و همچنین میتونه آشپزهایی که توی اون آشپزخونه کار میکنن هدایت و رهبری بکنه. توسعه دهندگان در برخی از شرکت ها گاهی اوقات به شروع تا پایان یک پروژه ناظر می شوند که مسئول طراحی کلی برنامه هستند.

آنها (Programmer and Developer) کدنویسان با تجربه تری هستند که حداقل به دو تا سه زبان مسلط هستند و کدهای تمیز و بدون خطا می نویسند. آنها می توانند دانش الگوریتمی خود را برای ایجاد سطح پیچیده تری از نرم افزار نویسی به برنامه گیرنده ایجاد کنند.

از میان عناوین گفته شده، بالاترین سطح و متخصص ترین هستند و معمولاً به سه زبان برنامه نویسی یا بیشتر تسلط دارند و از مهارت های خود برای طراحی و اجرای معماری کلی برنامه استفاده می کنند. محصول نهایی را ماژولار طراحی می‌کنند تا یک ارتباط ایجاد کنند و سپس با برنامه‌نویسان و توسعه‌دهندگان همکاری کنند. جایگاه مهندسی معمولاً به این معنی است که شما توسعه دهنده ای هستید که یک نوع مدرک خاص، دانش مهندسی و طراحی یک سیستم نرم افزاری دارید. برای مثال برای مدیریت یک رستوران یک سرآشپزی کافیه، اما در مورد یک هتل که چندتا رستوران و چندمدل منوی مختلف داره و حالا ما کسی رو میخواهیم که این رستوران ها رو کنترل بکنه و حواسش باشه که هر کدوم از این منو ها رو که داره. طراحی باعث عدم هماهنگی در رستوران ها نشه و کار رو درست بین سراشپزهای رستوران تقسیم می شود.

حالا در فضای نرم افزار این موارد رو بررسی کنیم. بخاطر پیچیدگی که در دنیای نرم افزار وجود دارد، نمیتونیم تنها به یک سراشپز اکتفا کنیم. ما دولوپر و مهندس نرم افزار نیاز داریم و اینجاست که کار تیمی خودشو نشون میده که ده ها مهندس نرم افزار باید با هم همکاری کنن که کدشون، شور یا بی نمک نشه. با شناخت این سطح توقع ما از کسی که برنامه نویس هست مشخص خواهد شد و تصور یک کدنویس انتظار مدیریتا از برنامه نویس رو نخواهیم داشت.

حالا در چند مهارتی که یک مهندس نرم افزار باید داشته باشد رو باهم بررسی کنیم.بطور کلی مهارت های یک مهندس نرم افزار رو ما می توانیم به دو دسته تقسیم کنیم:

1- مهارت های سخت (مهارت های فنی)

2- مهارت های نرم

به عنوان مهندس نرم افزار، Soft Skills بیشتر نسبت به Technical Skillsداره. به دلیل اینکه به نحوه ارتباطات و ارتباطات شما در زندگی برمیگرده و در تولید محصول نرم افزاری کار تیمی اولویت بالاتری دارد.

برترا Soft Skills رو مهارت نرم نخونید. همون Soft Skills استفاده کنید.

مهم Soft Skills که باید به عنوان یک برنامه نویس بدونیم رو در ادامه براتون توضیح میدم:

– به آدم های اطراف تون توجه کنید.

همه مثل خود شما دارند که مهم باشند و بشن، پس بهشون فضا بدید.

– هیچ وقت آدم ها رو قضاوت و نقد نکنید، در عوض کارشون رو نقد کنید.

– برای کار و زندگی تون هدف گذاری کنید و هر چند وقت یکبار خودتون رو ارزیابی قرار بدید و بدونید کجای کار هستید.

– مسئولیت پذیر باشید و اگر اشتباهی کردید اون رو بپذیرید و جبرانش کنید. به هر حال برای همه ممکنه اشتباه پیش بیاد.

– دانش خودتون رو با بقیه به اشتراک گذاشتن و از این کار هراسی ندارین.

– یاد بگیر که چطوری چیزهای آدم رو یاد بگیر.

– به سلامت جسم و روان تون بدید.

هر کدوم از این موارد رو میشه کلی بحث کرد و دید فیزیولوژی مباحث علمی من، منتها سعی کردم موارد رو تیتروار در موردش صحبت کنم. اگر به قدرت خود مهارت سافت اسکیل بودید، کتاب Own Your Tech Career رو به شما پیشنهاد میکنم.

حالا بریم در مورد مهارت های فنی صحبت کنیم. مهارت های فنی مهارت های متنوعی هستند و من اینجا سعی کردم یکسری موارد رو نام ببرم.

– به یک زبان خاص یا یک فریمورک خاص وابسته نشید. در واقع زبان ها و فریمورک ها مثل ابزارهای ابزارهای ابزارشما هستند و هر چی ابزار شما کامل تر باشه، موقع کار کردن راحت هستید. به یکی یا دوتا زبان یا فریمورک تسلط پیدا کنید و مابقی در آشنا باشد که در صورت نیاز بتونید به ابزار دیگر ای حدیچ کنید و منعطف باشید، چون کانسبت و برنامه نویسی یکسان هست.

– در هر زمینه، حتماً از مباحث و فناوری های پایه شروع کنید. مثلاً بجای اگر اول برید سراغ ریکت، ابتدا جاوااسکریپت رو خوب فرا بگیرید.از طرفی شما فریمورک انجمن باشید در تصویری که فریمورک دارید بیاد یا تغییری در آن فریمورک رخ می دهد مثلا منقضی می شود سویچ کردن چون برای شما سخت خواهد بود مبحث پایه ش. که جاوااسکریپت هست رو مسلط نیستید.

– حتما در پروژه هاتون از سورس کنترل هایی مثل گیت استفاده کنید.

– در طراحی و معماری نرم افزار مطالعه داشته باشید.مثل دیزاین پترن ها ، کلین کد و…

– حتما برای کدتون تست بنویسید و قابل تست نوشتن باشه.

– با فرآیندهای توسعه نرم افزار مثل اجایل و اسکرام آشنا باشید.

– از ابزارهای مانیتورینگ یا issue tracking استفاده کنید.

– یاد بگیرید که چطوری محصول تون رو درست دیپلویی کنید و در مورد DevOps و زیرساخت اطلاع پیدا کنید.

و سایر موارد ….

موارد دیگری نیز وجود دارد که من نام نبردم، موارد دیگری هستند که من فراموش کردم، حتما کامنت بزارید. اگر دوست داشتید می توانید به کانال تلگرامم هم سر بزنید، یکسری از تجربیاتم رو اونجا هم منتشر می کنم. ممنون که وقت گذاشتید و مطالعه کردید 🙂

تفاوت بین برنامه نویس، برنامه نویس، برنامه نویس و مهندس نرم افزار

تفاوت بین برنامه نویس، کدنویس، توسعه دهنده و مهندسان نرم افزار چیست؟

اگر دوست داشتی امتیاز دادن یادت نره!