معرفی و تعریف
منتورینگ فنی توسعهدهندگان نرمافزار (Technical Mentoring)، توانایی کمک به رشد عملی همتیمیها در حل مسئله، نوشتن کد، طراحی راهحل و پذیرش مسئولیتهای فنی است. هدف منتور این نیست که همیشه پاسخ مسئله را در اختیار فرد قرار دهد، بلکه باید به او کمک کند مسئله را بهتر تحلیل کند، گزینهها را بسنجد و بهتدریج مستقلتر تصمیم بگیرد.
این کار میتواند با پرسشهای هدفمند، برنامهنویسی دونفره (Pair Programming)، بازخورد روی کد، تمرینهای عملی و واگذاری تدریجی مسئولیت انجام شود.
منتورینگ فنی در فرایند توسعه نرمافزار
بازبینی کد (Code Review) نیز فرصت مناسبی برای منتورینگ است. در گیتهاب (GitHub) میتوان از درخواست ادغام (Pull Request) و در گیتلب (GitLab) از درخواست ادغام (Merge Request) برای توضیح دلیل تصمیمهای فنی، قراردادهای کدبیس و پیامد تغییرات استفاده کرد.
هدف نهایی این است که توسعهدهنده بتواند مسئله را تحلیل کند، گزینههای مختلف را بررسی کند، تصمیم خود را توضیح دهد و نتیجه کارش را ارزیابی کند، نه اینکه برای هر تصمیم منتظر تأیید منتور بماند.
این مهارت برای توسعهدهندگان ارشد (Senior Developers)، سرپرستان فنی (Tech Leads)، معماران نرمافزار (Software Architects) و مدیران مهندسی (Engineering Managers) کاربرد دارد. منتورینگ میتواند رسمی و برنامهریزیشده باشد یا در جریان فعالیت روزانه تیم انجام شود. در تیمهایی که زمان جداگانهای برای منتورینگ در نظر گرفته نشده است، بهتر است تعداد افراد تحت راهنمایی، اهداف یادگیری و زمان جلسات با ظرفیت واقعی منتور هماهنگ شوند.
تفاوت منتورینگ فنی با آموزش و کوچینگ
منتورینگ فنی با آموزش یا کوچینگ یکسان نیست، اما میتواند با آنها همپوشانی داشته باشد. آموزش (Training) معمولاً بر انتقال یک دانش یا مهارت مشخص تمرکز دارد. کوچینگ (Coaching) بیشتر به پرسش و کمک به کشف راهحل توسط خود فرد متکی است. منتورینگ میتواند از هر دو روش استفاده کند و تجربه عملی منتور را نیز وارد فرایند رشد کند.
اهمیت و کاربردها
چرا این مهارت مهم است؟
رشد یک توسعهدهنده فقط با مطالعه مستندات یا گذراندن دوره آموزشی اتفاق نمیافتد. فرد کمتجربه معمولاً باید یاد بگیرد چگونه مسئله را بشکند، کد موجود را بخواند، گزینههای مختلف را مقایسه کند و از نتیجه تصمیمهای خود بازخورد بگیرد.
چرا منتورینگ فنی در رشد توسعهدهندگان اهمیت دارد؟
منتورینگ این یادگیری را به مسائل واقعی کار متصل میکند. یک جلسه کوتاه برنامهنویسی دونفره (Pair Programming)، بازخورد آموزشی در بازبینی کد (Code Review) یا واگذاری مرحلهای یک تغییر کوچک میتواند فرصتی برای تمرین عملی ایجاد کند.
منتورینگ مؤثر همچنین کمک میکند دانش مهم فقط در اختیار یک یا دو عضو تیم باقی نماند و اعضای بیشتری بتوانند درباره بخشهای مختلف سامانه تصمیم بگیرند. بازبینی کد نیز در این فرایند فقط برای یافتن ایراد نیست. بازخورد میتواند دلیل یک تصمیم مهندسی، پیامد آن و روش تحلیل مسئله را به توسعهدهنده منتقل کند.
منتورینگ جای تجربه فنی را نمیگیرد. برای راهنمایی در یک حوزه، فرد باید در همان زمینه تجربه عملی کافی داشته باشد یا محدودیت دانش خود را روشن بیان کند و در صورت نیاز، همراه فرد تحت راهنمایی مسئله را بررسی کند.
این مهارت برای مسیر سرپرست فنی (Tech Lead) اهمیت زیادی دارد، اما توسعهدهندگان ارشد (Senior Developers)، مدیران مهندسی (Engineering Managers) و سایر اعضای باتجربه تیم نیز میتوانند در حوزه تخصصی خود نقش منتور داشته باشند.
کاربردها
-
برنامهنویسی دونفره برای حل مسئله واقعی
منتور و توسعهدهنده روی یک باگ، قابلیت یا تغییر محدود کار میکنند. فردی که نقش Driver دارد کد را مینویسد و Navigator مسئله، گزینهها و تصویر بزرگتر را بررسی میکند. نقشها باید در طول کار جابهجا شوند تا یادگیری به مشاهده منفعل محدود نشود.
-
بازخورد آموزشی در بازبینی کد
منتور فقط ایراد را اعلام نمیکند. دلیل فنی و پیامد مسئله را توضیح میدهد و میان مواردی که باید اصلاح شوند و پیشنهادهای اختیاری تفاوت قائل میشود.
-
طراحی برنامه رشد فردی
یک یا دو مهارت مشخص انتخاب میشود و برای هرکدام تمرین عملی، مسئولیت واقعی و معیار بررسی پیشرفت تعیین میشود.
-
واگذاری تدریجی مسئولیت فنی
فرد ابتدا با حمایت بیشتر کار میکند و با افزایش توانایی، مسئولیت کاملتری برای یک تغییر، قابلیت یا تصمیم محدود بر عهده میگیرد.
-
انتقال دانش درباره کدبیس
منتور مسیرهای مهم کد، قراردادهای تیم، مرزهای سامانه و روش عیبیابی را با استفاده از نمونههای واقعی توضیح میدهد.
-
بازنگری پس از تحویل یا رخداد فنی
Postmortem و بازنگری رخداد در اصل فعالیتهای یادگیری تیمی هستند. منتور میتواند از یافتههای این جلسات برای توضیح تصمیمها، نشانههای هشدار و روشهای جلوگیری از تکرار مشکل استفاده کند.
ابزارهای مرتبط
پیشنیازها
موارد زیر پایههای لازم برای شروع را نشان میدهند.
- مهارت برنامهنویسی Programming
- مهارت بازبینی کد Code Review
- مهارت ارتباطات فنی Technical Communication
- تجربه عملی تحویل و نگهداری نرمافزار در دستکم یک حوزه فنی
- توانایی خواندن، تحلیل و توضیح کدهای موجود
- آمادگی برای دریافت بازخورد درباره شیوه منتورینگ خود
مسیر یادگیری منتورینگ فنی توسعهدهندگان نرمافزار
-
۱۸ ساعت
مرز منتورینگ فنی و مسئولیت آن را مشخص کنید
تفاوت نقش منتور، مدیر، مدرس و کوچ را بشناسید. برای هر گفتوگو ابتدا هدف را مشخص کنید. ممکن است هدف رفع یک مانع فوری، آموزش یک مفهوم، بررسی یک تصمیم یا رشد بلندمدت فرد باشد. تمرین کنید در هر مسئله تشخیص دهید چه زمانی توضیح مستقیم لازم است و چه زمانی بهتر است با سؤال به فرد فرصت تحلیل بدهید.
مسیر فعلی برای فردی که تجربه فنی لازم را دارد، حدود ۹۰ تا ۱۵۰ ساعت مطالعه و تمرین در نظر گرفته است. عدد ۱۲۰ ساعت برآورد آموزشی همین مسیر است و زمان استانداردی برای یادگیری منتورینگ محسوب نمیشود.
-
۲۰ ساعت
گفتوگوی فنی مبتنی بر پرسش و بازخورد را اجرا کنید
بازخوردی ارائه دهید که مشخص، قابل مشاهده و مرتبط با اثر کار باشد. به جای عبارت کلی «این کد خوب نیست»، به رفتار یا بخش مشخصی اشاره کنید و توضیح دهید چه اثری بر خوانایی، نگهداری، تست یا احتمال خطا دارد.
از سؤالهایی استفاده کنید که توسعهدهنده را به تحلیل گزینهها هدایت کنند. برای مثال بپرسید اگر ورودی نامعتبر باشد چه اتفاقی میافتد یا کدام بخش تغییر دشوارتر تست میشود. پرسش کردن نباید به آزمونگرفتن از فرد تبدیل شود. اگر توسعهدهنده اطلاعات یا تجربه لازم برای یافتن پاسخ را ندارد، توضیح مستقیم میتواند گزینه مناسبتری باشد.
-
۱۸ ساعت
جلسه برنامهنویسی دونفره آموزشی برگزار کنید
یک مسئله کوچک اما واقعی، مانند رفع یک باگ یا افزودن اعتبارسنجی ورودی، انتخاب کنید. نقش راننده و راهبر را جابهجا کنید تا فرد دیگر فقط تماشاگر نباشد. در پایان جلسه، از توسعهدهنده بخواهید تصمیمهای اصلی، ابهامهای باقیمانده و گام بعدی را با زبان خود توضیح دهد. جلسه را با فهرستی بلند از نکتهها تمام نکنید؛ یک یا دو هدف یادگیری کافی است.
-
۲۲ ساعت
بازبینی کد را به فرصت یادگیری تبدیل کنید
روی درخواستهای ادغام واقعی یا نمونه، نظرهایی بنویسید که اولویت و دلیل دارند. در GitHub یا GitLab، ایرادهای مربوط به درستی، امنیت یا قراردادهای تیم را از پیشنهادهای اختیاری برای خوانایی و سبک کد جدا کنید. برای هر بازخورد مهم، مشخص کنید آیا توسعهدهنده باید آن را اصلاح کند، درباره آن گفتوگو کند یا برای مطالعه بعدی نگه دارد. هدف، افزایش توان تصمیمگیری است نه کنترل تمام جزئیات کد.
-
۲۰ ساعت
مسیر رشد و واگذاری مسئولیت را طراحی کنید
یک شکاف مشخص مانند نوشتن تست، عیبیابی یا طراحی API انتخاب کنید. برای آن یک تمرین نزدیک به کار واقعی، خروجی قابل ارزیابی و زمان مشخص برای مرور تعیین کنید.
هدف و شواهد پیشرفت را میتوان در یک سند مشترک ثبت کرد، اما مستندسازی نباید به فرایندی سنگین تبدیل شود. واگذاری مسئولیت را بهصورت مرحلهای انجام دهید. ابتدا همراهی بیشتر فراهم کنید، سپس اجرای مستقل یک بخش محدود را بسپارید و در نهایت مالکیت کامل یک تغییر کوچک را واگذار کنید. مسئولیت بزرگ را بدون دسترسی، زمینه کافی و امکان پرسش به فرد واگذار نکنید.
-
۲۲ ساعت
اثر منتورینگ را ارزیابی و روش خود را اصلاح کنید
پیشرفت را با شواهد رفتار واقعی فرد بررسی کنید.
آیا مسئلههای مشابه را مستقلتر حل میکند؟
آیا میتواند دلیل تصمیم فنی خود را توضیح دهد؟
آیا پیش از درخواست کمک، مسئله را بهتر تحلیل میکند؟
آیا میتواند کار خود را بازبینی و خطاهای احتمالی را زودتر شناسایی کند؟
در فاصلههای مشخص از منتورجو بازخورد بگیرید و بپرسید کدام جلسه، تمرین یا نوع بازخورد برای او مفیدتر بوده است. اگر فرد برای تصمیمهای مشابه همچنان منتظر تأیید شما میماند، روش حمایت را بررسی کنید. ممکن است لازم باشد پاسخ مستقیم را کمتر کنید یا مسئولیت بیشتری به او بسپارید.
زمان تقریبی یادگیری
برآورد مجموع زمان آموزش، مطالعه و تمرین تا رسیدن به سطح کاربردی؛ بسته به پیشزمینه شما میتواند کمتر یا بیشتر باشد.
پروژههای تمرینی
موارد زیر تصویری کلی از این بخش برای این مهارت ارائه میکنند.
-
برگزاری سه جلسه برنامهنویسی دونفره
توضیح پروژه: با یک توسعهدهنده کمتجربهتر یا همکار داوطلب، سه مسئله کوچک واقعی انتخاب کنید. برای هر جلسه یک هدف یادگیری مشخص تعیین کنید و نقش Driver و Navigator را جابهجا کنید.
-
بازنویسی آموزشی بازخوردهای درخواست ادغام
توضیح پروژه: پنج نظر مبهم یا صرفاً دستوری درباره کد جمعآوری کنید و آنها را به بازخوردهایی با دلیل، اولویت و پیشنهاد گام بعدی تبدیل کنید. سپس از همتیمی بخواهید وضوح آنها را ارزیابی کند. جایگزین کمریسک، نوشتن نظر روی یک درخواست ادغام نمونه یا قطعهکد متنباز است.
-
طراحی برنامه رشد برای یک توسعهدهنده
توضیح پروژه: برای یک عضو واقعی یا فرضی تیم، یک شکاف فنی مشخص، دو تمرین عملی، یک مسئولیت تدریجی و معیارهای مشاهده پیشرفت برای چهار هفته طراحی کنید. اگر به عضو تیم دسترسی ندارید، یک شخصیت فرضی با سطح مهارت و کد نمونه مشخص تعریف کنید و برنامه را بر همان اساس بسازید.
-
واگذاری مالکیت یک تغییر کوچک
توضیح پروژه: یک قابلیت یا اصلاح محدود را انتخاب کنید و آن را در سه مرحله واگذار کنید: تحلیل مشترک، اجرای مستقل با بازبینی و ارائه تصمیمها توسط توسعهدهنده. برای تمرین بدون منتورجو، سناریو را روی یک پروژه آموزشی اجرا کنید و برای هر مرحله، پرسشها و معیارهای بازبینی را مکتوب کنید.
-
جلسه بازنگری فنی بدون سرزنش
توضیح پروژه: پس از یک باگ یا خطای فرضی، جلسهای برگزار کنید که در آن خط زمانی، تصمیمها، نشانههای نادیدهگرفتهشده و اقدامهای پیشگیرانه بررسی شوند، نه مقصران. اگر رخداد واقعی ندارید، یک سناریوی منتشرشده در مخزن کد یا خرابی شبیهسازیشده را مبنای جلسه قرار دهید.
پرسشهای رایج درباره منتورینگ فنی توسعهدهندگان نرمافزار
در این بخش، به تعدادی از پرسشهای رایج درباره این مهارت پاسخ داده شده است.
آیا منتورینگ فنی فقط وظیفه سرپرست فنی است؟
خیر. سرپرست فنی معمولاً مسئولیت رسمیتری در رشد تیم دارد، اما توسعهدهندگان ارشد، معماران نرمافزار و اعضای باتجربه نیز میتوانند در یک حوزه مشخص منتور باشند. شرط اصلی، تجربه عملی قابلانتقال و توانایی کمک به استقلال فرد دیگر است.
تفاوت منتورینگ فنی با آموزش برنامهنویسی چیست؟
آموزش معمولاً یک موضوع را برای گروهی از افراد توضیح میدهد. منتورینگ فنی بر مسئلهها، کدبیس، سطح مهارت و هدف شغلی یک فرد تمرکز دارد و با بازخورد و مسئولیت واقعی ادامه پیدا میکند.
آیا برای منتور شدن باید همه پاسخها را بدانم؟
خیر. منتور لازم نیست پاسخ همه مسئلهها را از حفظ بداند، اما باید بتواند مسئله را ساختار دهد، مسیر بررسی را نشان دهد، محدودیت دانش خود را شفاف بیان کند و در صورت نیاز همراه فرد راهحل را پیدا کند.
بازخورد روی کد چگونه به منتورینگ تبدیل میشود؟
وقتی بازخورد فقط دستور اصلاح نباشد و دلیل فنی، اثر تغییر و روش فکر کردن را توضیح دهد، به یادگیری کمک میکند. همچنین باید فرصت پاسخگویی و تصمیمگیری به توسعهدهنده داده شود.
چند نفر را میتوان همزمان منتور کرد؟
پیش از پذیرفتن هر منتورجوی جدید، ظرفیت هفتگی خود را حساب کنید: زمان جلسه منظم، بازبینی کد، پاسخ به پرسشهای ضروری و مرور هدفهای رشد را جداگانه ثبت کنید. فقط زمانی فرد جدید بپذیرید که این زمانها برای منتورجوهای فعلی بهطور پایدار انجام میشوند، جلسهها لغو یا عقب نمیافتند و برای هر فرد یک هدف و پیگیری مشخص دارید. اگر بازخوردها سطحی شده یا افراد برای تصمیمهای تکراری منتظر پاسخ شما میمانند، ابتدا دامنه تعهد فعلی را کاهش دهید.
چگونه بفهمم منتورینگ من مؤثر بوده است؟
به تغییر رفتار در کار واقعی نگاه کنید: فرد باید بتواند مسئلههای مشابه را مستقلتر حل کند، تصمیم فنی خود را توضیح دهد، خطاهایش را زودتر تشخیص دهد و برای کمک، پرسش دقیقتری مطرح کند.