در دنیای نرمافزار، فقط این که یک نفر برای مدت طولانیای یک توسعه دهنده بوده است، به این معنی نیست که در این کار عالی شده است. در تجربه من، چیزی که توسعه دهندگان ارشد و مهندسان را از تازه کاران و متوسطها جدا میکند، نحوه استفاده از مجموعه مهارتها و مقابله با مشکلات است. با این که این مسئله در میان سازمانهای مختلف متنوع است، (مهارتهایی که توسط یک توسعه دهنده ارشد در یک استارتآپ کوچک استفاده میشوند، به مانند مهارتهای استفاده شده توسط یک توسعه دهنده تازه کار در یک شرکت بزرگ نیستند.) برخی کیفیتهای واضح وجود دارند که تمام افراد با تجربه در زمینه نرمافزار با عنوان «ارشد» آنها را دارند.
این که ما میتوانیم توسعه دهندگان و مهندسان را به دستههای تازه کار، متوسط و ارشد دستهبندی کنیم، یعنی این که راهی برای اندازهگیری آنها وجود دارد. در اینجا اشتباه این است که تظاهر کنیم تنها یک مقیاس برای اندازهگیری استعداد وجود دارد؛ زیرا اینگونه نیست. سازمانها، مجموعه مشکلات و دامنههای مختلف، نیازمند مهارتهای سختی هستند. اما چهار قابلیت کلیدی هستند تا در اندازهگیری ارشدیت به کار ببریم:
- یک برنامهنویس تنها بودن.
- آموزش و رشد دادن برنامهنویسان دیگر.
- جهتدهی مشکلات اجتماعی و سیاسی داخل یک سازمان.
- تطابق راه حلهای فنی با نیازهای کسب و کار.
به طور ایدهآل، یک مهندس ارشد باید در تمام این چهار مجموعه مهارت، قوی باشد، اما این که قدرتشان متمم تیم، شرکت و نیازهایشان میباشند، حیاتیتر است. پس اهمیت نسبی این چهار مهارت میتواند تنوع زیادی داشته باشد. برای مثال در یک شرکت یا استارتآپ کوچک، مهارتها به عنوان یک برنامهنویس تنها و قابلیت رشد دادن برنامهنویسان دیگر، معمولا بسیار بیشتر از مهارتهای اجتماعی و سیاسی اهمیت دارد.
مسئله این نیست که استارتآپها این مشکل را ندارند، اما آنها بسیار فشردهتر از یک سازمان با تیمهای گران قیمت، چندین مدیر، اهداف مختلف و شاخصهای اجرای کلیدی هستند. در یک شرکت بزرگ، مهارتهای سیساسی و اجتماعی یک توسعه دهنده ارشد ممکن است بیشتر اهمیت داشته باشند؛ زیرا شاید آنها نیاز داشته باشند که بیشتر بتوانند از انتخابات فنی و خدمه غیر فنی دفاع کنند.
بیش از فقط دانش
نرمافزار یک زمینه بسیار فنی است، پس یک مهندش ارشد نمیتواند در دانستن نحوه کار ضعیف باشد. اما از هر کسی در سطح ارشد انتظار میرود تا چیزی باشد که من آن را «مختصص عموم» مینامم. آنها باید به اندازهای در توسعهدهی تجربه داشته باشند که تنوع وسیعی از مشکلات را دیده باشند. احتمالا آنها بیشتر در معرض مشکلات یک زمینه یا صنعت خاص بودهاند، که این مسئله مهم است؛ زیرا درک جزئیات چندین دامنه میتواند به توسعه دهنده کمک کند تا به نواحی دیگر با یک دانش سطحی تغییر جهت دهد.
«برای این که واقعا ارشد باشید، باید تصمیمات سختی بگیرید، و البته آنها را به درستی بگیرید.»
این تجربه عمیق همچنین خِرَد لازم برای دیدن نحوه بازدهی تصمیماتی که در ابتدا گرفته شدهاند، در آخر را میسازد. یک توسعه دهنده ارشر باید بداند که «اجساد در کجا دفن شدهاند.» مدت زمانی که در ژرفا سپری شده است، خود را به یک دانش خلاقانه درباره جایی که مشکلات ۱۰ قدم پایینتر بروز خواهند داد، قرض میدهد. و این خرد به طور شگفتانگیزی قابل انتقال به موقعیتهای دیگر است. حداقل توسعه دهندگان ارشد میتوانند درک کنند که تمام خطرات بالقوه را نمیدانند، و با احتیاط عمل کنند.
این بصیرت، بیشتر از فقط کدنویسی سریع، چیزی است که برای شرکتها بازدهی دارد. تصمیمات خوب توسط یک توسعه دهنده ارشد، یعنی این که مشکلات پیش نمیآیند.
گرفتن تصمیمات سخت و کنار آمدن با آنها
این یک راز واقعی است: هیچ راه حل جادوییای برای تمام مشکلات نرمافزاری وجود ندارد. تقریبا هیچ زمانی پیش نمیآید که تصمیمی گرفته شده باشد و همه افراد وسایل خود را جمع کنند، به خانه بروند و دیگر به چیزی دست نزنند. هر معماری، هر انتخاب و هر امکان، با خود ضررهای احتمالیای را به همراه دارد، به خصوص همینطور که محصولات گسترش مییابند و تکامل پیدا میکنند.
انتخابی که شما امروز بر میگزینید تا رقبای بازار خود را شکست دهید، میتواند به این معنا باشد که شما نیاز به یک بازسازی کلی در شش ماه دیگر دارید، نه شش سال دیگر. اما اگر معنای آن این باشد که شما سهم بازار و درآمد را برنده میشوید، شاید ارزشش را دارد.
برای این که واقعا ارشد باشید، باید تصمیمات سختی بگیرید و آنها را به درستی بگیرید. وقتی که شما یک راه حل را انتخاب میکنید، شما همچنین مشکلات به همراه آنها را نیز انتخاب میکنید و با آنها کنار میآیید. یک توسعه دهنده ارشد باید در معرض چندین الگوی طراحی، چندین زبان، و چنیدن گروه قرار گرفته باشد. و با این که تقریبا غیر ممکن است که همه طراحیهای عمیق و الگوهای معماری را به طور عمیق بدانید، به خصوص وقی که همه چیز همینطور تغییر میکند، کاملا ممکن است که یک آگاهی خوب داشته باشید و برتریهای رویکردهای مختلف را درک کنید.
روشن فکر بودن و چیدن خوبیها
برخی مردم ممکن است فکر کنند که تقبل تصمیمات، با داشتن نظرات قوی و غیر قابل نقض میآید. اما به نظر من این که یک توسعه دهنده ارشد بیش از حد درباره فناوریها نظر دارد، یک نشانه بد است. مثلا این که فکر کنند زبانهای اصلی و رایج به درد نمیخورند و بیش از حد به این چیزها اهمیت میدهند. ممکن است یک تیم فراخونی شود تا با یک محصول بزرگ نوشته شده در یک زبان که توسعه دهنده ارشد آن را دوست ندارد، رابطه بر قرار کند، یا ممکن است کتابخانههای عالیای با پشتیبانی خوب در آن زبان وجود داشته باشند که بتوانند به خوبی مشکلات را رفع کنند.
«هر چه یک شخص خود را به دانش و درک بازتر کند، سریعتر میتواند «ارشد» شود.»
یک توسعه دهنده ارشد خوب مجبور نیست که تمام زبانها و فریموورک ها به طور مساوی دوست داشته باشد. در واقع، بهتر است که به نوعی درباره آن خونسرد باشید. این موارد ابزار هستند، و یک توسعه دهنده با تجربه وقتی که همه چیز به روش خاصی انجام شده است، میداند که این کار دلیلی داشته است. یک توسعه دهنده ارشد به جای این نگران باشد کدام موارد بهتر یا بدتر است، مورد مناسب را برای مشکلات، گروه و شرکت خود انتخاب میکند.
یک مثال عالی از آن، PHP است. بسیاری از توسعه دهندگان دوست دارند که از PHP متنفر باشند، اما بسیاری از ضعفهای آن همچنین چیزی بودند که شما را قادر ساختند تا وب را فتح کنید. ما نباید بخندیم؛ ما باید فکر کنیم که چگونه میتوانید از آن به نفع خود استفاده کنیم و از پیشروی بد در کار جلوگیری کنیم.
کیفیتهای «ارشد» پدید خواهند آمد
با در نظر گرفتن برخی از این کیفیتها و فاکتورهای اندازهگیری، مفاهیم تازه کار، متوسط و ارشد میتوانند به این صورت تجزیه شوند:
- توسعه دهندگان تازه کار یک راه را برای رفع مشکل میدانند، که معمولا بر پایه آموزشها یا کاری که در مدرسه انجام دادند میباشد. به احتمال زیاد این راه حل، استفاده از یک فریموورک رایج است.
- توسعه دهندگان متوسط، درک میکنند که هر مشکل به عنوان بخشی از یک سیستم بزرگتر وجود دارد و نگران نگهداری، کیفیت کد و... میباشد، اما همچنان تصویر کلی را نمیبیند. آنها ترجیح میدهند که بیشتر بر روی روند کار تمرکز کنند.
- توسعه دهندگان ارشد درک میکنند که هیچ چیز بدون مشکلات احتمالی، نکات منفی و ریسک نیست. انتخابات آنها چیزی که بر حسب گفتههای یک کتاب جالب یا صحیح است، نیستند. آنها به دنبال مدیریت خطر جامع در میان یک تیم کامل هستند. آنها چیزی را دوست دارند که نگهداریاش، آموزش دادنش و خطایابیاش ساده است.
مهندسی که قبول میکند که همه چیز را نمیداند، بهترین انتخاب را کرده است. هر چه یک شخص خود را به دانش و درک بازتر کند، سریعتر میتواند «ارشد» شود. هر وقت که من در استخدام یک نفر به عنوان یک توسعه دهنده یا مهندس ارشد شک دارم، از آنها میپرسم که آیا قبول میکنند که چیزی را نمیدانند و پی میبرم که چقدر مشتاق هستند تا حداقل ببینند که چه چیزی ممکن است. کیفیتهای ارشد پدید خواهند آمد و کمک خواهند کرد تا تعیین کنیم که این عنوان واقعا با تلاش کسب شده است یا نه.
تجریبات شما چه هستند؟ کی حس کردید که برای «ارشد» بودن آمادهاید؟
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید