نکته‌های منتورینگ

مجموعه‌ای از نکته‌ها برای منتورینگ


یادداشت‌های منتورینگ

یکی از بزرگ‌ترین کمک‌ها به منتورینگ می‌تواند داشتن فایلی باشد که یادداشت‌های هر تمرینی را که منتورینگ می‌کنید در آن نگه دارید. ممکن است ببینید بسیاری از راه‌حل‌ها می‌توانند از پیشنهادهای یکسانی بهره ببرند؛ پس با نگه‌داشتن یادداشت، لازم نیست پیوسته همان پیشنهادها را از حفظ بنویسید. و با در دست داشتن پیشنهادها در یک جا، می‌توانید به‌مرور آن‌ها را صیقل دهید تا روشن‌تر شوند.

اگر مطمئن نیستید یادداشت‌هایتان را از کجا شروع کنید، ممکن است زیر exercism/website-copy/tracks فایلی با نام mentoring.md برای تمرینِ مسیرتان پیدا کنید. اگر وجود داشته باشد، ممکن است نمونه‌هایی از راه‌حل‌های معقول را در خود داشته باشد، همراه با پیشنهادهای رایج و نکته‌های گفتگو برای پیش بردن بحث. اگر وجود نداشت، ممکن است بخواهید بعد از اینکه فایل یادداشت خودتان را برای آن تمرین ساختید، برگردید و یکی بسازید.

همچنین، حتی اگر الآن فقط یک زبان را منتورینگ می‌کنید، ممکن است در آینده زبان‌های بیشتری را منتورینگ کنید. می‌تواند کمک کند که یادداشت‌های منتورینگتان را هم بر اساس مسیر و هم بر اساس اسم تمرین سازمان‌دهی کنید، چون مسیرهای مختلف احتمالاً برای یک تمرین واحد پیشنهادهای متفاوتی می‌خواهند.

یادداشت‌های منتورینگ به کار می‌آیند، چه آن تمرین را زیاد منتورینگ کنید و چه کم. اگر آن تمرین را زیاد منتورینگ کنید، وقتی می‌توانید فقط از یادداشت‌هایتان کپی‌پیست کنید، در تایپ کردن از صفر صرفه‌جویی زیادی می‌شود. اگر آن تمرین را کم منتورینگ کنید، می‌تواند پیشنهادهایی را به یادتان بیاورد که ممکن است در هفته‌ها یا ماه‌های گذشته از آخرین منتورینگتان فراموش کرده باشید.

اشکالی ندارد که یادداشت‌های منتورینگ از منتوری به منتور دیگر متفاوت باشد. آنچه در ادامه می‌آید یک روش برای ساختاردهی به آن‌ها است، اما تنها روش نیست.

به منتورجو برای پاس کردن تست‌ها تبریک بگویید (اگر آن‌ها را پاس کرده باشد).

اگر تمرین چند روزی در صف مانده باشد، شاید لازم باشد چیزی شبیه این بگویید:

ببخشید که مدتی طول کشید تا کسی به شما پاسخ دهد. در حال حاضر تعداد منتورهای فعال JavaScript برای Resistor Color Duo کم است.

مواردی را که در راه‌حل منتورجو دوست دارید فهرست کنید. برای نمونه:

  • دوست دارم که این راه‌حل مختصر و خواناست.

  • استفاده از indexOf را دوست دارم.

  • دوست دارم که برای پرهیز از تبدیل عدد به رشته و دوباره به عدد، از روش (first * 10) + second استفاده کرده است.

  • دوست دارم که از حلقه‌زنی/تکرار استفاده نکرده است.

  • پارامتر واسازی‌شده را دوست دارم.

در ادامه می‌توانند پیشنهادهای پرتکرار شما بیایند.

Note

اگر برای هر ویژگی تازه‌ی زبان که معرفی می‌کنید پیوندی بگذارید، می‌تواند برای منتورجو بسیار مفید باشد. برای نمونه:

برای این تمرین لازم نیست، اما شاید بد نباشد که تابع را به یک تابع پیکانی تبدیل کنید.

هرچند نمی‌خواهیم راه‌حل را لو بدهیم، اما گاهی منتورجو با نمونه بهتر یاد می‌گیرد. قرار دادن تکه‌کدی در یک بخش جزئیاتِ جمع‌شده می‌تواند آن نمونه را فراهم کند، و منتورجو خودش می‌تواند انتخاب کند آن را باز کند یا نه. برای نمونه:

<details><summary>نمونه‌ی اسپویلر</summary>

<pre>

export const decodedValue = ([firstColor, secondColor]) => COLORS.indexOf(firstColor) * 10 + COLORS.indexOf(secondColor)

</pre>

</details>

