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

در این پست قصد داریم با اصطلاحاتی آشنا شویم که ممکن برای اکثر افراد غیرمتخصص و گاه متخصص نیز سوال باشد که این عنوانها (کدنویس،برنامه نویس،توسعه دهنده)به چه کسانی با چه تخصص های گفته می شود.ما به عنوان صاحب “عنوان تخصص” خود باید بدانیم که دارای چه مهارت‌هایی هستیم و در دنیای فناوری تحت چه عنوانی باید خود را در زمینه تخصصی معرفی کنیم.(دوره های آموزش برنامه نویسی کدفرند).در این مقاله تصمیم گرفتیم تفاوت‌های بین کدنویس (Coder)٬ برنامه‌نویس (Programmer) و توسعه‌دهنده (Developer) را مشخص کنیم. بنابراین به ترتیب عناوین هر یک از آن‌ها را توضیح و در رابطه با نکات مهم متمایز کننده آن‌ها اشاره خواهیم کرد.1.کدنویس (Coder)کد نویس به کسی گفته می‌شود که می‌تواند بدون داشتن مهارت خاص یا حتی رشته مرتبط کد نویسی کند و نیاز به دانش تخصصی و واقعی علوم کامپیوتری ندارد. معمولا کسانی که دارای تخصص دیگری هستند اما آشنا به منطق برنامه نویسی نیستند کُدر می‌گویند. برای مثال تغییر دادن و یا ویرایش کد‌های از قبل نوشته شده و حتی ایجاد نمونه ای از کدهایی موجود به صورت (کپی) که می‌تواند نتیجه ای به صورت کار بر روی یک سیستم نرم افزاری بر روی وب مانند WordPress یا غیره شود که با کمی تغییرات بر اساس نیاز پروژه خود را به صورت نه چندان حرفه ای ایجاد و توسعه نمایند. اصطلاح درست این نوع اشخاص کُدر می‌باشد.2.برنامه‌نویس (Programmer)برنامه‌نویس به کسی گفته می‌شود که توانایی و تخصص مرتبط با برنامه‌نویسی و علوم کامپیوتری را دارد. به عنوان مثال یک مهندس نرم‌افزار از شاخه مهندسی کامپیوتر که با منطق برنامه نویسی آشنا است برنامه نویس محسوب می‌شود. برنامه‌نویس می‌تواند برنامه ای را تحت یکی از زبان‌های برنامه نویسی که خود آن را ترجیح می‌دهد برنامه نویسی کند. مثلا کلاسی را طراحی و پیاده سازی کرده و توابع مورد نیاز خود را در آن ایجاد و توسعه دهد.برنامه نویس می‌داند در کجا باید از چه نوع دستورات و توابعی استفاده کند تا کد نهایی او نتیجه ای ایجاد کند که از آن انتظار می‌رود. یک برنامه نویس توانایی این را دارد که کُد های نوشته شده توسط دیگر برنامه نویسان را بخواند٬ درک کند و حتی آن‌ها را ویرایش کند.توجه داشته باشید که یک برنامه نویس توانایی کنترل و هندل کردن بخش دیگری از پروژه را ندارد. برای مثال اگر قرار است پروژه ای را طراحی و توسعه نمایید برنامه نویس بخش بَک-اِند توانایی مدیریت بخش فرانت-اند را ندارد و برعکس. بنابراین برنامه نویسان تنها کُدهایی را می‌نویسند که قرار است در بخش مورد نیاز عملیاتی را انجام دهند و کاری به این ندارند که طراحی رابط کاربری تحت چه نوع فناوری و زبانی در حل توسعه است و یا ارتباط با پایگاه داده چگونه صورت می‌گیرد چرا که برنامه نویسان مرتبط با آن بخش‌ها با استفاده از مهارت های تخصصی خود در آن بخش آن را هندل خواهند کرد. برنامه‌نویسان معمولا تیم‌های توسعه یک محصول را ایجاد می‌کنند و همگی آن‌ها وابسته یکدیگر هستند بنابراین اگر برنامه نویس واحد بک اند شما نتواند به موقع کد های مورد نیاز بخش فرانت اند شما را آماده و تحویل دهد پروژه شما در زمان تعیین شده به نتیجه مطلوبی نخواهد رسید.3.توسعه دهنده (Developer)در رابطه با توسعه‌دهنده باید به این توجه داشته باشید که توسعه‌دهنده به تنهایی عنوان نمی‌شود. بنابراین توسعه دهنده به صورت‌های مختلفی وجود دارند (توسعه‌دهنده وب٬ توسعه‌دهنده نرم‌افزار٬ توسعه‌دهنده موبایل که در رابطه با نوع پلتفرم باز متفاوت هستند٬ توسعه دهنده رابط کاربری٬ توسعه دهنده تجربه کاربری و در نهایت توسعه دهنده فول-استک).توسعه‌دهنده کسی است که علاوه بر برنامه‌نویس بودن مهارت و دانش کافی در لایه‌های مختلف پروژه در اختیار داشته باشد که متناسب با نوع تخصص نیز متفاوت است. توسعه دهنده کسی است که می‌تواند بر اساس نوع پروژه وظایف خاصی را در اختیار بگیرد به عنوان مثال اگر به صورت تیمی بر روی یک پروژه کار می‌کنید که شامل برنامه نویس هایی است که هر کدام بخشی از پروژه را برنامه‌نویسی می‌کنند کافی است یک توسعه دهنده داشته باشید تا تمامی کُد های شما را آنالیز٬ اشکال زدائی و بررسی کند و در نهایت آن‌ها را با یکدیگر ارتباط داده و تبدیل به یک پروژه قابل استفاده نماید. چرا که توسعه دهنده دانش مورد نیاز در لایه‌های مختلف را دارد و میداند بخش های مختلف یک محصول نرم‌افزاری یا … چگونه است و چطور باید برنامه نویسی شوند.توسعه دهنده شخصی است که نباید فقط به یک زبان‌ برنامه نویسی اکتفا کند چرا که برای توسعه محصول حتما باید از چند زبان برنامه نویسی مورد نیاز در پروژه اطلاعات کاملی داشته و بتواند هر جا که نیاز بود کُد‌های مورد نیاز را توسعه و به نتیجه نهایی تبدیل کند. توجه داشته باشید که یک تیم شامل چندین توسعه دهنده به عنوان یک تیم کاملا حرفه ای و زبان زد محسوب می‌شوند برای مثال شرکت‌های بسیار بزرگ نه تنها برنامه نویسان حرفه ای در تیم خود استخدام می‌کنند بلکه توسعه دهندگانی را از نوع (Full-Stack) در اختیار دارند که مدیریت ارشد پروژه را به عهده گرفته و پروژه را با دانشی که دارد به خوبی مدیریت می‌کند و زمانی که جایی پروژه به نکته ای برسد که برنامه نویسان توانایی حل آن را ندارند توسعه دهنده فول-استک می‌تواند با مهارت‌ها و تجربیات خود آن را حل کند. در رابطه با برنامه‌نویسان فول استک و دیگر موارد نیز توضیح داده خواهد شد.4.توسعه دهندگان فرانت-اند (UI/UX)این نوع توسعه دهندگان برنامه نویسانی هستند که مهارت کاملی در رابطه با لایه‌های مختلف و چندین زبان و فناوری‌های مورد نیاز در بخش User Interface و User Experiance را دارند و می‌توانند طراحی مناسبی را متناسب با نوع پروژه و تجریبات مشتری ایجاد و توسعه دهند. این نوع برنامه‌نویسان یکی از مهمترین بخش‌های توسعه دهندگان در تیم محسوب می‌شوند که شاید تجربیات و بازخورد‌های مشتری را به سمت این نوع توسعه دهنده ارسال کنند. این نوع توسعه دهندگان علاوه بر داشتن دانش طراحی و تجربه کاربری دانش مرتبط با روانشناسی رنگ‌ها و جلوه‌های بصری دارند که آن‌ها را می‌توانند در قالب برنامه نویسی پیاده سازی کنند.5.توسعه دهندگان بک-انداین نوع توسعه‌ دهندگان برنامه نویسان بسیار ماهری در بخش لایه‌های زیرین پروژه یعنی (منطقی) دارند که تمامی اطلاعات لازم را در رابطه با لایه‌های زیرین در اختیار دارند و می‌دانند چطور باید با دیتابیس ارتباط برقرار کنند٬ می‌دانند چطور باید با API های سیستم عامل کار کنند و موارد بسیار زیادی که نیاز است در بخش منطقی یک پروژه ایجاد شود را به تنهایی حل و توسعه می‌دهند تا نتایج آن در اختیار توسعه دهنده فرانت اند قرار بگیرد. اما وظیفه ای در رابطه با طراحی تجربه کاربری و یا رابط کاربری نداشته و نمی‌توانند در این بخش مانور دهند. از این نوع توسعه دهندگان تنها می‌توان انتظار نوشتن کُد های بی نقص و عالی را داشت.6.توسعه دهندگان فول-استکاین نوع توسعه‌ دهندگان علاوه بر داشتن مهارت‌های بالای برنامه‌نویسی٬ توسعه دهنده در فرانت اند و بک اند نیز هستند تجربیات و مهارت های بسیار زیادی در شاخه‌های دیگر علوم مهندسی کامپیوتری را دارند که نکته بسیار مهمی است! رسیدن به این درجه از برنامه نویسی یعنی یک مهندس کامل کامپیوتر که می‌تواند در تمامی بخش‌های یک پروژه در لایه‌های مختلف نرم‌افزار٬ سخت‌افزار٬ شبکه٬ پلتفرم‌ها و … صاحب نظر باشند و آن را توسعه دهند. یک فول استک به تنهایی می‌تواند رهبری یک پروژه را بر عهده بگیرد و درصورتی که نیاز باشد به تنهایی یک پروژه را از صفر تا صد تولید توسعه و اجرا نماید.درجه بندی عناوین ذکر شده:توسعه دهنده فول استک:تجربه : بسیار بالامهارت برنامه‌نویسی: به صورت پیشفرض بالا (متناسب با نوع تجربه) متغیر است در بعضی افراد پایین٬ متوسط٬ بالا و بسیار بالا می‌باشدتوانایی توسعه در لایه‌های مختلف: بلهآشنایی با لایه‌های مختلف مهندسی کامپیوتر(شبکه٬ سیستم‌عامل٬ سخت‌افزار و …): بالاقابلیت آنالیز و حل مسائل در صورت بروز مشکل نا مشخص در پروژه: بسیار بالاتوسعه دهنده:تجربه : بالامهارت برنامه‌نویسی : بسیار بالاتوانایی توسعه در لایه‌های مختلف : خیرآشنایی با لایه‌های مختلف مهندسی کامپیوتر (شبکه٬ سیستم‌عامل٬ سخت‌افزار و …): خوبقابلیت آنالیز و حل مسائل در صورت بروز مشکل نا مشخص در پروژه: متوسطبرنامه نویس:تجربه : خوبمهارت برنامه‌نویسی : بالاتوانایی توسعه در لایه‌های مختلف : خیرآشنایی با لایه‌های مختلف مهندسی کامپیوتر(شبکه٬ سیستم‌عامل٬ سخت‌افزار و …): پایینقابلیت آنالیز و حل مسائل در صورت بروز مشکل نا مشخص در پروژه: پایینکدنویس:تجربه : بسیار پایینمهارت برنامه‌نویسی : ندارد توانایی توسعه در لایه‌های مختلف : خیر آشنایی با لایه‌های مختلف مهندسی کامپیوتر(شبکه٬ سیستم‌عامل٬ سخت‌افزار و …): نداردقابلیت آنالیز و حل مسائل در صورت بروز مشکل نا مشخص در پروژه: نداردبا توجه به تعاریف مرتبط با عناوین باید سعی کنیم که از اصطلاحات صحیح و عناوین مرتبط با خود استفاده کنیم چرا که در صورتی که شما یک برنامه‌نویس هستید نباید بگویید من یک توسعه دهنده وب هستم! این کار باعث ایجاد انتظار از شما خواهد شد که به احتمال بسیار زیاد توانایی انجام آن را نخواهید داشت. حتی برعکس آن ممکن است شما یک توسعه دهنده باشید اما بگویید یک کُدر حرفه ای هستم! در این صورت درجه تخصصی خود را به شدت تنزل داده اید.