توسعه نرمافزار چیست؟
پاسخ به سوال "توسعهدهنده نرمافزار چه کاری انجام میدهد؟" بسیار واضح است: توسعهدهنده نرمافزار برنامههای نرمافزاری را توسعه میدهد. مسأله این است که بسیاری از افراد خارج از صنعت فناوری اطلاعات این را نمیدانند که توسعه نرمافزار چیست.
به طور کلی، توسعه نرمافزار گاهی اوقات به عنوان "فرآیندی که توسط یک نرمافزار مستقل یا منحصربهفرد با استفاده از یک زبان برنامهنویسی خاص تولید میشود" تعریف میشود. این فرآیند را میتوان به مراحل مختلفی از جمله: درک اولیه، مشخصسازی، طراحی، برنامهنویسی، مستندسازی، تست و رفع اشکال تقسیم کرد. روشهای متعددی برای توسعه نرمافزار وجود دارد که این مراحل را سازماندهی میکند.
در گذشته، نرمافزار به طور معمول با استفاده از مدل آبشاری (waterfall) توسعه داده میشد، که توسعه نرمافزار را به مراحل متوالی خطی تجزیه میکند، جایی که هر مرحله بستگی به تحویل مرحله قبلی دارد. امروزه توسعه نرمافزار سریعالعمل (Agile) رویکرد غالب برای توسعه نرمافزار است، و به همکاری و تلاش تیمهای چند وظیفهای و خودسازماندهی اهمیت میدهد و بر ایده توسعه مکرر تمرکز دارد.
توسعهدهندگان نرمافزار با استفاده از انواع زبانهای برنامهنویسی برنامههای نرمافزاری را توسعه میدهند که هر یک برای کارهایی که کمی با هم متفاوت هستند مناسب میباشد. با توجه به جستجوهایی که برای زبانهای برنامهنویسی در گوگل انجام میشود میتوان گفت در حال حاضر محبوبترین زبان برنامهنویسی پایتون است.
توسعه نرمافزار به طور مداوم در حال پیشرفت است، و توسعهدهندگان نیز با آن پیشرفت میکنند. در حالی که اصول کلی توسعه نرمافزار نسبتا پایدار است، توسعهدهندگان نرمافزار باید وضعیت مداوم یادگیری و بهبود خود را حفظ کنند تا رقابتی و قابل استخدام باقی بمانند.
مقایسه بین توسعهدهندگان نرمافزار، برنامهنویسان، مهندسان نرمافزار و کدنویسان
اگر توسعهدهنده نرمافزار شخصی است که برنامههای نرمافزاری را توسعه میدهد، پس برنامهنویسان، مهندسان نرمافزار و کدنویسان چه کسانی هستند؟ آیا آنها فقط نامهای متفاوتی برای همین حرفه دارند یا تفاوتهای مهمی بین آنها وجود دارد؟
حقیقت این است که این چهار اصطلاح غالبا به صورت متقابل مورد استفاده قرار میگیرند، هم توسط افرادی که جزئی از صنعت IT هستند و هم کسانی که در این صنعت نیستند. اگر میخواهید در مورد این چهار اصطلاح واقعا بدانید میتوانید آنها را به این صورت تعریف کنید:
توسعهدهنده نرمافزار: شخصی که برنامههای نرمافزاری را از ابتدا تا انتها ایجاد میکند.
برنامهنویس: اصطلاح قدیمیتر برای توسعهدهنده نرمافزار.
مهندس نرمافزار: شخصی که اصول مهندسی نرمافزار را برای توسعه نرمافزار اعمال میکند. به گفته Bureau of Labor Statistics، مهندسی نرمافزار کاربرد سیستماتیک دانش علمی و تکنولوژیکی، روشها و تخصص در طراحی، پیادهسازی، تست و مستندسازی نرمافزار است.
کدنویس: هر کسی که کد نرمافزار را مینویسد. کدنویس اغلب بخشهای کوچکی از برنامههای بسیار بزرگتر را مینویسد. شما همچنین ممکن است کسی را کدنویس بنامید که از یک زبان نشانهگذاری مثل HTML به جای زبان برنامهنویسی مثل جاوااسکریپت استفاده میکند.
انواع توسعهدهندگان نرمافزار
درست مانند مربیان هنر و موسیقی، مربیان زبان، یا معلمان زیستشناسی، توسعهدهندگان نرمافزار نیز انواع مختلفی دارند، و هر کدام از آنها مسائل خاصی را حل میکنند و دارای دانش خاصی میباشند.
توسعهدهندگان Front-end
در توسعه نرمافزار، front-end بخشی از برنامه نرمافزاری است که شما میبینید و با آن تعامل دارید. مثلا file manager میتواند به عنوان front-end برای فایل سیستم باشد که نحوه ذخیرهسازی و بازیابی دادهها را کنترل میکند. خود file manager درک نمیکند که چگونه دادهها را ذخیره و بازیابی میکند؛ فقط میداند چگونه با فایل سیستم بر اساس ورودیی که از کاربر دریافت میکند ارتباط برقرار کند.
توسعهدهندگان front-end معمولا درک بسیار عمیقی از نظریه علوم رایانه ندارند. در عوض، تخصص آنها در فریمورکهای متعدد جاوااسکریپت، HTML، CSS، طراحی تجربه کاربری و طراحی رابط کاربری است.
توسعه front-end یک زیرمجموعه بسیار پویا از توسعه نرمافزار، با تکنولوژیها و فریمورکهای جدید که همیشه منتشر میشوند است و انتظارات کاربر نیز با همان سرعت بیشتر میشود. توسعهدهندگان خوب front-end حلکنندگان فوقالعاده مسائل هستند و عاشق یادگیری چیزهای جدید و اعمال آنها برای پاسخگویی به نیازهای کاربران میباشند.
توسعهدهندگان Back-end
اگر file manage، front-end باشد، پس میتوانیم بگوییم که فایل سیستم back-end ی file manage است، زیرا ذخیرهسازی دادهها را مدیریت میکند. در واقع توسعهدهندگان back-end در ساخت و نگهداری زیرساختهای منطقی تخصص دارند.
وقتی شما گوگل را در مرورگر وب باز میکنید، یک نوار جستجوی ساده را همراه با دو دکمه و چند گزینه اطراف آن میبینید. با این وجود، در پشت این نوار جستجوی ساده یک سیستم پیچیده ذهنی وجود دارد که توسط توسعهدهندگان back-end ایجاد شده است و هدف آن crawl کردن وب، ایندکس کردن آن، و بازیابی دقیقترین نتایج جستجو است.
سیستم پشت پرده صفحه جستجوی گوگل با زبانهای پایتون، جاوا و C++ نوشته شده است، که سه تا از محبوبترین زبانهای برنامهنویسی back-end هستند. سایر زبانهای برنامهنویسی محبوب back-end عبارتند از C#, PHP, Ruby, Rust و غیره. توسعهدهندگان back-end علاوه بر مسلط بودن به یک یا چند مورد از این زبانها، با پایگاههای داده، سیستمهای caching و سرورها کار میکنند.
توسعهدهندگان Full-stack
توسعهدهنده نرمافزاری که هم مهارتهای توسعه front-end و هم مهارتهای توسعه back-end را بلد باشد توسعهدهنده full-stack نامیده میشود. چندی پیش تمام توسعهدهندگان نرمافزار توسعهدهندگان full-stack بودند، اما با افزایش پیچیدگیهای نرمافزاری و رشد تیمهای توسعه نرمافزار، تقاضا برای توسعهدهندگان full-stack کاهش یافته است.
توسعهدهندگان دسکتاپ
توسعهدهندگان دسکتاپ برنامههای نرمافزاری را برای سیستم عاملهای سرور و دسکتاپ مثل Windows، macOS، Linux توسعه میدهند. سالهاست که توسعه برنامههای دسکتاپ در صنعت IT حاکم شده است، اما تقاضا برای برنامههای دسکتاپ به دلیل بالا رفتن اینترنت و دستگاههای تلفن همراه، طی دو دهه گذشته به طور چشمگیری کاهش یافته است.
توسعهدهندگان دسکتاپ معمولا از C++، جاوا، سیشارپ یا پایتون استفاده میکنند که همگی از کتابخانههای مختلف برای توسعه رابطهای گرافیکی کاربر (GUI) برای برنامههای دسکتاپ استفاده میشوند. با این حال، اکنون میتوان با استفاده از فناوریهای وب مانند JavaScript، HTML و CSS برنامههای دسکتاپ کاملا برجسته ایجاد کرد.
توسعهدهندگان وب
توسعهدهندگان وب توسعهدهندگان نرمافزار هستند که در توسعه وبسایتها تخصص دارند. در اواخر دهه 90 و اوایل دهه 2000 وبسایتها بسیار سادهتر از آنچه امروزه هستند بودند. با گذشت سالها، وبسایتها پیچیدهتر شدهاند.
در حالی که دانش HTML و CSS هنوز لازم است، باید توسعهدهندگان وب در زمینههای جاوااسکریپت، پایگاه داده، طراحی وب، طراحی تجربه کاربری، زبانهای برنامهنویسی و بهینهسازی موتور جستجو مهارت داشته باشند. هنگام توسعه وبسایتهای بزرگتر و پیچیدهتر، توسعهدهندگان وب نقشهای خود را بین front-end و back-end تقسیم میکنند.
توسعهدهندگان موبایل
تقاضا برای توسعه موبایل با ظهور تلفنهای هوشمند و تبلتها زیاد شده است. امروزه دو سیستم عامل موبایل، اندروید و iOS، بر دیگر سیستم عاملهای موبایل برتری دارند و هر یک از این سیستم عاملها از زبانهای برنامهنویسی، فریمورکها و محیطهای توسعه گوناگون پشتیبانی میکنند. توسعهدهندگان تلفن همراه این موارد را میآموزند تا برنامههای موبایل را بسازند، که گاهی اوقات به گونهای طراحی میشوند که حتی با سیستم عاملهای دسکتاپ هم سازگار هستند.
توسعهدهنده نرمافزار علاوه بر نوشتن کد چه کاری انجام میدهد؟
علاوه بر نوشتن کد، توسعهدهندگان نرمافزار مسئولیتهای دیگری نیز دارند:
خواندن کد دیگران: دلیل اینکه توسعهدهندگان نرمافزار وقت زیادی را صرف خواندن کد دیگران میکنند ساده است؛ برنامههای نرمافزاری واقعی محصولات پیچیدهای از تیمهای بزرگ توسعه نرمافزار هستند، و غیرممکن است کسی بدون تلاش برای درک آن بتواند وارد آن شود. خواندن کد دیگران نیز راهی عالی برای بهبود مهارتهای شخصی برای توسعه نرمافزار است.
مستندسازی کد: توسعهدهنده نرمافزار باید کد خودش را درک کند، تا بتواند هفتهها، ماهها و سالها بعد آن را بفهمد. به همین دلیل است که توسعهدهندگان حرفهای وقت زیادی را صرف نوشتن کامنتها و مستندات واضح میکنند. با داشتن مستندسازی خوب، توسعهدهندگان میتوانند زمینههای بالقوه پیشرفت را شناسایی کنند، که به آنها کمک میکند کدی را تولید کنند که به خوبی کار میکند.
تست کد: تست یک بخش مهم از توسعه نرمافزار است، و همه توسعهدهندگان کد خود را تست میکنند. درست مانند نویسندگان که نوشتههای خود را برای شناسایی اشتباهات گرامری و خطاهای نحوی میخوانند.
شرکت در جلسات: توسعه نرمافزار مدرن تلاشی بر پایه همکاری است، و جلسات به کل تیم کمک میکند تا همه در یک مسیر بمانند و تمام اهداف را تکمیل کنند. تیمهای خوب جلسات بسیار کوتاه روزانه برگزار میکنند که به ندرت بیش از 15 دقیقه طول میکشد. البته توسعهدهندگان نرمافزار با همکاران خود در Slack و سایر پلتفرمهای همکاری تیمی در تماس هستند، تنها در صورتی که بخواهند بدانند هر کسی چگونه کار میکند و برای بالا بردن روحیه تیم جلسه میگذارند.
کمک کردن: توسعهدهندگان ارشد در یادگیری و رشد شغلی، به توسعهدهندگان تازهکار کمک میکنند و دانش خود را با آنان به اشتراک میگذارند، به آنها مشاوره میدهند و به سوالاتشان پاسخ میدهند. این روزها بسیاری از شرکتهای توسعه نرمافزار حتی برنامههای کمک و همکاری دارند، اما گاهی اوقات این روند به هیچ وجه رسمی نمیَشود.
جمعبندی
برنامههای نرمافزاری به بخش جداییناپذیر از زندگی روزمره ما تبدیل شدهاند و روز به روز تقاضا برای آنها بیشتر میشود. در این مقاله ما این سوال را مطرح کردیم که توسعهدهنده نرمافزار چه کاری انجام میدهد و توضیح دادیم که در حال حاضر انواع مختلفی از توسعهدهندگان وجود دارند که هر یک با مجموعهای از مهارتها و مسئولیتهای خاص مشخص میشوند.
نظرات کاربران در رابطه با این دوره