نزدیک به پایان یادداشت‌ها می‌توانید پیوندی به یک راه‌حل منتشرشده بگذارید که همه‌ی این پیشنهادها را به‌طور کامل در بر دارد.

در انتهای مطلق یادداشت‌هایتان ممکن است بخواهید توضیحات بیشتری را قرار دهید که منتورجوها گاهی درخواست می‌کنند. این توضیحات زیاد پیش نمی‌آیند، اما با این حال خوب است اولین باری که از آن‌ها استفاده می‌کنید ثبتشان کنید، تا بار بعد، که ممکن است هفته‌ها یا ماه‌ها بعد باشد، لازم نباشد توضیح را از صفر بسازید. برای نمونه، گاهی منتورجو می‌پرسد که اگر مشکی نخستین نوار برای یک صفر پیشرو باشد، روش ضرب برای Resistor Color Duo چگونه کار می‌کند:

اینکه مشکی نوار نخست باشد نکته‌ی خوبی برای بررسی است، پس بیایید بررسی‌اش کنیم. رنگ مقاومت قرار است مقدار اهم مقاومت را نشان دهد، و برای یک مقاومت چندنواری از صفر پیشرو استفاده نمی‌شود. پس مشکی نوار نخست نخواهد بود. علاوه بر این، parseInt یا Number هم صفر پیشرو را حذف می‌کنند.

یک دسته‌ی اختیاری از داده‌ها که می‌توان در یادداشت‌های منتورینگ نگه داشت، ثبت بنچمارک راه‌حل‌ها یا روش‌های مختلف است.

بنچمارک‌گیری

یکی از دغدغه‌های رایج منتورجوها این است که راه‌حلشان چقدر کارآمد است. این موضوع به‌ویژه برای زبان‌های «سطح‌پایین‌تر» مانند C، C++، Go و Rust صدق می‌کند. منتورجوهای زبان‌های دیگر هم، در کنار اینکه کدشان چقدر به سبک خود زبان نوشته شده است، اغلب نگران کارایی کدشان هستند.

Note

بنچمارک گرفتن کاری نیست که از یک منتور انتظار برود. با این حال، منتورجوها اغلب به‌ویژه تحت تأثیر این قرار می‌گیرند که بنچمارک راه‌حلشان در مقایسه با روش‌های دیگر چگونه است.

مسیر Go برای بنچمارک به‌ویژه مناسب است، چون بنچمارک‌ها اغلب در فایل تست گنجانده می‌شوند. زبان‌های دیگر ممکن است کمی بررسی لازم داشته باشند تا مشخص کنید کدام روش برای شما بهتر کار می‌کند. برای نمونه، اگر فقط از ویرایشگر آنلاین استفاده می‌کنید، پس دنبال جایی می‌گردید که بنچمارک‌ها را به‌صورت آنلاین اجرا کنید. برای نمونه، JSBench.me یک بنچمارک‌گیر آنلاین برای JavaScript است.

اگر کد را به‌صورت محلی اجرا می‌کنید، این گزینه را دارید که نرم‌افزار بنچمارکی دانلود کنید و روی دستگاه خود اجرا کنید. برای نمونه، Rust می‌تواند از Criterion استفاده کند، یا از cargo bench همراه با تست‌های بنچمارک.

دست‌کم چند راه برای پیگیری بنچمارک‌ها وجود دارد. یک راه این است که فهرستی به‌روز از همه‌ی مواردی که بنچمارک می‌کنید نگه دارید، اما اگر فهرست بلند شود، این کار می‌تواند دست‌وپاگیر شود. راه دیگر این است که فهرستی از بنچمارک‌های نماینده برای روش‌های مختلف نگه دارید. منتورجوها اغلب می‌خواهند کد روش‌های سریع‌تر را ببینند، پس اگر یک روش سریع‌تر منتشر شده باشد، احتمالاً ارائه‌ی پیوند به آن بسیار قدردانی می‌شود.

Caution

اگر پیوندی به راه‌حلی که بنچمارک کرده‌اید ارائه می‌دهید، حتماً پیوند را به راه‌حل منتشرشده بدهید، نه به جلسه‌ی منتورینگ. همه‌ی راه‌حل‌هایی که منتورینگ می‌شوند منتشر نمی‌شوند.

یادداشت‌های منتورینگ که مخصوص تمرین خاصی نیستند

