«دستهبندی» توسعهدهندگان
در سالهای اخیر کمتر آگهی کاریابی را با عنوان «مهندس نرمافزار» دیدهایم. بیشترِ این آگهیها با عنوانهای توسعهدهنده بَکاِند (Backend Developer)، توسعهدهنده فِرانتاِند (Frontend Developer) و توسعهدهنده فولاِستَک (Fullstack Developer) منتشر میشوند. بهلحاظ فنی میتوان توسعهدهنده فولاستک را نزدیکترین شغل به کاری دانست که مهندس نرمافزار انجام میدهد. اینجاست که این پرسش مطرح میشود: از چه زمانی ما تا این اندازه دستهبندی شدیم؟ آیا کسی که در این دستهبندی گیر افتاده میتواند از آن فرار کند؟
تمایل مهندسین نرمافزار به فعالیت در حوزههای مختلف را کاملا درک میکنم. از طرف دیگر از آنجایی که بهقول قدیمیها همهچیز را همگان دانند، غیرممکن است که یک مهندس نرمافزار در تمامی حوزههای این صنعت متخصص باشد. با این حال این واقعیت را نباید نادیده گرفت که مهندس نرمافزار دوست دارد فرایند تولید یک محصول را از آغاز تا پایان درک کند، چیزهای جدید فرا بگیرد و در حوزههای مختلف تولید محصول فعالیت داشته باشد. به زبان ساده میتوان اینگونه گفت که مهندس نرمافزار در کنار سروکار داشتن با کدنویسی، میخواهد در جریان فرایند تولید محصول قرار بگیرد.
اجازه دهید داستان کوتاهی برایتان بگویم. مهندس نرمافزار هستم. زمانی که این حرفه را آغاز کردم، هیجان زیادی درباره همهچیز داشتم. همان ابتدا آموختم که کدنویسی برای یک قسمت خاص از محصول، بدون درک دیگر جوانب آن بهسرعت به کاری پیشپاافتاده تبدیل میشود. در این شرایط مهندسنرمافزار تعامل کمتری با دیگر توسعهدهندگان یک محصول برقرار میکند. به همین دلیل به این فکر افتادم اگر کاری از عهده من برمیآید، چرا بارِ انجام آن را روی دوش دیگر همکارانم قرار دهم؟ در هیچکدام از مراحل تحصیلی من دستورالعملی برای کار در تنها یک حوزه خاص مشخص نشده است. تحصیلات من مهندسی نرمافزار است. بدون شک با کمی کمک از جانب دیگر همکاران میتوانستم کارهای بیشتری انجام دهم. همکارانم نیز با کمال میل برای انجام کارها به کمکم آمدند. در آن زمان بهعنوان مهندس نرمافزار جوان، از این شرایط بسیار خرسند بودم. فکر میکردم که کار درستی انجام میدهم.
مدتی بعد، به این فکر افتادم تا از فِرانتاِند سر در بیاورم. از قضای روزگار شرایطی برای این خواسته من مهیا شد. جالب اینجاست گروه بَکاِندی که با آنها کار میکردم، از جاوا، زبان دلخواه من، بهره میگرفتند. برای تعامل با جاوا تلاش زیادی کردم. وظیفهها و رفع عیبهای کوچک را بر عهده میگرفتم. فرصتی برای برنامهنویسی از آغاز تا ابتدا به زبان جاوا مهیا شد. در همان زمان بود که بحران هویت به درونم رخنه کرد. در آن زمان بهعنوان توسعهدهنده فِرانتاِند شناخته میشدم، نه بهعنوان مهندس نرمافزار. اینجا بود که متوجه شدم بهناگاه در دستهبندی عناوین شغلی صنعت نرمافزار قرار گرفتم.
ممکن است با خود فکر کنید این شرایط عالی است. شغلهای بیشماری برای توسعهدهندگان فِرانتاِند وجود دارد. با این دیدگاه موافقم، اما یکی از بهترین قسمتهای این حرفه برای من، چیزهای زیادی بود که میتوانستم فرا بگیرم. میخواستم پیشرفت کنم و دانشم را افزایش دهم تا مهندس نرمافزار بهتری شوم.
راه خروج از «دستهبندی» توسعهدهنده
به نظر شما یک مهندس نرمافزار چگونه میتواند از این دستهبندی خارج شود؟ پاسخ ساده است: با جستوجو در حوزههای دیگر. این کار را انجام دادم، اما به نتیجه نرسید. ۲ سال دیگر به فراگیری و کار با ریاکت (React) و تایپاِسکریپت (Typesctipt) مشغول شدم. گاهی نیز با نود (Node) و بکاند کار میکردم. اوضاع خیلی هم بد نبود. اطلاعات زیادی درباره کار با رایانش ابری و کدنویسی محصول از ابتدا فرا گرفتم. با حال به این نتیجه رسیدم به اندازه کافی حوزههای دیگر را تجربه کردهام. مهندس نرمافزاری هستم که مهارتهای جاوا (Java) و داتنِت (Net.) را برای مدتی کنار گذاشتهام. این شرایط باید خاتمه پیدا میکرد.
در آن زمان بهعنوان مهندس نرمافزار ارشد مشغول کار شدم. مدیران پروژه عملکرد من را با داتنت میسنجیدند. در این پروژه حدود ۴ سال با نود و ریاکت تعامل داشتم. اعتراف میکنم که ناامید شدم. نه به این دلیل که زود فرا نمیگرفتم، نمیتوانستم با دیگر اعضای پروژه تعامل داشته باشم یا کُند کار میکردم؛ اینها دلیل ناامیدی من نبود. مشکل اینجا بود که شرایط و زمانی برای پیشرفت نداشتم. در این وضعیت بحران هویت مهندس نرمافزار به وخیمترین حالت خود رسید. میخواستم از متخصصهای داتنِت اطلاعات بیشتری یاد بگیرم تا مهارتهایم را افزایش دهم و زمانی که از دست داده بودم را جبران کنم. واقعیت این بود که تمامی ۱۰ سال گذشته را به داتنت اختصاص نداده بودم. این شرایط باعث شد احساس کنم مهندس نرمافزار افتضاحی هستم.
مدتی بعد با افرادی همکار شدم که هدف اصلیشان کدنویسی بود. این همکاران توجه خاصی به ایجاد محصول و تعامل با فرایند توسعه آن نداشتند. آنها میگفتند ملزومات لازم را به ما بدهید تا به شما کد تحویل دهیم. این کدها به احتمال زیاد باگهای (Bug) زیادی داشت و آزمایش نشده بود. با این حال کاری که میکردند مگر چیزی غیر از کدنویسی بود؟
اجازه دهید در این قسمت کمی توقف داشته باشم و جنبه دیگری از این ماجرا را درباره فرایند توسعهنرمافزار و ساخت محصول بازگو کنم.
رویکرد مهندسی
همانگونه که انسانها تفاوتهای زیادی دارند، مهندسها نیز طرز فکرهای متفاوتی دارند. از آن دسته مهندسهایی هستم که میخواهم فقط با کدنویسی در یک محصول تاثیرگذار باشم. اثربخشی من در فرایند توسعه نرمافزار به این ترتیب است:
• درک محصول یا قسمتی از آن (در حد توانایی خودم)
• با درک محصول، مشکلاتی که سعی در حل آنها را داریم، متوجه میشوم.
• با درک این مشکلات، پرسشها، نگرانیها و ایدههایی مطرح میکنم که ممکن است به دیگر همکاران برای فرایند تحقیق و توسعه یک محصول کمک کند.
• با فعالبودن در گفتوگوها، معیارهای پذیرش (Acceptance Criteria ) را درک میکنم. بهلطف این اطلاعات کدهای کماشتباهی مینویسم.
• از آنجایی که قبلاً تحقیقات اولیه فنی را انجام دادهام، منظمتر کار میکنم و ایده کلی از چگونگی انجام وظیفهها بهدست میآورم.
• ساده یا دشواربودن انجام یک کار را تشخیص میدهم.
• در نهایت، تسلط کاملی به وظیفهها پیدا میکنم و آنها را به بهترین شکل ممکن انجام میدهم.
همانگونه که متوجه شدید، در این فرایند اشارهای به زبان خاص برنامهنویسی نداشتم. مهندسی نرمافزار همیشه معادل با کدنویسی محض نیست. مهارت حل مشکل و مشارکت در پروژه نیز از دیگر مهارتهای مهندس نرمافزار بهحساب میآید.
با توجه به توضیحاتی که مطرح شد، این پرسش پیش میآید که چرا توانمندیهایی مانند مهارت حل مشکل و مشارکت در پروژه بهعنوان نقطه ضعف مهندس نرمافزار شناخته میشود؟ این مهارت را بهجای اینکه نقطه ضعف ببینید، باید یک موهبت بدانید. بهلطف چنین مهارتهایی است که به یک مهندس نرمافزار تمامعیار تبدیل خواهید شد.
با این تعبیر، مهندسهای نرمافزار از دستهبندیهایی مانند توسعهدهنده فرانتاِنت، بکاِند و برنامهنویس جدا نیستند. ناگفته پیداست مهندسهای نرمافزار تمامی این کارها را نمیتوانند انجام دهند، با این حال بهتر است برای رهایی از بحران هویت مهندس نرمافزار، خودتان را خیلی درگیر این دستهبندیها نکنید. هیچ اشکالی ندارد که در کنار کدنویسی، به دیگر حوزههای صنعت نرمافزار علاقه داشته باشید. دانشی که فراگرفتهاید را در عمل به کار ببندید و توانمندیهایتان را گسترش دهید.
به این مطلب چند ستاره میدهید؟(امتیاز: 4.8 - رای: 2)
- منبع: medium
- مترجم: محمد کاملان