اگر سؤالهایی مانند «یک توسعهدهنده ارشد خوب چه کسی است؟» یا «چگونه بفهمیم توسعهدهنده ارشد هستیم؟» داشتید، با مطالعهی این مقاله میتوانید به پاسخ این سوالها برسید.
با مطالعهی این مقاله ابتدا خودتان را ارزیابی کنید که آیا این 9 مهارت کلیدی برای برنامه نویس ارشد (Senior Developer) بودن را دارید یا نه. در صورتی که در هرکدام از این موارد ضعیف بودید، برای تقویت آن مهارت برنامه ریزی کنید.
هنگامی که به دنبال یک شغل نرم افزاری جدید میگردید، اصطلاح «توسعه دهنده ارشد» یا همان «Senior Developer» خیلی به چشمتان میخورد. ممکن است احساس کنید که کلمه ارشد فقط تعریف دیگری برای موضوع "تجربه" است، اما راستش را بخواهید چیزی بیشتر از تجربه، باعث میشود یک نفر برنامه نویس ارشد باشد.
مهارتها و ویژگیهای خاصی وجود دارد که یک توسعه دهنده ارشد را تعریف میکند. یا به عبارت دیگر، هر توسعهدهنده ارشد باید مهارتهای خاصی داشته باشد تا خود و تیمش را کارآمدتر و مؤثرتر کند.
اگر میخواهید یک توسعهدهنده ارشد باشید، باید روی کسب تجربه در مورد این مهارتهای ضروری برای موفقیت تمرکز کنید. این مهارتها میتوانند به شما کمک کنند تا برند شخصی خود را به عنوان یک توسعهدهنده ارشد برجسته کنید و البته میتوانید حداکثر تأثیر را در پروژه و محیط کارتان داشته باشید.
بیایید به جزئیات 9 مهارت برتری که هر توسعهدهنده ارشد باید برای تسلط بر آنها تلاش کند، بپردازیم.
1. میداند چگونه کد قابل نگهداری بنویسد
این که هر توسعه دهنده خوبی باید بداند، چگونه کد با کیفیت تولید کند، حرف صحیحی نیست. برنامه نویسها وقتی هنوز مبتدی هستند، تمرکزشان تنها بر روی تکمیل کد و رسیدن به نتیجه ی مورد انتظار به هر وسیلهای است. آنها هنوز تجربهی لازم برای اینکه کدشان را طوری ساختارمند توسعه دهند که بهینه عمل کنند، ندارند.
اما به مرور زمان که در حرفه خود پیشرفت میکنید، باید یاد بگیرید که چگونه کد قابل نگهداری بنویسید. کد شما باید وظیفه مورد انتظار را انجام دهد. در عین حال، باید به اندازه کافی ساده باشد تا دیگران بتوانند آن را بخوانند و حفظ کنند.
اغلب توسعه دهندگان احساس میکنند، یک کد فوق پیچیده، کد خوبی است. اما این اساسا یک افسانه است. هر کدی باید در طول عمر خود تکامل یابد، تا آخرین نیازمندی تجاری، در حوزه عملیاتی خود را برآورده کند. درنتیجه، اگر دیگر اعضای تیم نتواند کد را بفهمد، به زودی آن کد، برای تیم به کابوس تبدیل خواهد شد.
با توجه به این توضیحات، یک توسعه دهنده ارشد باید یاد بگیرد که چگونه کد ساختارمندی تولید کند که دیگران بتوانند به راحتی آن را بفهمند نگهش دارند و توسعهاش بدهند.
2. میداند چگونه باگها را پیش بینی کند
باگها و ایرادهای پیش بینی نشده برای هر محصولی اجتناب ناپذیر است. عوامل زیادی روی یک برنامه تأثیر میگذارد و هرچقدر هم که یک برنامه نویس حواسش به همه این مطالب باشد، بازهم احتمال اینکه بعضی از این موارد را ندیده باشد و از بروز خطا توسط آنها چاره اندیشی کرده باشد زیاد است.
به همین دلیل است که تیم باید بیشترین تلاش خود را برای پیشبینی ایرادها کرده باشد و از قبل به این فکر کرده باشد که اگر هر خطایی رخ داد چه کار کند.
توسعه دهندهی ارشد، در حین کار بر روی یک وظیفهای که به او سپرده شده است، باید بر واکنش سیستم به سناریوهای مختلف تمرکز کند. برنامه نویسهای ارشد باید یاد بگیرند که جاهای خطرناک یا در معرض خطر را شناسایی کنند و محافظهایی برای حفاظت از تجربه کاربری ایجاد کنند. به طور همزمان، آنها باید سناریوهایی که سیستم در آنها شکست میخورد را ایجاد کنند تا بتوانند محدودیت سیستم را آزمایش کرده و اطمینان حاصل کنند که برنامه میتواند سناریوهای پرخطر را مدیریت کند.
مهارت پیش بینی شکست اغلب از مشارکت نزدیک در چرخه توسعهی محصولهایی در دنیای واقعی ایجاد میشود. یعنی بدون تجربهی کافی در حوزهی توسعهی محصول، برای برنامه نویس پیش بینی شکست خیلی سخت خواهد بود.
3. میداند چگونه کارهای خود را اولویت بندی کند
یک توسعه دهنده ارشد باید بداند که چگونه کارهای خود را برای به حداکثر رساندن کاراییاش، اولویت بندی کند. هر کاری را نمیتوان با زمان و تلاش یکسان انجام داد. از این رو، یک مهارت ضروری برای توسعه دهندگان ارشد، تعیین اولویت و کار کردن روی وظایفی است، که بیشترین ارزش را برای انرژی صرف شده توسط آنها دارد.
به طور همزمان، توسعه دهندگان ارشد باید مهارت نه گفتن را بیاموزند. آنها باید از انجام هر کاری که به تجربه آنها ارزشی را اضافه نمیکند، خودداری کنند یا اگر یک توسعهدهنده جوان میتواند آن کار را انجام دهد، باید آن کار به توسعه دهندهی جوانتر واگذار شود.
تفویض اختیار موثر، میتواند به تازه کارها کمک کند تا تجربه کسب کنند و برای کهنه کارها فرصتی را ایجاد میکند، تا روی کارهایی که به تخصص آنها نیاز دارد، تمرکز کنند.
اغلب توسعهدهندگان جوان از نه گفتن تردید میکنند، با این فرض که در نگاه به آنها اثر منفی خواهد داشت. اما پذیرش هر وظیفهای که به آنها محول میشود به زودی میتواند نتیجه معکوس داشته باشد و بر عملکرد آنها تأثیر منفی بگذارد.
در نتیجه، همانطور که برنامه نویسها در حرفه خود تجربه کسب میکنند و میخواهند به عنوان توسعه دهندگان ارشد شناخته شوند، باید بدانند که کیفیت، و نه کمیت، برای رشد آنها حیاتی است.
4. میداند چگونه با تشدیدها برخورد کند
مثل خطاهایی که به شکست نرم افزار یا پیش بینیهای ما منجر میشود، تشدید یا افزایشهای سریع (Escalation) هم در فرآیند توسعه نرم افزار رایج است. من افزایش سریع تنش را تا زمانی که به دلیل موجهی پیش بیاید، مزاحم نمیبینم. در صورت استفاده صحیح، تشدید به حفظ اولویتها کمک می کند و نشان میدهد توجهها و اولویتها، لازم است به کدام سمت بروند. اما بسیاری از مهندسان نرم افزار تشدید را به عنوان نویز یا یک اختلال کوچک در نظر میگیرند.
با این حال، توسعه دهندگان ارشد اهمیت تشدید را درک میکنند و میدانند که چگونه آنها را به طور موثر مدیریت کنند. برنامه نویسهای ارشد به جای وحشت در هنگام بحران، آرامش خود را حفظ میکنند و بر حل مسئله تمرکز میکنند. تمرکز آنها بر خاموش کردن آتش روشن شده بدون بدتر کردن اوضاع است.
بنابراین، اگر میخواهید یک توسعهدهنده ارشد شوید، یاد بگیرید که در طول بحرانها، خونسردی خود را حفظ کنید. برای به دست آوردن تجربه دست اول، در تشدیدها و مدیریت حوادث بزرگ شرکت کنید. به پیش کسوتها و باتجربهها، با دقت نگاه کنید و از آنها چگونگی مدیریت وضعیتهای بحرانی را یادبگیرید.
و یک راز کوچک، مدیریت موفقیت آمیز تشدیدها، میتواند دید عالی در سطح رهبری به شما بدهد که برای رشد شغلیتان خوب است.
5. میداند چگونه مذاکره کند
ممکن است تعجب کنید که چرا یک توسعه دهنده نرم افزار باید بداند چگونه مذاکره کند. مگر یک توسعه دهنده ارشد درباره ی چه چیزی میتواند مذاکره کند؟
برای یک توسعهدهنده جوان، تمرکز روی کدنویسی و ارائه کارهایی که به او سپرده شده، کافی است. اما همانطور که در حرفه خود پیشرفت میکنید، باید روزانه با مشتریان و تیمهای در هم تنیده کار کنید تا راه حلهای دوستانه برای کارها و مشکلات پیدا کنید.
مشتریان نظرات مختلفی در مورد نیازهای خود و قابلیتهای برنامه، خواهند داشت. ممکن است تفاوتهای قابل توجهی در طراحی بین طرحهای شما و برنامههای Interlock وجود داشته باشد. به عنوان یک توسعه دهنده ارشد، رسیدن به یک توافق عادلانه که برای همه کارآمد باشد، مسئولیت شماست.
شما نمیخواهید با مشتریان یا تیمهای خود درگیر شوید. با این حال، همیشه نمیتوانید آنچه را که از شما میخواهند انجام دهید. اینجاست که مهارتهای مذاکره شما به کار میآیند و تعیین میکنند که آیا میتوانید مشکل را به صورت دوستانه و بدون تأثیر بر تحویل یا کیفیت محصول حل کنید.
6. میداند چه زمانی و چگونه به دیگران کمک کند
این اصل را فراموش نکنید که توسعه دهندگان باید کمک بخواهند و تا حد امکان به دیگران کمک کنند تا در حرفه خود رشد کنند. با این حال، یک توسعه دهنده ارشد باید بداند که چه زمانی و چگونه به دیگران کمک کند.
اگر اعضای تیم به یکدیگر کمک نکنند، آن تیم قطعاً شکست خواهد خورد. اما این بدان معنا نیست که شما روی وظایف و کارهایی که به هم تیمیهایتان سپرده شده است کار کنید. باید تعادلی بین کمک به دیگران و اجازه دادن به آنها برای انجام کارشان وجود داشته باشد تا از اشتباه هایشان درس بگیرند.
برای مثال، اگر هم تیمیهایتان با مشکل خاصی که قبلاً تجربه کردهاید، دست و پنجه نرم میکنند، آنها را به سمت راهحل سوق دهید. این کار تیم شما را از ساعتها کار و ناامیدی نجات میدهد. اما اگر کسی حتی بعد از کمک شما هم همین اشتباه را مرتکب شد، بهتر است اجازه دهید شکست بخورد تا خودش یاد بگیرد.
از این رو، یک توسعهدهنده ارشد باید بداند که چه زمانی و چگونه کمک خود را ارائه دهد تا مؤثرتر باشد.
7. میداند چگونه با نیاز کاربر همدلی کند
اغلب من میبینم که توسعهدهندگان در درجه اول بر جنبه فنی تحویل محصول تمرکز میکنند. حتی گاهی اوقات از کاربران میخواهند که نحوهی استفاده خود را از محصول، بر اساس نحوه رفتار برنامه تغییر دهند. آنها به جای ایجاد محصولی که برای کاربران کار میکند، از کاربران انتظار دارند که طبق پیاده سازی عمل کنند.
با این حال، یک برنامه تنها زمانی مفید است که نیاز کاربر را برآورده کند. اگر برنامه نتواند به مشتری کمک کند تا مشکل مورد نظر خود را به طور مؤثر حل کند، دیگر مهم نیست کدهای برنامه چقدر حرفهای نوشته شده باشد، آن برنامه و کدهایش ارزش واقعی خود را از دست داده اند.
از این رو، تیم توسعه باید با نیازهای کاربر همدل باشد. و اینجاست که نقش یک توسعهدهنده ارشد مهمتر است.
یک توسعهدهنده ارشد باید مهارتهایی را داشته باشد که بتواند به جای کاربر نهایی محصول نشسته و از دید او با برنامه کار کند. آنها باید بفهمند که کاربر در تلاش است تا چه مشکلی را حل کند و علت اصلی را کشف کند. حالا لازم است علت اصلی کشف شده را با زبان مناسب و فنی برای بقیه اعضای تیم توضیح دهند. با طی شدن این فرآیند، در حین توسعهی محصول، نیازهای کاربرنهایی در نظر گرفته شده و در نتیجه محصول نهایی با نیازهای او مطابقت خواهد داشت.
8. میداند چگونه برآورد دقیق انجام دهد
برآورد یا تخمین، یک فرآیند حیاتی در توسعه نرم افزار است. یک برآورد خوب ضمن ارزیابی تلاش مورد نیاز برای ارائه کار، تمام جنبههای پروژه را هم شامل میشود. از این رو، مهارت برآورد نیاز به دانش نظری و تجربه عملی دارد تا برآورد به دست آمده تا حد امکان به چیزی که در واقعیت اتفاق میافتد نزدیک شود.
برآوردهای نرم افزاری میتوانند تحت تأثیر بدترین سناریوها، تنوع در توانایی تیم، محدودیتهای محیطی و غیره قرار گیرند. شناسایی و درک این عوامل در محاسبه تلاش مورد نیاز برای تحویل محصول ضروری است.
با این حال، هیچ فرمول جادویی برای اندازهگیری کامل وجود ندارد. برای به دست آوردن تخصص مناسب در برآورد، یک توسعه دهنده باید این فرآیندها را بارها در طول حرفه خود طی کند.
از این رو، یک توسعهدهنده ارشد باید در تمام مراحل توسعه نرمافزار شرکت کند و یاد بگیرد که چگونه عوامل مختلف بر جدول زمانی تحویل پروژه تأثیر میگذارند. آنها باید از اشتباهات گذشته خود درس بگیرند و از این آموختهها برای افزایش دقت برآوردهای آینده خود استفاده کنند.
9. میداند چگونه سازگار باشد
سازگاری یک ویژگی بسیار مطلوب در توسعه دهندگان ارشد است.
برای یک توسعه دهنده ارشد، ایجاد اعتماد بسیار مهم است. تیم شما باید به تواناییهای شما اطمینان داشته باشد. آنها باید بدانند که شما میتوانید همیشه و نه فقط وقتهایی که حوصله دارید، وظایف خود را به عنوان یک توسعه دهندهی ارشد انجام دهید.
و البته ثبات یکی از بهترین راهها برای اثبات این است که تیم شما میتواند به شما به عنوان یک توسعهدهنده ارشد اطمینان و تکیه کند.
به طور خلاصه، یک توسعه دهنده ارشد باید به طور مداوم بر تمام مهارتهای ضروری توضیح داده شده در این مقاله حواسش باشد و در صورتی که در هر کدام از آنها احساس ضعف کرد، به سرعت نسبت به بهبود آن اقدام کند.
هرکسی که میخواهد به عنوان یک توسعه دهندهی ارشد، در تیم یا مجموعه خود به فردی موثر تبدیل شود، باید خود را به عنوان فردی قابل اعتماد، به هم تیمیها و مدیران ثابت کنند.
اگر قبلاً سؤالاتی مانند «یک توسعهدهنده ارشد خوب کیست؟» یا «چگونه بفهمیم توسعهدهنده ارشد هستیم؟» داشتید، اکنون پاسخهای خود را دارید.
لیست داده شده شامل مهارتهای ضروری است که میتواند به شما در تبدیل شدن به یک توسعه دهنده ارشد کمک کند. این یک لیست همه جانبه نیست. اما، اگر بتوانید تمام مهارتهای ذکر شده را به دست آورید و به طور مداوم آنها را در کار روزانه خود نشان دهید، میتوانم به شما اطمینان دهم که در حرفه نرم افزاری خود رشد استثنایی خواهید کرد.
اگر مهارتهای دیگری را میشناسید و در حال حاضر از داشتن آنها سود میبرید، لطفاً به استفاده از آنها ادامه دهید. و این مهارتها را با ما به اشتراک بگذارید تا دیگران بتوانند آنها را بخوانند و یاد بگیرند.