ممکن است برخی ویژگی‌های زبان باشند که می‌بینید آن‌ها را برای بیش از یک تمرین مطرح می‌کنید. وقتی می‌خواهید پیشنهادی را از یک فایل به فایل دیگر کپی‌پیست کنید، شاید بهتر باشد آن را در فایل خودش بگذارید. باز هم، یک مزیت نگه‌داشتن پیشنهاد در یک جا این است که صیقل دادنش به‌مرور آسان‌تر می‌شود. همچنین وقتی آن را برای تمرینی به کار می‌برید که پیش‌تر استفاده نکرده‌اید، پیدا کردنش آسان‌تر است. به‌جای اینکه سعی کنید به یاد بیاورید قبلاً در کدام تمرین این پیشنهاد را مطرح کرده بودید، می‌توانید مستقیم سراغ فایل خودِ آن پیشنهاد بروید.

وقتی منتورجو پرسشی دارد

منتورجوها تشویق می‌شوند مشخص کنند از جلسه‌ی منتورینگ چه انتظاری دارند. اغلب این را در قالب یک پرسش بیان می‌کنند. اگر پرسش چیزی باشد که پاسخش را نمی‌دانید و به آن علاقه‌ای هم ندارید، اشکالی ندارد که درخواست منتورینگ را برای منتور دیگری رها کنید.

اگر پاسخ را نمی‌دانید اما می‌خواهید پیدایش کنید، شاید بهتر باشد تا زمانی که پاسخ را یاد نگرفته‌اید، درخواست منتورینگ را بر عهده نگیرید. اگر تا آن زمان درخواست منتورینگ از دست رفته باشد، دست‌کم چیزی یاد گرفته‌اید و باعث نشده‌اید منتورجو منتظر بماند.

یک استثنا برای این حالت ممکن است این باشد که درخواست منتورینگ چند روز یا بیشتر در صف مانده باشد. در آن وضعیت ممکن است بخواهید درخواست منتورینگ را بر عهده بگیرید و هر بازخوردی که می‌توانید بدهید، و به منتورجو اطلاع دهید که بعداً درباره‌ی پرسشش به او پاسخ خواهید داد. البته مهم است که این را پیگیری کنید، یا برای اطلاع دادن پاسخ به منتورجو، یا برای گفتن اینکه پیدایش نکردید. اگر پاسخ را پیدا نکردید، شاید برای منتورجو مفید باشد که توضیح دهید چه راه‌هایی را برای یافتن پاسخ امتحان کردید. منتورجو ممکن است با راه‌های دیگری برای یافتن پاسخ پاسخ دهد. بین شما دو نفر، شاید پاسخ پیدا شود.

اگر پاسخ را می‌دانید و می‌خواهید به آن بپردازید، جای خوبی برای این کار میان گفتن آنچه در راه‌حل منتورجو دوست دارید و ارائه‌ی پیشنهادهایی برای روش‌های دیگر است.

کد ناموفق

کد می‌تواند به دو دلیل شکست بخورد: یا همه‌ی تست‌ها را پاس نمی‌کند، یا کامپایل نمی‌شود یا مفسر را راضی نمی‌کند.

منتورهای مختلف تمایل و/یا حوصله‌ی متفاوتی برای سر و کله زدن با کد ناموفق دارند، که تا حدی بستگی دارد به اینکه چطور ارائه شده است، چون کد ناموفق همیشه به یک شکل ارائه نمی‌شود.

گاهی منتورجو می‌گوید که روش دیگری را امتحان کرده و جواب نداده، و می‌پرسد چرا جواب نداده است. ممکن است کد حتی ارائه نشده باشد، یا به‌جای اینکه در قالب یک نسخه ارسال شود، در کامنتی که عملاً خواندنی نیست گذاشته شده باشد.

راه‌حلی که در ویرایشگر وب تست شده باشد، تنها در صورتی می‌توان برای درخواست منتورینگ ارسال کرد که همه‌ی تست‌ها را پاس کرده باشد. یکی از دلایلش این است که منتور بتواند تمرکزش را بر پیشنهاد بهبودها یا روش‌های دیگر برای کدِ کارکنونی بگذارد. دیباگ کردن کد لزوماً کاری نیست که منتور بخواهد یا از او انتظار برود. با این حال، یک راه‌حل ناموفق که از طریق CLI ارسال شده باشد را می‌توان برای درخواست منتورینگ فرستاد، در حالی که منتورجو برای حل آن درخواست کمک می‌کند.

اگر کد ناموفق ارائه نشده باشد و روش ناموفقی که توصیف شده روش خوبی به نظر نرسد، شاید کافی باشد پیشنهاد دهید که به‌جای روش ناموفق، روش دیگری می‌تواند روشی باشد که نه همان روش ناموفق است و نه روشی که استفاده کردند و پاس شد. یا شاید کافی باشد توضیح دهید چرا روشی که استفاده کردند از روش ناموفق بهتر است، بدون اینکه به جزئیات این بپردازید که آن روش ناموفق چه باگی داشت.

