وبلاگ تخصصی جامعه برنامه‌نویسی مدرن آی او استریم

آخرین پست‌های مرتبط با فناوری و برنامه نویسی مدرن در این بخش در اختیار شما قرار می‌گیرد.



فرق بین (کد‌نویس)٬ (برنامه‌نویس) و توسعه دهنده


نویسنده: کامبیز اسدزاده
تاریخ انتشار : 1396/6/22 16:27 /   /  موضوعات : فناوری ها دفعات بازدید : 724  

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

ممکن است تا کنون شما با عنوان برنامه‌نویس یا توسعه دهنده یا کُدر خود را معرفی کرده باشید! اما آیا واقعا شما یک برنامه نویس هستید؟ آیا شما واقعا یک کُدر هستید؟ یا یک توسعه دهنده؟ مسلما بیشترین و رایجترین اصطلاح در دنیای فناوری مخصوصا در کشور ما به عنوان توسعه دهنده وب٬ توسعه دهنده موبایل و ... به گوش می‌خورد که شاید خود صاحب مهارت نمی‌داند که آیا واقعا توسعه دهنده است یا خیر؟ فرض کنید قرار است پروژه ای را قبول کنید و یا روی یک ایده بسیار نابی کار کنید که نیاز به مهارت بسیار بالایی از علوم کامپیوتر به خصوص برنامه نویسی و انواع الگوریتم‌ها و کتابخانه ها را خواهد داشت! آیا یک کُدر عنوان مناسبی برای چنین شخصی است؟ پس چطور باید عنوان تخصصی خود را معرفی کنید؟ ممکن است عنوان اشتباه باعث تنزل درجه تخصصی و مهارت شما شود و حتی برعکس ممکن است انتظاری را ایجاد کند که در تخصص و توان شما نیست! بنابراین قبل از اینکه این عناوین و اصطلاحات را به سادگی بر روی پروفایل خود و معرفی نامه خود درج کنید بهتر است شناخت کافی در رابطه با آن که واقعا صاحب چه عنوانی هستید کسب کنید.

در این مقاله من تصمیم گرفتم تفاوت‌های بین کدنویس (Coder)٬ برنامه‌نویس (Programmer) و توسعه‌دهنده (Developer) را مشخص کنم. بنابراین به ترتیب عناوین هر یک از آن‌ها را توضیح و در رابطه با نکات مهم متمایز کننده آن‌ها اشاره خواهم کرد.

 

کُدر یا کدنویس (Coder)

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

 

برنامه‌نویس (Programmer)

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

برنامه نویس می‌داند در کجا باید از چه نوع دستورات و توابعی استفاده کند تا کد نهایی او نتیجه ای ایجاد کند که از آن انتظار می‌رود. یک برنامه نویس توانایی این را دارد که کُد های نوشته شده توسط دیگر برنامه نویسان را بخواند٬ درک کند و حتی آن‌ها را ویرایش کند.

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

 

توسعه دهنده (Developer)

در رابطه با توسعه‌دهنده باید به این توجه داشته باشید که توسعه‌دهنده به تنهایی عنوان نمی‌شود. بنابراین توسعه دهنده به صورت‌های مختلفی وجود دارند (توسعه‌دهنده وب٬ توسعه‌دهنده نرم‌افزار٬ توسعه‌دهنده موبایل که در رابطه با نوع پلتفرم باز متفاوت هستند٬ توسعه دهنده رابط کاربری٬ توسعه دهنده تجربه کاربری و در نهایت توسعه دهنده فول-استک) در این مقاله قرار است در رابطه یک توسعه دهنده صحبت کنیم که من در این بخش توسعه‌دهنده نرم‌افزار را انتخاب می کنم.

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

