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