تخصص شما بهعنوان یک توسعهدهندهی نرمافزار چیست؟
آیا تا به حال مجبور شدهاید وکیل بگیرید؟ اولین کاری که کردید چهبود؟ اگر تاکنون هرگز وکیل استخدام نکردهاید، فکر میکنید اولین کاری که انجام میدهید چه خواهد بود؟ اگر حدس زدید که باید بدانید به چهنوع وکیلی نیاز دارید، درست میگویید. شما قطعاً نمیخواهید با هر وکیلی تماس بگیرید؛ بلکه تمایل دارید با یک وکیل خاص تماس بگیرید که در حوزهای که در آن مشکل دارید کار میکند. وکلا تخصص دارند و معمولاً این تخصص را از ابتدا اعلام میکنند. وکلای جنایی، وکلای حوادث، وکلای املاک و غیره وجود دارند.
شما نمیخواهید که یک وکیل طلاق، نمایندهی شما برای مشکل مالیات یا املاک باشد؛ بنابراین تخصص مهم است. یک وکیل مستقیماً پساز فارغالتحصیلشدن از دانشکدهی حقوق، تصمیم نمیگیرد که صرفاً یک «وکیل» باشد؛ اما متأسفانه این دقیقاً همان کاری است که اکثر توسعهدهندگان نرمافزار درمورد حرفهی خود انجام میدهند. اگر از آنها بپرسید که تخصص شما چیست، به شما میگویند که من سیشارپ یا جاوا یا PHP کار میکنم و این بزرگترین اشتباه است که ابزار کارشان را بعنوان تخصص خود اعلام میکنند. درست مثل یک لولهکش که بگوید تخصص من کار با آچار لولهگیر است. در این مقاله با من همراه باشید تا شما را با نحوهی انتخاب تخصص موردنظر و کسب مهارتهای لازم آشنا کنم.
تخصص مهم است
توسعهدهندگان نرمافزار زیادی وجود دارند که تخصص خاصی ندارند. درواقع، اکثر توسعهدهندگان نرمافزار تخصص خود را کاملاً براساس زبان برنامهنویسی که با آن برنامهنویسی میکنند تعریف میکنند. معمولاً «من یک توسعهدهندهی داتنت هستم» یا «من یک توسعهدهندهی جاوا هستم» خواهید شنید. این نوع تخصص، بسیار گسترده است. این جمله واقعاً بهاندازهی کافی درمورد نوع کار توسعهی نرمافزاری که میتوانید انجامدهید توضیح خاصی نمیدهد. یک زبان برنامهنویسی، به من چیزی نمیگوید که شما چهنوع توسعهدهندهای هستید و واقعاً چهکاری میتوانید انجامدهید. فقط یک ابزار را اعلام میکند که برای انجام کار خود از آن استفاده میکنید.
ممکن است از تخصص در یک زمینهی خاص توسعهی نرمافزار بترسید زیرا نگران هستید که در یک تخصص گیر بیفتید و شما را از بسیاریاز مشاغل و فرصتها محروم کند. با وجود اینکه متخصصشدن در یک حوزه، شما را از برخی فرصتها دور میکند، اما فرصتهای بیشتری را برای شما باز میکند که در غیر اینصورت نداشتید.
دوباره به مثال وکیل فکر کنید. اگر وکیل شدید و در حوزهی خاصی تخصص نداشتید، از نظر فنی، هر فردی که به دنبال وکیل میگردد، میتواند موکل شما باشد. اما مشکل اینجاست که افراد بسیار کمی مایلبه استخدام یک وکیل عمومی هستند. اکثر مشتریان بالقوه بهدنبال استخدام یک متخصص هستند. یا مثلاً یک پزشک را درنظر بگیرید. پزشک عمومی دامنهی بزرگتری از بیماران را ویزیت میکند ولی درآمدش بهاندازهی یک پزشک متخصص و فوقتخصص نیست؛ زیرا در موارد جدی که هزینههای تشخیص، درمان و مراقبت بالاتر هستند، کسی بهسراغ پزشک عمومی نمیرود.
حتی اگر در ظاهر، شما تعداد بیشتری از مشتریان بالقوه دارید، اما واقعیت این است که با عمومیبودن، تعداد مشتریان خود را تا حد زیادی به کسانی کاهش میدهید که بهاندازهی کافی زرنگ نیستند که متوجهشوند به یک متخصص نیاز دارند.
با متخصصبودن، تعداد کمتری از کارفرمایان و مشتریان بالقوه دارید؛ اما برای آنها چشمانداز بسیار جذابتری خواهید داشت. تا زمانی که تخصص شما «بهاندازهی کافی» گسترده باشد – که هرچقدر بیشتر متخصص شوید، این گستردگی «کمتر» میشود – و درعینحال بیش از حد شلوغ نباشد (رقیب نداشته باشید – که هرچقدر بیشتر متخصص شوید، رقبای شما «کمتر» میشوند)، نسبت به زمانی که خود را توسعهدهندهی نرمافزار مینامید، کار بسیار آسانتری برای یافتن شغل یا جذب مشتری خواهید داشت. بنابراین بسیار مهم است که میزان تخصص خود را بهدقت انتخاب کنید. هرچقدر تخصص شما بیشتر شود و دامنهی کاری خود را محدودتر کنید، گستردگی مشتریان شما کاهش میباید؛ ولی درمقابل رقبای کمتری نیز خواهید داشت. این هنر شماست که حد تعادل را در میزان نفوذ در تخصص موردنظرتان بیابید و آنرا رعایتکنید. در این میان مشورت و استفادهاز تجربهی افراد خبره میتواند به شما کمک زیادی کند.
مشخصکردن تخصصها بهطور دقیق
اگر معرفی خود بهعنوان توسعهدهندهی PHP یا توسعهدهندهی جاوا بهاندازهی کافی دقیق نیست، پس یک تعریف خاص دقیقاً چیست؟ پاسخدادن به این سؤال آسان نیست؛ زیرا پاسخ واقعی آن، «بستگیدارد» است. درواقع پاسخ به این سؤال بستگی به این دارد که شما درحال تلاش برای رسیدن به چهچیزی هستید و بازار کار چقدر در آن حوزه بزرگ است.
بگذارید برای شما مثالی بزنم. در یک بازهی بخصوص از دوران کاریام، خودم را بهعنوان یک توسعهدهندهی نرمافزار که در زمینهی برنامهنویسی چاپگرهای مختلف و تولید نرمافزارهای درایور چاپگر تخصص داشت، معرفی میکردم. این یک تخصص کاملاً خاص بود. من فقط تعداد انگشتشماری کارفرمای اصلی داشتم که میتوانستم با آنها کار پیدا کنم و تقریباً کار با تمام آنها بصورت دورکاری بود؛ اما آیا میتوانید تصور کنید که یافتن یک توسعهدهندهی نرمافزار متخصص در کار با چاپگرها برای یک سازنده چاپگر چقدر دشوار است؟
تخصص خاص من باعث شد برای تعداد کمی از کارفرمایان بالقوه، «بسیار ارزشمند» باشم. این کارفرمایان در اکثر شهرها و کشورها حضور نداشتند، بنابراین اگر من فقط بازار ایالات متحدهی امریکا را بهعنوان بازار کار مخاطب داشتم، بازار بسیار بزرگی بهشمار میرفت که تخصص من در آن بسیار مفید بود. اما اگر نمیخواستم از جایی که در حال حاضر زندگی میکردم نقل مکان کنم یا قابلیت کار بصورت دورکاری وجود نداشت، بازار من برای آن تخصص بسیار کوچک بود. چند شرکت در کشور خودمان سراغ دارید که به یک توسعهدهندهی متخصص درزمینهی نرمافزار درایور چاپگرها نیاز داشتهباشد؟ خوشبختانه، در آن زمان، من امکان دورکاری داشتم و بنابراین این تخصص برای من بهخوبی جواب داد ولی بعدها که شرایط نقدکردن ارز دشوار شد و مهاجرت، از آن هم سختتر شد، عملاً دیگر نمیتوانستم این تخصص را ادامهدهم.
نقل قول:توجه: قانون تخصص این است که هرچه تخصص عمیقتری داشتهباشید، فرصتهای بالقوه کمتری خواهید داشت، اما احتمال بیشتری برای بهدستآوردن همان فرصتها وجود دارد؛ زیرا رقبای کمتری دارید و کارفرمای شما احتمالاً قدر نیروی متخصص را بیشتر میداند.
به وضعیت شما برگردیم. فرضکنید یک توسعهدهندهی جاوا هستید که بهدنبال شغلی در منطقهی محل سکونت خود میگردید. در بسیاریاز شرکتهای بزرگ، تقاضای زیادی برای توسعهدهندگان جاوا وجود دارد. بنابراین شما با یک استخر خوب از موقعیتهای بالقوه مواجه خواهید شد؛ اما نیازی نیست که همهی آن مشاغل را بدست آورید، فقط به «یکی» نیاز دارید.
بیایید تصور کنیم که 500 شغل توسعهدهندهی جاوا در منطقهی شما وجود دارد. حالا فرض کنید تصمیمدارید برای محدودکردن بازار خود، تخصص داشته باشید و شانس بیشتری برای بهدستآوردن یکیاز آن مشاغل به خودتان بدهید، بنابراین بهعنوان یک توسعهدهندهی وب با جاوا مهارت پیدا میکنید. شاید این کار 250 شغل را از پیشروی شما حذف کند؛ اما 250 شغل دیگر را برای شما باقی میگذارد که بهطور بالقوه میتوانید بهدستآورید. هنوز هم زیاد است، نه؟ به یاد داشته باشید، شما فقط به «یکی» نیاز دارید. اکنون تصمیم میگیرید کمی بیشتر تخصص داشتهباشید، و بدون واردشدن به جزئیات Stackهای مختلف توسعهی وب با جاوا، فرضکنید که یک استک توسعهی وب خاص را در جاوا برای خود انتخاب میکنید. شاید این کار گزینههای شما را به 50 شغل کاهشدهد. هنوز هم مشاغل زیادی برای انتخاب وجود دارد، اما اکنون شانس شما برای بهدستآوردن یکیاز آن 50 شغل بسیار بالا رفته است؛ زیرا اکنون بهطور خاص، آن مشاغل را با مهارتهای خود هدف قرار دادهاید.
گزینههای مختلف تخصص برای توسعهدهندگان نرمافزار
انواع مختلفی از انتخابها برای توسعهدهندگان نرمافزار وجود دارد. بدیهی است که زبان برنامهنویسی و بستر ارائهی محصول (وب، موبایل – Android یا iOS، دسکتاپ و…) جزو این گزینهها هستند؛ اما تفاوتهایی نیز در روشها و فناوریها یا صنایع خاص وجود دارد.
یکی از اولین چیزهایی که باید بفهمید این است که چه نوع توسعهی نرمافزاری را میخواهید انجامدهید. آیا میخواهید در حوزهی Front-end (برنامهنویسی رابطهای کاربری) کار کنید؟ آیا میخواهید روی میانافزار یک برنامهی کاربردی کار کنید و قوانین و منطق تجاری را پیادهسازی نمایید؟ آیا میخواهید روی Back-end یک برنامه کار کنید و با پایگاه دادهها یا عملیات سطح پایین تعامل داشتهباشید؟ حتی میتوانید هر سه را انتخاب کنید و یک توسعهدهندهی FullStack باشید، اما دراینصورت قطعاً باید در یک Stack خاص از فناوریها تخصص داشته باشید. بهعنوان مثال، یک توسعهدهندهی وب FullStack ممکن است در ایجاد وبسایتهای ASP.NET MVC با استفاده از سیشارپ و SQL Server مهارت داشتهباشد و یکنفر دیگر با استک MERN کار کند و با MongoDB و Express و React و Node سروکار داشتهباشد و فرد دیگری با PHP/Laravel و Blade و HTML/CSS/JavaScript و jQuery یا Bootstrap و Semantic-UI و… کار کند یا یکنفر دیگر از پایتون و FastAPI و Flask و Django استفادهنماید. البته حتی یک توسعهدهندهی فولاستک نیز بهاندازهی یکنفر که بطور تخصصی روی یکیاز جنبههای نرمافزار کار میکند، متخصص محسوب نمیشود.
همچنین میتوانید در زمینههایی مانند توسعه سیستمهای جاسازیشده (Embedded) که در آن نزدیکبه دستگاههای سختافزاری کار میکنید و کدهایی را مینویسید که روی رایانههای داخل دستگاه اجرا میشود، تخصص داشته باشید. برنامهنویسان سیستمهای جاسازیشده باید با مجموعهای کاملاً متفاوت از مشکلات نسبتبه توسعهدهندگان وب دستوپنجه نرمکنند.
سیستمهای عامل یکی دیگر از زمینههای تخصصی است (گرچه در توسعهی وب خیلی مهم نیست). بسیاریاز توسعهدهندگان در نوشتن برنامههای کاربردی برای یک سیستمعامل خاص مانند ویندوز، لینوکس یا مک تخصص دارند.
توسعهی اپلیکیشن موبایل یا حتی یک سیستمعامل خاص موبایل، یکی دیگر از زمینههای بالقوه برای تخصص است. تقاضای زیادی برای توسعهدهندگان iOS یا Android وجود دارد که در نوشتن برنامههای تلفنهمراه برای آن پلتفرم تخصص دارند.
برخیاز توسعهدهندگان واقعاً عمیق هستند و در یک پلتفرم یا فریمورک بسیار خاص متخصص میشوند. این توسعهدهندگان، مشتریان بالقوهی کمی دارند؛ اما بهدلیل تخصص خود میتوانند نرخ ساعتی بالایی را درخواستکنند. متوجه خواهید شد که تخصصهای سطح پایین، بیشتر درمورد مجموعههای نرمافزاری یا فریمورکهای بسیار گرانقیمت رایج هستند. شرکت نرمافزاری غولپیکر آلمانی SAP را درنظر بگیرید. برخیاز توسعهدهندگان بسیار پردرآمد، در توسعهی راهحلهای مشتری برای ادغام با این سیستم نرمافزاری گرانقیمت تخصص دارند (بعنوان مثال ممکناست تخصص یکنفر، نوشتن پلاگین وردپرس یا مجنتو برای ادغام با این سیستم باشد).
زمینههای تخصصی
- توسعهی وب (ASP.NET MVC یا ASP.NET Core یا MERN یا PHP/HTML/CSS/JS و…)
- سیستمهای جاسازیشده (Embedded)
- سیستمعامل خاص (Desktop)
- توسعهی موبایل (Android یا iOS و…)
- فریمورک (Laravel یا Yii2 یا Symfony یا Django و…)
- سیستم نرمافزاری (SAP یا WordPress یا Magento و…)
انتخاب تخصص موردنظر شما
اکثر توسعهدهندگان نرمافزاری که در مورد تخصصشان صحبت میکنم، با من موافق هستند، اما اغلب از من میپرسند که چگونه واقعاً یک شاخه را انتخابکنم. انتخاب یک تخصص اغلب میتواند یک کار طاقتفرسا بهنظر برسد. در اینجا چند نکته وجود دارد که به شما در انتخاب گرایش موردنظرتان کمک میکند:
- برخیاز مهمترین نقاط دردسر در شرکت فعلی یا قبلی شما چهبود؟ آیا میتوانید به فردی تبدیلشوید که در حل آن نقاط درد تخصص داشته باشد؟
- آیا نوع خاصی از کار وجود دارد که هیچکس نمیخواهد انجام دهد یا آن حوزه فاقد افراد ماهر است؟ تبدیل به فردی شوید که در آن زمینه متخصص است؛ و کسبوکار زیادی خواهیدداشت.
- چه نوع موضوعاتی بیشتر در کنفرانسها و گروههای کاربری مطرح میشود؟
- در سایتهایی مانند StackOverflow یا در بین همکاران بیشتر به چهنوع سؤالاتی پاسخ میدهید؟
هر کاری که انجام میدهید، مطمئنشوید که نوعی تخصص را انتخاب کردهاید. اندازهی بازار شما مشخص میکند که چقدر خاص است. سعیکنید تا حد امکان آنرا خاص کنید. اگر این کار را انجامدهید، در بازار خاص خود تقاضای بسیار بیشتری خواهید داشت. و نگران نباشید؛ درصورت نیاز، همیشه میتوانید بعداً تخصص خود را تغییر دهید. بدیهیاست که من دیگر یک متخصص در حوزهی توسعهی نرمافزار برای چاپگرها نیستم و بسیاری از توسعهدهندگان دیگر را نیز میشناسم که در طول حرفهی خود به موفقیت زیادی دست یافتهاند و بعد از تغییر مهارت تخصصی خودشان نیز مجدداً موفقیت را تجربه کردهاند. بهعنوان مثال، یکیاز دوستان خوب من در Microsoft Silverlight تخصص داشت. پس از اینکه Silverlight توسط مایکروسافت کنار گذاشتهشد، او تخصص خود را به برنامههای کاربردی تکصفحهای (SPA) تغییر داد.
آیا برنامهنویسهای چندزبانه اشتباه میکنند؟
هر زمان که موضوع تخصص را مطرح میکنم، با مقاومتهایی مواجه میشوم. من فکر میکنم روشنکردن این نکته مهماست که توصیهی داشتن یک تخصص مشخص، به این معنی نیست که شما نباید مهارتهای متنوعی داشته باشید.
اگرچه ممکناست این دو چیز متناقض بهنظر برسند، اما لزوماً اینطور نیست. یک توسعهدهندهی نرمافزار جامع و همهکاره بودن عالی است. توانایی استفاده از چندین فناوری و برنامه و بسیاریاز زبانهای برنامهنویسی مختلف نهتنها میتواند به شغل شما کمک کند، بلکه میتواند شما را به توسعهدهندهی نرمافزاری بسیار ارزشمندتر از کسی که فقط یک فناوری یا زبان برنامهنویسی خاص را میداند تبدیلکند. اما بسیار دشوار است که خود را بهعنوان یک آچارفرانسه به بازار کار معرفی کنید.
داشتن توسعهدهندهای که بتواند هر کاری را در تیم انجامدهد، خوب است؛ اما بهندرت شرکتها یا مشتریان قصد پیداکردن چنین فردی را دارند. حتی اگر ممکن است در انواع فنآوریهای مختلف عالی باشید و 50 زبان برنامهنویسی مختلف را بلد باشید، باز هم بهتر است تخصص خاصی را انتخاب کنید – حتی اگر هر از گاهی تغییر کند – و آنرا بهعنوان مهارت اصلی خود درنظر بگیرید.
تا جایی که میتوانید بیاموزید و تا حد امکان انعطافپذیر شوید؛ اما در عین حال تخصص مشخصی داشته باشید که شما را منحصربهفرد و متمایز میکند. اگر مجبورید بین این دو گزینه یکی را انتخابکنید، از تخصص شروع کنید و بعداً منشعب شوید.