توسعه دهنده شخصی است که نباید فقط به یک زبان‌ برنامه نویسی اکتفا کند چرا که برای توسعه محصول حتما باید از چند زبان برنامه نویسی مورد نیاز در پروژه اطلاعات کاملی داشته و بتواند هر جا که نیاز بود کُد‌های مورد نیاز را توسعه و به نتیجه نهایی تبدیل کند. توجه داشته باشید که یک تیم شامل چندین توسعه دهنده به عنوان یک تیم کاملا حرفه ای و زبان زد محسوب می‌شوند برای مثال شرکت‌های بسیار بزرگ نه تنها برنامه نویسان حرفه ای در تیم خود استخدام می‌کنند بلکه توسعه دهندگانی را از نوع (Full-Stack) در اختیار دارند که مدیریت ارشد پروژه را به عهده گرفته و پروژه را با دانشی که دارد به خوبی مدیریت می‌کند و زمانی که جایی پروژه به نکته ای برسد که برنامه نویسان توانایی حل آن را ندارند توسعه دهنده فول-استک می‌تواند با مهارت‌ها و تجربیات خود آن را حل کند. در رابطه با برنامه‌نویسان فول استک و دیگر موارد نیز توضیح داده خواهد شد.

 

توسعه دهندگان فرانت-اند (UI/UX)

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

 

توسعه دهندگان بَک-اند

این نوع توسعه‌ دهندگان برنامه نویسان بسیار ماهری در بخش لایه‌های زیرین پروژه یعنی (منطقی) دارند که تمامی اطلاعات لازم را در رابطه با لایه‌های زیرین در اختیار دارند و می‌دانند چطور باید با دیتابیس ارتباط برقرار کنند٬ می‌دانند چطور باید با API های سیستم عامل کار کنند و موارد بسیار زیادی که نیاز است در بخش منطقی یک پروژه ایجاد شود را به تنهایی حل و توسعه می‌دهند تا نتایج آن در اختیار توسعه دهنده فرانت اند قرار بگیرد. اما وظیفه ای در رابطه با طراحی تجربه کاربری و یا رابط کاربری نداشته و نمی‌توانند در این بخش مانور دهند. از این نوع توسعه دهندگان تنها می‌توان انتظار نوشتن کُد های بی نقص و عالی را داشت.

 

توسعه دهندگان فول-اِستک

این نوع توسعه‌ دهندگان علاوه بر داشتن مهارت‌های بالای برنامه‌نویسی٬ توسعه دهنده در فرانت اند و بک اند نیز هستند تجربیات و مهارت های بسیار زیادی در شاخه‌های دیگر علوم مهندسی کامپیوتری را دارند که نکته بسیار مهمی است! رسیدن به این درجه از برنامه نویسی یعنی یک مهندس کامل کامپیوتر که می‌تواند در تمامی بخش‌های یک پروژه در لایه‌های مختلف نرم‌افزار٬ سخت‌افزار٬ شبکه٬ پلتفرم‌ها و ... صاحب نظر باشند و آن را توسعه دهند. یک فول استک به تنهایی می‌تواند رهبری یک پروژه را بر عهده بگیرد و درصورتی که نیاز باشد به تنهایی یک پروژه را از صفر تا صد تولید توسعه و اجرا نماید.

 

  • هیچگاه نمی‌توان گفت Full-Stack Software Developer یا Full-Stack Web Developer چرا که فول استک تنها به شخصی گفته می‌شود که بتواند در هر پلتفرمی برنامه خود را در بهترین و بالاترین درجه ممکن توسعه و اجرا کند بنابراین عنوان مناسب در آن Full-Stack Developer است.
  • یک فول استک در چند روز یا چند ماه به درجه فول استک نمیرسد. لازم است سال‌ها تجربه و مطالعه بر روی مباحث تخصصی به صورت عملی داشته باشد که در صورت جدا سازی این دو گزینه رسیدن به این عنوان غیر ممکن است.
  • افراد فول استک معمولا خود صاحب کار خود هستند و ممکن است بسیاری از آن‌ها برای خود سازمان و یا شرکتی را در اختیار داشته باشند که در این صورت نمی‌توان با این نوع توسعه دهندگان وارد مذاکره جهت استخدام به عنوان یک بخشی از توسعه پروژه شد.

 

