چشمانداز توسعهی نرمافزاری پیوسته در حال تغییر است. هر چند ماه یکبار حوزهی جدید از تخصص، فناوری پا به عرصهی حضور میگذارند که توسط نوآوری صنعت نرمافزار ایجاد شدهاند.
مطالعه نمایید: پرسش و پاسخهای متداول در ارتباط با باج افزار(RANSOMWARE)
به همین ترتیب اصطلاحاتی که برنامه نویسها یا توسعه دهندگان مختلف را در بخش غیررسمی این صنعت توصیف میکنند روزبهروز بیشتر میشوند و در تبلیغات و آگهیهای استخدام ظاهر میشوند.
مطالعه نمایید: ۷ ویروس رایانهای که باید بشناسید
قبل از ظهور اینترنت این اصطلاحات حتی وجود هم نداشتند. شبکهی گستردهی جهانی بسیاری از جوانب زندگی ما را تغییر داده است که این تغییر در مسیرهای شغلی هم ایجاد شده است.
واژهنامهای رسمی برای اصطلاحات این صنعت وجود ندارد. شناختن مهارتهایی که هر توسعهدهنده باید داشته باشد برای تازهکارها سخت است. شناختن همین مهارتها میتواند برای افراد غیر فنی ترسناک هم باشد.
مطالعه نمایید: هرزنامه را چطور تشخیص دهیم
در این پست قصد داریم 19 نوع رایج توسعهدهنده (developers) را با توصیف کوتاهی تعریف کنیم و فهرستی از فناوریهای مورداستفادهی آنها و مهارتهای لازم آنها را ذکر نماییم. تعریفی که ارائه میدهیم به درک حرفهای ما ربط دارد و ممکن است در شرکتها، مناطق و صنعتهای مختلف متفاوت باشد.
مطالعه نمایید: خطرات نداشتن آنتی ویروس
در ادامه فقط به توصیف توسعهدهندگان مختلف میپردازیم و کاری به مهندسین نرمافزار یا مدیریتهای مهندسی نداریم:
۱. برنامه نویس فرانت-اند Front-end Developer
برنامه نویس فرانت-اند یا بهعبارتدیگر توسعهدهندهی سمت کاربر، فردی است که در برنامهنویسی عوامل بصری مرتبط به کاربر تخصص دارد که شامل زیباییشناسی و طرحبندی میشود. کدی که توسعهدهندهی فرانت-اند مینویسد در مرورگر کاربر وجود دارد و روی سایت دیده میشود.
این کار معمولاً خیلی سطح بالاست و از سختافزار فاصله دارد. در این شاخه بیشتر از تئوری علمی کامپیوتر به درک درستی از رابطهی انسان و ماشین نیاز دارد. بیشتر زندگی یک توسعهدهندهی Front-end درگیر مشکلات سازگاری میان مرورگری و بهینهسازی جزئیات دقیق نمایش بصری UI است.
مهارتهای لازم برای توسعهدهندهی Front-end شامل طراحی UI، UX، CSS، JavaScript، HTML و مهارتهای لازم مجموعهی UI میشود.
۲.برنامه نویس بک-اند Backend Developer
توسعهدهندهی بک-اند یا بهعبارتدیگر توسعهدهندهی سمت سرور، فردی است که در طراحی، پیادهسازی، منطق هستهی عملکردی، عملکرد و مقیاسپذیری یک قطعه نرمافزار یا سیستم در حال اجرا بر روی ماشینهایی تخصص دارد که با کاربر نهایی ارتباط مستقیم ندارند.
سیستمهای بک-اند ممکن است بسیار پیچیده باشند ولی پیچیدگی آنها معمولاً برای کاربران قابلمشاهده نیست. بهعنوانمثال موتور جستوجوی گوگل را در نظر بگیرید. بخش نهایی آن با یک عنوان UI، یک کادر متن و دو یا سه دکمه خیلی ساده است. بخش پایهای و ساختاری آن یک سیستم بهشدت پیچیده است که میتواند در نت بچرخد، آن را فهرستوار کند و با کمک صفی از سازوکارهای پیچیده نتیجهای را بیابد که به دنبال آن میگشتید.
یک برنامه نویس بک-اند با زبانهای برنامهریزی مانند Java، C، C++، Ruby، Perl، Python، Scala، Go و غیره سروکار دارد. توسعهدهندگان بک-اند اغلب با تعداد زیادی از خدمات مانند دیتابیسها، سیستمهای ذخیرهی اطلاعات، سیستمهای ذخیرهسازی، سیستمهای ثبت، سیستمهای ایمیل و غیره در ارتباط هستند.
۳. برنامه نویس فول-استک Full-stack Developer
این برنامه نویس فردی است که هم کار توسعهدهندگان بک-اند و هم کار توسعهدهندگان فرانت-اند را انجام میدهد. این فرد باید دارای قابلیتها و دانش آن دو فرد دیگر باشد تا بتواند یک وبسایت را بهصورت کامل به کاربری برساند.
۴. برنامه نویس لایه میانی Middle-Tier Developer
این برنامه نویس فردی است که کد non-UI را مینویسد که در مرورگری اجرا میشود و اغلب با کد non-core در حال اجرا روی یک سرور سروکار دارد. در کل این نوع برنامه نویس بهعنوان لولهکش سیستم محسوب میشود.
اصطلاح برنامه نویس لایه میانیبرای توصیف کسی ابداع شده است که نه میتواند توسعهدهندهی بک-اند باشد و نه توسعهدهندهی فرانت-اند، بلکه میتواند کمی از هردو باشد و درعینحال توسعهدهندهی کامل هم نباشد. مهندسین کمی هستند که چنین عنوان شغلی خاصی دارند چراکه این عنوان بیشتر برای توصیف مجموعهای از قابلیتها به کار میرود تا یک کار!
۵. برنامه نویس وب Web Developer
برنامه نویس وب فردی است که در ساختن وبسایت تخصص دارد. این فرد میتواند توسعهدهندهی فرانت-اند ( بهعبارتدیگر توسعهدهندهی سمت کاربر)، توسعهدهندهی بک-اند ( بهعبارتدیگر توسعهدهندهی سمت سرور)، توسعهدهندهی فول-استک یا توسعهدهندهی متوسط باشد.
توسعهی وبسایت راه معمولی بود که فردی خود را در دههی نود و 2000 وارد دنیای مهندسی نرمافزار کند. نیاز به علم کمی دارد و فقط دانستن HTML و CSS پایهای نیاز است. یک توسعهدهندهی وب تازهکار با چند ماه سابقه میتواند کدی بنویسد که به سیستمهای تولیدی ختم شود. این عنوان یک گزینهی جذاب برای افرادی است که تحصیلات خاصی در این زمینه ندارند و میخواهند به دنیای برنامهنویسی وارد شوند.
۶. برنامه نویس دسکتاپ Desktop Developer
این برنامه نویس فردی است که روی نرمافزارهایی کار میکند که بهصورت پیشفرض روی دسکتاپ سیستمهای عامل (مانند Mac OS، Windows و Linux) اجرا میشوند.
در دههی 80 میلادی این کار یکی از معمولترین عناوین در میان مهندسین بود. این شغل توسط محیطهای توسعهای مانند Turbo Pascal، Turbo C، Visual Basic، Quick C، Visual Studio و Delphi محبوب گشت.
توسعهدهندگان دسکتاپ اغلب از ابزارهای GUI مانند Cocoa، XAML، WinForms، Gtk و غیره استفاده میکنند.
۷. برنامه نویس موبایل Mobile Developer
این برنامه نویس فردی است که برای اپلیکیشنهای گوشیهای هوشمند کد مینویسد که بهصورت پیشفرض روی گوشیها و تبلتها اجرا میشوند. توسعهدهندهی موبایل قبل از سال 2000 و گسترش بازار گوشیهای هوشمند اصطلاحی شنیده نشده بود. پیش از آن توسعهدهندگان موبایل بهعنوان زیرمجموعهای از توسعهدهندگان سیستمهای نهفته محسوب میشدند.
یک برنامه نویس موبایل پیچیدگیهای سیستمهای عامل مانند iOS و Android را میفهمد و از محیطهای مختلف آنها و فریمورکهایشان استفاده میکند تا نرمافزارهایی را برای آنها بسازد. این فریمورکها شامل Java، Swift و Objective-C میشوند.
۸. برنامه نویس (توسعه دهنده) گرافیک Graphics Developer
این برنامه نویس فردی است که در نوشتن نرمافزار برای رندر گرفتن، نورپردازی، سایهپردازی، رندر گرفتن مخصوص به گیم و مدیریت صحنهها تخصص دارد. این توسعهدهندگان اغلب مسئول یکپارچهسازی فناوریها در ساخت یک بازی یا یک محصول ویدئویی هستند.
توسعهدهندهی گرافیک قبلاً نوعی توسعهدهندهی سطح پایین محسوب میشد که نیازمند ریاضی پیشرفته و تمرینهای علم کامپیوتر بود. اما روزبهروز با معرفی سیستمهای جدید و فریمورکهای اوپن سورس، پرداختن به این کار راحتتر میشود. بهعنوانمثال دیگر لازم نیست کسی برای ساخت یک نرمافزار همهچیز را از صفر شروع کند.
فریمورکهایی که این توسعهدهندگان با آنها کار میکنند شامل DirectX، OpenGL، Unity 3D و WebGL هستند. برای توسعهدهندگان گرافیک حرفهایتر، بلد بودن سطحی مقدماتی از C، C++ و Assembly لازم است.
۹. برنامه نویس بازیهای ویدیویی Game Developer
این یک اصطلاح کلی برای توصیف کسی است که در فرایند ساخت بازی تخصص دارد. توسعهدهندگان بازی ممکن است از انواع دیگر توسعهدهندگان هم باشند ولی اغلب تخصص و دانش بالایی در طراحی و پیادهسازی گیم دارند.
فریمورکهای مورداستفادهی توسعهدهندگان بازی شامل DirectX، OpenGL، Unity 3D، WebGL و زبانهایی مانند C، C++ و Java میشوند. Adobe Flash قبلاً بهعنوان پلتفرم بازیهای اینترنتی استفاده میشد. از زمانی که Flash کنار گذاشته شده است از JavaScript و HTML5 بهعنوان استانداردهای جدید استفاده میکنند. روی گوشیهای هوشمند Swift و Java برای ساخت بازیهای iOS و Android استفاده میشوند.
۱۰. دیتا ساینتیست Data Scientist
این توسعهدهنده نرمافزارهایی را طراحی میکند که میتوانند مجموعههای اطلاعاتی را تحلیل کنند. آنها اغلب مسئول تجزیهوتحلیل آماری، یادگیری ماشین، تجسم دادهها و مدلسازی پیشبینیشده هستند.
زبانهای مورداستفادهی دیتا ساینتیستها شامل SQL، R و Python میشوند.
۱۱. برنامه نویس(توسعهدهندهی) اطلاعات حجیم Big Data Developer
این توسعهدهنده فردی است که برنامههایی را طراحی میکند که میتوانند حجمهای بالایی از اطلاعات را در انبارهای اطلاعات، سیستمهای ETL، دیتابیسهای مرتبط، سیستمهای مدیریتی نشت اطلاعاتی و غیره ذخیره کنند.
یک توسعهدهندهی اطلاعات حجیم اغلب با فریمورکها و سیستمهایی آشناست که مخصوص پردازش و ذخیرهی اطلاعات هستند. از این میان میتوان به MapReduce، Hadoop و Spark اشاره کرد. زبانهای مورداستفادهی یک توسعهدهندهی اطلاعات حجیم شامل SQL، Java، Python و R میشوند.
۱۲. برنامه نویس دواپس DevOps Developer
این برنامه نویس فردی است که با فناوریهای لازم برای توسعهی سیستمهایی بهمنظور ساخت، استقرار، ادغام و مدیریت نرمافزارهای بک-اند و سیستمهای توزیعشده آشناست.
فناوریهایی که توسط مهندسین DevOps استفاده میشود شامل Kubernetes، Docker، Apache Mesos، مجموعهی HashiCorp (Terraform, Vagrant, Packer, Vault, Consul, Nomad)، Jenkins و غیره است.
۱۳. برنامه نویس سامانههای مدیریت CRM Developer
این برنامه نویس فردی است که درزمینهی سیستمهایی تخصص دارد که اطلاعات کاربر و مصرفکننده را جمعآوری میکنند. این توسعهدهندگان وظیفه دارند تا تجربهی کاربری و فروش را با بهبود وضعیت نمایندگان پشتیبانی، مدیران حساب و نمایندگان فروش بهتر کنند.
فناوری مورداستفادهی این توسعهدهندگان شامل SAP، Salesforce، Sharepoint، ERP میشود
۱۴. مهندسی توسعهی نرمافزار تست SDET) Software Development Engineer in Test)
این توسعهدهنده مسئول ساخت نرمافزاری است که کیفیت دیگر نرمافزارها را تأیید کند. آنها آزمایشهای خودکار، ابزار و سیستمهایی میسازند تا مطمئن شوند که محصول نهایی بهدرستی کار میکند.
فناوریهای مورداستفادهی SDET شامل Python، Ruby و Selenium میشود.
۱۵. برنامه نویس سیستمهای نهفته Embedded Developer
این برنامه نویس با سختافزاری سروکار دارد که بهصورت عمومی بهعنوان بخشی از کامپیوتر شناخته نمیشود. بهعنوانمثال میکروکنترلر، سیستمهای real-time، رابطهای الکترونیکی، جعبه تنظیم، دستگاههای مصرفکننده، دستگاههای IOT، درایورهای سختافزاری و انتقال دادههای سریالی مربوط به کار این افراد میشوند.
توسعهدهندهی Embedded اغلب با زبانهایی مانند C، C++، Assembly، Java یا فناوریها، فریمورکها و ابزارهای اختصاصی سروکار دارد.
۱۶. برنامه نویس سطح بالا High-Level Developer
این یک اصطلاح برای توصیف فردی است که کدهایی مینویسد که از سختافزار فاصلهی زیادی دارند. این کدها به زبانهای سطح بالا مانند PHP، Perl، Python و Ruby نوشته میشوند. توسعهدهندگان وب اغلب توسعهدهندگان سطح بالا محسوب میشوند اما نه همیشه.
۱۷. برنامه نویس سطح پایین Low-Level Developer
این یک اصطلاح برای توصیف فردی است که کدهایی مینویسد که به سختافزار بسیار نزدیک هستند. این کدها به زبانهای سطح پایین مانند assembly و C نوشته میشوند. توسعهدهندگان Embedded اغلب توسعهدهندگان سطح پایین محسوب میشوند اما نه همیشه.
۱۸. برنامه نویس وردپرس WordPress Developer
برنامه نویس WordPress را در این فهرست میآوریم چون آنها گروهی متخصص از توسعهدهندگان وب هستند. آنها تمها و پلاگینهای WordPress را ایجاد و سفارشی میکنند و سایتهای WordPress را هم اداره میکنند.
این نوع توسعهدهندگان از سیستمهای WordPress، PHP، JavaScript و HTML استفاده میکنند.
۱۹. برنامه نویس امنیتی Security Developer
این نوع برنامه نویس مسئول ساخت ابزار، سیستمها و روشهایی است که با استفاده از آنها امنیت دیگر نرمافزارها مورد آزمایش و بررسی قرار بگیرد. این نوع توسعهدهندگان معمولاً هکرهای کلاهسفید هستند و برای بررسی نقاط ضعف یک سیستم به آن سیستم نفوذ میکنند.
توسعهدهندهی امنیتی اغلب این ابزارها را با زبانهای Python و Ruby طراحی میکند و بهطورکلی از روشهای تهاجمی آگاه است. توسعهدهندگان امنیتی حرفهایتر باید بتوانند کد منبع سیستمهای عامل را بخوانند و متوجه شوند. این کدها به زبان C و C++ نوشته شدهاند. شاید حتی لازم باشد سیستمهای نرمافزاری اقتصادی و کتابخانهای را با مهندسی معکوس بررسی کنند و به دنبال نقاط ضعف بگردند.
نتیجهگیری
برنامه نویسان نرمافزاری در مقابل خود مسیرهای کاری بسیاری میبینند که میتوانند آنها را انتخاب کنند و در آنها پیشرفت نمایند. اصلاً هم ربطی به این ندارد که شما تحصیلات دانشگاهی این کار را گذرانده باشید، اتفاقی در این مسیر قرار گرفته باشید یا سعی کرده باشید تا با ساخت یک بازی برای آیفون میلیونر شوید؛ احتمالات در این زمینه بینهایت هستند.
وقتیکه یک مسیر را انتخاب کردید، میتوانید هرزمانی که قابلیتها و دانش شما بهبود پیدا کردند آن مسیر را تغییر دهید. حتی اگر این کار را هم نکنید و در یک مسیر بمانید باز هم موارد زیادی هستند تا یاد بگیرید. فناوری آنچنان سریع پیش میرود و تکامل پیدا میکند که عقب ماندن از آن راحتتر از خسته شدن از آن است.