برای نمونه، یکی از اتفاق‌های رایج این است که منتورجوها با Robot Name مشکل دارند. یا تست‌ها تایم‌اوت می‌شوند یا نمی‌توانند به تعداد کافی اسم تولید کنند، و می‌خواهند بدانند چطور درستش کنند. اگر تمایل و حوصله‌اش را دارید، قطعاً می‌توانید کدشان را تحلیل کنید و پیشنهاد دهید مشکل را چطور حل کنند. یا می‌توانید توضیح دهید که بررسی اسم‌های تولیدشده‌ی تصادفی، هر چه اسم‌های بیشتری تولید شود، برخورد بیشتری ایجاد می‌کند، و پیشنهاد دهید که روش دیگر می‌تواند تولید اسم‌ها به‌صورت ترتیبی و سپس درهم‌آمیختن آن‌ها باشد.

اگر کد ناموفق در کامنتی که عملاً خواندنی نیست جای‌گذاری شده باشد، ممکن است بخواهید هر بازخوردی که می‌توانید درباره‌ی راه‌حل پاس‌شده بدهید، و پیشنهاد دهید که کد آن کامنت را به‌عنوان نسخه‌ی دیگری ارسال کنند. همچنین می‌توانید پیشنهاد دهید که منتورجو بعداً خطاهای نسخه‌ی ناموفق را بررسی کند تا راهنمایی برای یافتن جای مشکل باشد.

اگر کد در یک نسخه‌ی ناموفق باشد، ممکن است مفید باشد که منتورجو را راهنمایی کنید تا خطاهای اجرای تست را بررسی کند. برخی زبان‌ها برای خواندن خطاها یا نتیجه‌های تست به کمی راهنمایی بیشتری نسبت به بقیه نیاز دارند. ممکن است مفید باشد که یک یا چند بخش از خطاها را نقل کنید و برای منتورجو توضیح دهید که منظور چیست.

در نهایت، درست کردن کد ناموفقِ منتورجو وظیفه‌ی منتور نیست، اما منتور، اگر بخواهد، می‌تواند راه‌هایی برای درست کردن آن توسط خود منتورجو پیشنهاد دهد.

مواجهه با پیوستار صف

ممکن است در مسیری ثبت‌نام کنید تا منتورینگ کنید، اما هیچ‌وقت هیچ تمرینی در صف آن نبینید که منتورینگ کنید. ممکن است فکر کنید چیزی اشتباه است، اما دست‌کم چند دلیل برای این وجود دارد. یکی از دلیل‌ها این است که ممکن است مردم فعلاً برای آن مسیر درخواست منتورینگ نکنند. گاهی یک مسیر دوره‌هایی از رکود دارد. دلیل دیگر این است که ممکن است منتورهای دیگر درخواست‌ها را پیش از اینکه شما ببینید بردارند. این احتمالاً برای مسیر محبوبی که منتورهای فعال زیادی دارد رخ می‌دهد.

اگر درخواست‌های زیادی در صف باشد، چند راه برای منتورینگ آن‌ها وجود دارد. ممکن است بخواهید از قدیمی‌ترین به جدیدترین کار کنید، تا کسانی که بیشترین انتظار را کشیده‌اند اول رسیدگی شوند. یا ممکن است انتخاب کنید از جدیدترین به قدیمی‌ترین کار کنید، به‌ویژه اگر قدیمی‌ترین‌ها مدت زیادی منتظر مانده باشند. این‌طور، کسانی که اخیراً فعال بوده‌اند لازم نیست منتظر بمانند تا انبوه کارهای عقب‌افتاده رسیدگی شود.

اگر چندین درخواست برای یک تمرین واحد باشد، ممکن است بخواهید برای حفظ تمرکز آن‌ها را در دسته‌های همان تمرین پشت سر هم انجام دهید، به‌جای اینکه از تمرین A به تمرین B و باز به تمرین A بروید.

ممکن است درخواستی برای تمرینی که به آن علاقه‌ای ندارید چند روز یا چند هفته همان‌جا مانده باشد. می‌توانید انتخاب کنید که به آن نپردازید، به این امید که منتور دیگری آن را بردارد، یا اینکه به‌عنوان انگیزه‌ای باشد تا خودتان آن تمرین را امتحان کنید. یک نکته که ممکن است مفید باشد این است که به راه‌حل ارسال‌شده نگاه کنید. ممکن است از روشی استفاده کرده باشد که به ذهن شما نرسیده بود، و آن روش ممکن است حل آن تمرین را برایتان جذاب‌تر کند. اما اگر به کد نگاه کردید و هنوز علاقه‌ای به حل تمرین نداشتید، هیچ اتفاق بدی نمی‌افتد. صرفاً به این دلیل که به یک درخواست منتورینگ نگاه کرده‌اید، لازم نیست روی دکمه‌ی «Start mentoring» کلیک کنید.