اگر بر اساس درجه بندی عناوین ذکر شده را مشخص کنیم به صورت زیر خواهند بود:
  • توسعه دهنده فول-اِستک
    • تجربه : بسیار بالا
    • مهارت برنامه‌نویسی: به صورت پیشفرض بالا (متناسب با نوع تجربه) متغیر است در بعضی افراد پایین٬ متوسط٬ بالا و بسیار بالا می‌باشد
    • توانایی توسعه در لایه‌های مختلف: بله
    • آشنایی با لایه‌های مختلف مهندسی کامپیوتر(شبکه٬ سیستم‌عامل٬ سخت‌افزار و ...): بالا
    • قابلیت آنالیز و حل مسائل در صورت بروز مشکل نا مشخص در پروژه: بسیار بالا
  • توسعه دهنده
    • تجربه : بالا
    • مهارت برنامه‌نویسی : بسیار بالا
    • توانایی توسعه در لایه‌های مختلف : خیر
    • آشنایی با لایه‌های مختلف مهندسی کامپیوتر (شبکه٬ سیستم‌عامل٬ سخت‌افزار و ...): خوب
    • قابلیت آنالیز و حل مسائل در صورت بروز مشکل نا مشخص در پروژه: متوسط
  • برنامه‌نویس
    • تجربه : خوب
    • مهارت برنامه‌نویسی : بالا
    • توانایی توسعه در لایه‌های مختلف : خیر
    • آشنایی با لایه‌های مختلف مهندسی کامپیوتر(شبکه٬ سیستم‌عامل٬ سخت‌افزار و ...): پایین
    • قابلیت آنالیز و حل مسائل در صورت بروز مشکل نا مشخص در پروژه: پایین
  • کُدر‌(کد‌نویس)
    • تجربه : بسیار پایین :|
    • مهارت برنامه‌نویسی : ندارد :|
    • توانایی توسعه در لایه‌های مختلف : خیر :|
    • آشنایی با لایه‌های مختلف مهندسی کامپیوتر(شبکه٬ سیستم‌عامل٬ سخت‌افزار و ...): ندارد :|
    • قابلیت آنالیز و حل مسائل در صورت بروز مشکل نا مشخص در پروژه: ندارد :|

 

با توجه به تعاریف مرتبط با عناوین باید سعی کنیم که از اصطلاحات صحیح و عناوین مرتبط با خود استفاده کنیم چرا که در صورتی که شما یک برنامه‌نویس هستید نباید بگویید من یک توسعه دهنده وب هستم! این کار باعث ایجاد انتظار از شما خواهد شد که به احتمال بسیار زیاد توانایی انجام آن را نخواهید داشت. حتی برعکس آن ممکن است شما یک توسعه دهنده باشید اما بگویید یک کُدر حرفه ای هستم! در این صورت درجه تخصصی خود را به شدت تنزل داده اید.

بر اساس این تعاریف ارزش و کیفیت کار هر یک از گروه‌های برنامه نویسی متفاوت است و نباید انتظار برود که دست مزد یک فول استک با یک کُدر برابری کند!!!


منبع: dotwaves


<p>کامبیز اسدزاده٬ برنامه‌نویس و کارآفرین حوزه‌ی مهندسی کامپیوتر و فناوری‌های مرتبط با آن است. او موسس شرکت دات‌ویوز و بنیان گذار جامعه برنامه نویسی مدرن استارتاپی ایران بوده و یک توسعه دهنده فول‌اِستَک است و علاقه شدیدی به علوم فیزیک کوآنتومی و فناوری چند سکویی دارد. همچنین او معتقد است که هیچ چیز ارزشمندی آسان به دست نمی آید. تنها راه رسیدن به نتایج خوب و ماندگار، کار و تلاش مستمر است.</p>
اگر این مطلب برای شما مفید بوده آن را با دوستانتان به اشتراک بگذارید:

آخرین بازدید نظرات

تاکنون هیچ نظری از طرف کسی نوشته نشده است !

حروفي را که ميبينيد تايپ کنيد
اضافه کردن نظر