مجموعة متنوعة من النصائح للإرشاد
من أكبر ما يعينك على الإرشاد أن يكون لديك ملف تحتفظ فيه بملاحظات لكل تمرين تُرشد فيه. قد تجد أن كثيرًا من الحلول يمكن أن تستفيد من الاقتراحات نفسها، لذا فإن الاحتفاظ بالملاحظات يغنيك عن كتابة الاقتراحات نفسها من ذاكرتك في كل مرة. وإذا كانت الاقتراحات في مكان واحد، أمكنك مواصلة صقلها مع الوقت لتصبح أوضح.
إذا لم تكن متأكدًا من كيفية البدء في ملاحظاتك، فقد تجد ملف mentoring.md الخاص بتمرين مسارك ضمن exercism/website-copy/tracks.
وإذا كان موجودًا، فقد يتضمن أمثلة على حلول معقولة، إلى جانب اقتراحات شائعة ونقاط للنقاش تحفّز مزيدًا من الحوار.
وإذا لم يكن موجودًا، فقد ترغب في العودة وإنشائه بعد أن تُنشئ ملف ملاحظاتك الخاص بذلك التمرين.
كذلك، حتى لو كنت تُرشد في لغة واحدة الآن، فقد تُرشد في لغات أخرى مستقبلًا. وقد يساعدك أن تنظّم ملاحظات إرشادك حسب المسار وكذلك حسب اسم التمرين، فالمسارات المختلفة غالبًا ما تتطلب اقتراحات مختلفة للتمرين نفسه.
ملاحظات الإرشاد مفيدة، سواء أرشدت في التمرين كثيرًا أو قليلًا. فإذا كنت تُرشد فيه كثيرًا، فهي توفّر عليك الكثير من الكتابة من الصفر، إذ يمكنك ببساطة النسخ واللصق من ملاحظاتك. وإذا كنت تُرشد فيه قليلًا، فهي تذكّرك باقتراحات قد تكون نسيتها في الأسابيع أو الأشهر التي مرّت منذ آخر مرة أرشدت فيها.
لا بأس أن تختلف ملاحظات الإرشاد من مرشد لآخر. إليك طريقة واحدة لتنظيمها، لكنها ليست الطريقة الوحيدة.
هنّئ المتدرب على اجتيازه الاختبارات (إن كان قد اجتازها).
إذا ظلّ التمرين في قائمة الانتظار بضعة أيام، فربما تحدّث عن ذلك بشيء مثل:
أعتذر عن التأخير في ردّ أحدهم عليك. يوجد حاليًا نقص في مرشدي JavaScript النشطين لتمرين
Resistor Color Duo.
عدّد ما يعجبك في حل المتدرب. على سبيل المثال:
يعجبني أن هذا الحل موجز وسهل القراءة.
يعجبني استخدام indexOf.
يعجبني أن هذا الحل يستخدم أسلوب (first * 10) + second لتجنّب التحويل من عدد إلى سلسلة نصية ثم العودة إلى عدد.
يعجبني أن هذا الحل لا يستخدم الحلقات/التكرار.
يعجبني استخدام تفكيك المعامل.
ثم تأتي بعد ذلك اقتراحاتك المتكررة.
قد يفيد المتدرب كثيرًا أن تُرفق رابطًا لكل ميزة لغوية جديدة تقدّمها. على سبيل المثال:
ليس ضروريًا لهذا التمرين، لكن ربما فكّر في تحويل الدالة إلى دالة سهمية.
رغم أننا لا نريد كشف الحل، فإن المتدرب يتعلّم أحيانًا أفضل بالمثال. ووضع مقتطف من الكود في قسم تفاصيل مطويّ يمكن أن يوفّر ذلك المثال، ويمكن للمتدرب أن يختار توسيعه أو لا. على سبيل المثال:
<details><summary>Spoiler Example</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. وإلى جانب مدى التزام كودهم بالأساليب الاصطلاحية للغة، يهتم متدربو اللغات الأخرى أيضًا غالبًا بكفاءة كودهم.
قياس الأداء ليس شيئًا يُتوقَّع من المرشد القيام به. غير أن المتدربين غالبًا ما يُعجبون بشكل خاص بمقارنة قياس أداء حلهم مع أساليب أخرى.
يُعدّ Go مسارًا ملائمًا بشكل خاص لقياس الأداء، إذ تُضمَّن قياسات الأداء غالبًا في ملف الاختبار. وقد تتطلب لغات أخرى بعض البحث لتحديد الأسلوب الأنسب لك. فمثلًا، إذا كنت تستخدم المحرر الإلكتروني فقط، فستبحث عن مكان لتشغيل قياسات الأداء على الإنترنت. على سبيل المثال، JSBench.me أداة لقياس الأداء على الإنترنت خاصة بـ JavaScript.
وإذا كنت تشغّل الكود محليًا، فأمامك خيار تنزيل برنامج لقياس الأداء يمكنك تشغيله على جهازك. على سبيل المثال، يمكن استخدام Criterion في Rust، أو cargo bench مع اختبارات قياس الأداء.
توجد على الأقل بضع طرق لتتبّع قياسات الأداء. إحدى الطرق أن تحتفظ بقائمة مستمرة بكل ما تقيس أداءه، لكنها قد تصبح صعبة التعامل إذا طالت القائمة. وطريقة أخرى أن تحتفظ بقائمة بقياسات أداء تمثيلية لمختلف الأساليب. غالبًا ما يرغب المتدربون في رؤية كود الأساليب الأسرع، لذا إذا نُشر أسلوب أسرع، فسيُقدَّر كثيرًا أن توفّر رابطًا إليه.
إذا قدّمت رابطًا لحل قِست أداءه، فتأكد من تقديم رابط للحل المنشور وليس لجلسة الإرشاد. فليست كل الحلول التي تُرشَّد تُنشر.
قد تجد بعض ميزات اللغة التي تعالجها في أكثر من تمرين. وعندما تهمّ بنسخ اقتراح من ملف إلى آخر، فلعلّك تفكّر في وضعه في ملف خاص به بدلًا من ذلك. ومرة أخرى، من مزايا إبقاء الاقتراح في مكان واحد أن ذلك يسهّل صقله مع الوقت. كما يسهّل العثور عليه عند استخدامه في تمرين لم تستخدمه فيه من قبل. فبدلًا من محاولة تذكّر التمرين الذي عالجت فيه الاقتراح سابقًا، يمكنك الذهاب مباشرة إلى ملف الاقتراح نفسه.
يُشجَّع المتدربون على تحديد ما يتوقعون الحصول عليه من جلسة الإرشاد. وغالبًا ما يعبّرون عن ذلك في صورة سؤال. إذا كان السؤال مما لا تعرف إجابته ولا تهتم به، فلا بأس أن تترك طلب الإرشاد لمرشد آخر.
وإذا كنت لا تعرف الإجابة لكنك ترغب في إيجادها، فقد يكون الأفضل ألا تتناول طلب الإرشاد حتى تتعلّم الإجابة. وإذا كان طلب الإرشاد قد ذهب بحلول ذلك الوقت، فقد تعلّمت شيئًا على الأقل ولم تُبقِ المتدرب منتظرًا.
وقد يكون من الاستثناءات لذلك أن يكون طلب الإرشاد في قائمة الانتظار منذ عدة أيام أو أكثر. في تلك الحالة قد ترغب في تناول طلب الإرشاد وتقديم ما تستطيع من تغذية راجعة، وإخبار المتدرب بأنك ستعود إليه بشأن سؤاله. وبالطبع، من المهم أن تتابع ذلك، إما لإخبار المتدرب بالإجابة، وإما لإبلاغه بأنك لم تجدها. وإذا لم تجد الإجابة، فقد يفيد المتدرب أن تصف الطرق التي سلكتها لمحاولة إيجادها. وقد يردّ المتدرب بطرق أخرى لمحاولة إيجاد الإجابة. وبينكما معًا، قد تُوجد الإجابة.
إذا استنفدت كل الطرق التي تعرفها لإيجاد الإجابة، يمكنك أن تقترح على المتدرب أن ينهي المناقشة ويعيد إرسال طلبه على أمل أن يقدّم مرشد آخر الإجابة. وإذا أراد المتدرب، يمكنه أن ينشر في المناقشة المنتهية ليشاطرَك الإجابة حين يتعلّمها. وبالمثل، إذا تعلّمت الإجابة لاحقًا، يمكنك العودة إلى المناقشة المنتهية وإخبار المتدرب بها.
وإذا كنت تعرف الإجابة وترغب في الإجابة عنها، فالمكان المناسب لذلك هو بين إخبار الطالب بما يعجبك في حله وتقديم اقتراحات بأساليب أخرى.
قد يفشل الكود إما لأنه لا يجتاز كل الاختبارات، وإما لأنه لا يُترجَم أو لا يُرضي المفسّر.
يختلف المرشدون في ميولهم و/أو صبرهم على التعامل مع الكود الذي يفشل، وقد يتوقف ذلك إلى حد ما على طريقة عرضه، إذ لا يُعرض الكود الذي يفشل دائمًا بالطريقة نفسها.
أحيانًا يقول المتدرب إنه جرّب أسلوبًا آخر ولم ينجح، ويسأل عن سبب عدم نجاحه. وقد لا يُقدَّم الكود أصلًا، أو يُنشر في تعليق شبه غير مقروء بدلًا من نشره في محاولة.
الحل الذي يُختبر في المحرر الإلكتروني لا يمكن إرساله في طلب إرشاد إلا إذا كان قد اجتاز كل الاختبارات. ومن الأسباب في ذلك أن يتمكن المرشد من التركيز على اقتراح تحسينات أو أساليب أخرى للكود العامل الموجود. تنقيح الكود ليس بالضرورة شيئًا يرغب المرشد في القيام به أو يُتوقَّع منه. غير أن الحل الفاشل المُرسَل عبر واجهة سطر الأوامر يمكن إرساله في طلب إرشاد، مع طلب الطالب المساعدة في حلّه.
إذا لم يُقدَّم الكود الفاشل، ولم يبدُ الأسلوب الفاشل الموصوف أسلوبًا جيدًا، فقد يكفي أن تقترح، بدلًا من استخدام الأسلوب الفاشل، أسلوبًا آخر لا يكون هو الأسلوب الفاشل ولا الأسلوب الذي استخدموه ونجح. أو قد يكفي أن تشرح لماذا الأسلوب الذي استخدموه أفضل من الأسلوب الفاشل، دون الخوض في تفاصيل الـ bug الذي كان في الأسلوب الفاشل.
على سبيل المثال، من الأمور الشائعة أن يواجه المتدربون صعوبة في تمرين Robot Name. فإما أن تنتهي مهلة الاختبارات، وإما أن تفشل في توليد أسماء كافية، ويريدون معرفة كيفية إصلاح ذلك. إذا كان لديك الميل والصبر، فيمكنك بالتأكيد تحليل كودهم واقتراح كيفية معالجة المشكلة. أو يمكنك أن تشرح أن فحص الأسماء المولّدة عشوائيًا يزيد من التعارض كلما زاد عدد الأسماء المولّدة، وتقترح أن من الأساليب الأخرى توليد الأسماء بالتتابع ثم خلطها.
إذا لُصق الكود الفاشل في تعليق شبه غير مقروء، فقد ترغب في تقديم ما تستطيع من تغذية راجعة على الحل الناجح، واقتراح أن يرسلوا كود التعليق في محاولة أخرى. ويمكنك أيضًا أن تقترح على المتدرب أن يفحص أخطاء المحاولة الفاشلة كدليل على موضع المشكلة.
إذا كان الكود في محاولة فاشلة، فقد يفيد أن توجّه المتدرب إلى فحص أخطاء تشغيل الاختبار. تحتاج بعض اللغات إلى توجيه أكبر قليلًا من غيرها حول كيفية قراءة الأخطاء أو نتائج الاختبار. قد يفيد أن تقتبس جزءًا أو أكثر من الأخطاء وتشرح للطالب ما المقصود بها.
في النهاية، ليس من مسؤولية المرشد إصلاح كود المتدرب الفاشل، لكن المرشد، إن أراد، يمكنه أن يقترح على المتدرب طرقًا لإصلاحه بنفسه.
قد تسجّل للإرشاد في مسار ما، لكنك لا ترى أي تمارين في قائمته لترشد فيها. قد تظن أن هناك خطبًا ما، لكن ثمة سببين على الأقل لذلك. أحد الأسباب أن الناس قد لا يطلبون الإرشاد في المسار في الوقت الحالي. فقد يمرّ المسار أحيانًا بفترات من الخمول. وسبب آخر أن مرشدين آخرين قد يتناولون الطلبات قبل أن تراها. وهذا مرجّح الحدوث في مسار شائع له مرشدون نشطون كثيرون.
إذا كان في قائمة الانتظار طلبات كثيرة، فهناك بضع طرق للتعامل مع إرشادها. قد ترغب في أن تبدأ من الأقدم إلى الأحدث، حتى يُتعامل مع من انتظروا أطول مدة أولًا. أو قد تختار أن تبدأ من الأحدث إلى الأقدم، خاصة إذا كان الأقدم قد انتظر مدة طويلة بالفعل. وبهذه الطريقة، لا يضطر من كانوا نشطين حديثًا إلى انتظار معالجة الطلبات المتراكمة.
إذا كانت هناك طلبات متعددة للتمرين نفسه، فقد ترغب في معالجتها على دفعات من التمرين نفسه للحفاظ على التركيز، بدلًا من الانتقال من التمرين أ إلى التمرين ب ثم العودة إلى التمرين أ.
قد يظل طلب لتمرين لا يهمك جالسًا هناك لأيام أو أسابيع. يمكنك أن تختار عدم معالجته آملًا أن يتناوله مرشد آخر، أو قد يكون دافعًا لتجربة التمرين بنفسك. من الأمور التي قد تفيد أن تنظر إلى الحل المُرسَل. قد يستخدم أسلوبًا لم يخطر لك، وقد يجعل ذلك الأسلوب حلّ التمرين أكثر جذبًا لك. لكن إذا نظرت إلى الكود ولم تكن مهتمًا بعد بحل التمرين، فلا ضرر في ذلك. مجرد نظرك إلى طلب إرشاد لا يعني أن عليك النقر على زر "Start mentoring".