أولاً، بضع كلمات عن الدورة التدريبية نفسها. قبل أن تبدأ الدورة، تم تكليف طلابنا بمهمة "ما قبل العمل" - والتي احتوت على تعليمات وتمارين يجب إكمالها قبل الدورة. وشملت مهامهم تثبيت نظام لينكس، والتعرف على محطة طرفية وبعض أساسيات HTML و CSS و Git.
الحسابات
على مدار الأشهر الأربعة التالية كنا نلتقي كل أسبوعين وخطوة بخطوة كنا نكتشف عالم روبي الرائع وآخرون, جافا سكريبت وبعض الأدوات الشائعة لتطبيقات RoR مثل Devise أو Pundit أو Sidekiq أو Carriewave.
وكان لكل طالب أيضاً مرشداً مسؤولاً عن تحفيز الطلاب والتحقق من عملهم بين الاجتماعات.
خطة الهجوم
بصفتي مدرسًا، جئت مستعدًا بخبرة 3 سنوات من الخبرة مع Ruby on Rails، و10 سنوات من الخبرة في البرمجة بشكل عام وبعض العروض التقديمية التي تحتوي على مشكلات وتمارين للقيام بها.
وباستثناء دورة قصيرة في إدارة لينكس كنت قد درستها من قبل، لم تكن لدي أي خبرة في التدريس. أما بالنسبة للطلاب، فقد كنت أعلم أن عددهم سيكون عشرة طلاب فقط وأنهم يأتون من خلفيات مختلفة جدًا، فبالنسبة لبعضهم كانت هذه أول مرة يتعلمون فيها البرمجة، بينما حاول البعض الآخر تعلم لغة C أو Ruby بمفردهم قبل التسجيل في الدورة.
قررت أن أتخذ قرارين - سأتحلى بالصبر وسأشرح كل شيء إذا لزم الأمر (لا "لقد غطيناها بالفعل"). لقد صمد القرار الأول أمام اختبار الزمن، لكن القرار الثاني - من الواضح تمامًا - لم يصمد. قررت ألا أقوم بأي تحضير خاص فيما يتعلق بالأشياء التي سأقوم بتدريسها - فأنا أعمل مع روبي/ريلز كل يوم وأشعر بثقة كبيرة في مهاراتي في هذا المجال. على الأكثر، قرأت العروض التقديمية التي كانت لدي.
التحدي
أحد الأشياء الأولى التي أصبحت واضحة تمامًا بالنسبة لي بعد بداية الدورة التدريبية مباشرةً - لا يمكنك شرح كل شيء. إنه إدراك محزن للغاية بالنسبة لشخص مثلي يحب التعمق واكتشاف كيفية عمل الأشياء، ولكن في الوقت المحدود للقاء واحد لا يوجد سوى الكثير مما يمكنك تعليمه ويمكن للطلاب تذكره. اتضح أنه يمكنك أن تكون مبرمج روبي محترمًا جدًا دون أن تعرف بالضبط كيف يتم تمثيل المصفوفات في الذاكرة أو كيف يعمل Devise بالضبط.
كانت الدروس تُعقد أيام السبت والأحد من الساعة 9 صباحًا إلى 5 مساءً. من المهم أن تدرك أن التدريس عمل مرهق للغاية - فبالإضافة إلى شرح المادة، عليك أيضًا أن تكون مستعدًا دائمًا للإجابة عن الأسئلة ذات الصلة (أو غير ذات الصلة) وحل مختلف المشاكل التي تواجه طلابك.
القهوة صديقتك، لكن الأهم من ذلك هو الصبر المذكور أعلاه. بالنسبة للأشخاص الذين لم يسبق لهم البرمجة من قبل، فإن المفاهيم الواضحة للمبرمجين - مثل الحلقات أو الأنواع أو حتى المتغيرات - تحتاج إلى التعلم وهي ليست عملية فورية. إذا كنت تبرمج منذ عشرين عامًا، وتعتبر الرياضيات سهلة، ويمكنك سرد جميع نماذج البرمجة المعروفة في منتصف الليل، فقد يكون من الصعب أن تضع نفسك مكان شخص ليس متأكدًا حقًا من أي جانب من علامة يساوي التي يقع عليها اسم المتغير. لكن من الضروري أن تفعل ذلك. تصبح المفاهيم الأساسية مثل المتغيرات أو الحلقات أو المصفوفات طبيعية جدًا لدرجة أنه من الصعب فهم كيف يمكن لشخص ما ألا يفهمها على الفور، لكنها أصعب مما تبدو عليه بالنسبة لنا "نحن المبرمجين".
كانت الصعوبة الإضافية، خاصة في بداية الدورة، هي شرح تلك المفاهيم بحيث تكون مفهومة جيدًا. في رأيي أنه من غير الممكن تعلم الريلز دون تعلم روبي - على الرغم من أنني أعلم أن البعض قد يجادل في أن الأمر ليس كذلك. صحيح أن Rails لها أنماطها الخاصة ويمكن تذكر الكثير من الأشياء بدلاً من تعلمها في البداية. ومع ذلك، أعتقد أنه من أجل أن تصبح مطور RoR واعٍ، فإن الفهم المعتدل لـ Ruby أو OOP أو SQL أمر لا بد منه. إن تعليم الناس البرمجة مختلف تمامًا عن تعليم Rails - بينما في Rails هناك الكثير مما يمكن أن تتوقعه في البرمجة يمكن أن يكون مقبولًا أو مؤمنًا به (لا يحتاج أحد إلى معرفة كيفية عمل عمليات الاسترجاع في البداية - فقط ما يمكن أن يفعله)، يجب شرح مفاهيم البرمجة بمزيد من التفصيل.
إشراك القوة
كيف يمكن للمرء أن يفعل ذلك إذن؟
بصبر.
ربما يبدو الأمر وكأنني أكرر نفسي طوال الوقت، لكنني لا أستطيع التأكيد بما فيه الكفاية على مدى أهمية الصبر. حتى طلابي الأكثر حماسًا معروفون بارتكاب خطأ نحوي هنا وهناك - إنه جزء من عملية التعلم الطبيعية وليس هناك ما يمكن أن يفعله المعلم سوى أن يوضح لهم ماهية الخطأ وكيفية إصلاحه. بمرور الوقت، سيتعلمون إصلاحها من تلقاء أنفسهم، لكن هذا سيستغرق أكثر من خطأ أو خطأين.
شيء آخر يجب ملاحظته هو أن روبي ليس سهلاً كما يبدو. إذا بدأت بتعلم روبي بمعرفة C/Java/Python، ربما يبدو كل شيء نظيفًا ولطيفًا وبسيطًا. لكن حاول التفكير في الأمر وستلاحظ ذلك:
- ماذا عن الأقواس؟ هل يجب أن أستخدمهم؟ ألا يجب أن أستخدمها؟
- ما هذا
ذاتي
شيء؟ في بعض الأحيان أضطر إلى استخدامه (على سبيل المثال. أتر_كاتب
– الذات.متغير = ...
)، وأحيانًا لا أفعل (أتر_قارئ
– متغير
) وأحيانًا لا أستطيع! (خاص Def some_method
– ذاتي.بعض_الطريقة
سيؤدي إلى حدوث خطأ)
- الكتل. أراهن أنه حتى بعض المبرمجين المتمرسين (من لغات مختلفة) سيحتاجون إلى لحظة أكثر من المتوقع لفهم
#inject
بصرف النظر عن الإصلاح البسيط للأخطاء، هناك مشكلة نقل فهمك للأشياء إلى طلابك. للقيام بذلك، ستحتاج إلى الكثير من المرونة. اكتفى بعض الطلاب بكون Array مجرد قائمة مرتبة من العناصر. بينما احتاج آخرون إلى المزيد من التشبيه المرئي، مثل رف به أماكن مرقمة يمكنك وضع الأشياء عليها. وجدت نفسي أشرح نفس الأشياء عدة مرات بطرق مختلفة - وهو تمرين صعب للغاية!
ولكن، كما قلت من قبل، لا يمكنك شرح كل شيء. عندما كنت أشرح العلاقات في Rails، كان الأمر أشبه بـ "هذه هي الطريقة التي تقوم بها، وهي تتيح لك القيام بذلك وذاك. تريد ذلك، إنه رائع". لحسن الحظ لم يسألني أحد عن كيفية عمل ذلك - لا أعتقد أن المطورين المبتدئين بحاجة إلى معرفة الانعكاسات.
التموضع الظرفي
ونظرًا لشكل دورتنا (اجتماعات في نهاية كل أسبوع من كل أسبوعين، وفترات الراحة الطويلة) كان علينا التأكد من أن الفترات بين عطلات نهاية الأسبوع تلك مثمرة لطلابنا - فبدون ممارستهم في ذلك الوقت لن تعمل الدورة على الإطلاق.
وافق بعض زملائي في العمل على أن يكونوا مرشدين للطلاب في الدورة. كان عمل الموجهين يتمثل في التحقق من التمارين التي تم تعيينها خلال اجتماعات نهاية الأسبوع والمساعدة في حل المشكلات التي كانت تنشأ أثناء إكمالها. كان الطلاب يتواصلون مع الموجهين عبر Slack.
كنت مرشدًا لاثنين من طلابي. لقد كان شكلاً مختلفًا بشكل كبير من أشكال التدريس - ومليئًا بالمزالق الخاصة به. أحد الأشياء التي أدركتها بعد فوات الأوان هو أن المبرمج الجيد يجب أن يكون مستقلاً - يجب على الأقل أن يحاول حل المشاكل بنفسه قبل طلب المساعدة. كما أن التواجد على Slack طوال الوقت لم يستغرق الكثير من وقتي فحسب، بل لم يكن ذلك مصدر إلهام لمثل هذه الاستقلالية.
لا تفهمني بشكل خاطئ - الكثير من الأسئلة التي طُرحت عليّ كمرشد كانت صحيحة والإجابة عليها كانت بمثابة توسيع للمعرفة للطلاب. إلا أنه من السهل جدًا الانتقال إلى "وضع المعلم" - وشرح جميع المشكلات مرة أخرى من اجتماعات نهاية الأسبوع. من وجهة نظر اليوم، أعتقد أن دور المرشد هو إلقاء نظرة عامة وتوفير روابط مفيدة وطرح بعض الأسئلة التي قد تساعد في إيجاد الحل. قد يحدث الشرح من حين لآخر، ولكن لا ينبغي أن يكون ذلك في معظمه.
استخدام الذكاء
كل طالب مختلف عن الآخر. كانت إحدى أكبر الصعوبات هي تعديل وتيرة الدورة التدريبية لتناسب جميع الطلاب. نظرًا لتباين الخلفيات والمستوى العام لسهولة تقبل الأفكار الجديدة بين الطلاب، فإن هذه المهمة تكاد تكون مستحيلة.
كان إطارنا الزمني 9 اجتماعات - مضروبًا في يومين مضروبًا في 8 ساعات مما أعطانا 144 ساعة للانتقال من 0 إلى روبي-البطل. كان من المهم للغاية إنجاز المنهج بأكمله في هذا الوقت - وهو ما فرض في حد ذاته وتيرة سريعة جدًا. كانت الاجتماعات الثلاثة الأولى كلها عن روبي - ثم اجتماع واحد لـ SQL، ثم RoR واجتماع واحد للغة JS بينهما.
بصفتي مدرسًا، كان عليّ دائمًا أن أعرف من يفهم بشكل أو بآخر جزءًا من المادة التي أقدمها. في بعض الأحيان كان يكفي أن أسأل عما إذا كان هذا مفهوماً، وأحياناً كنت أقوم باختبارات صغيرة. على سبيل المثال، كنت أطلب من جميع طلابي أن يرسلوا لي تعريفاتهم الخاصة لمفاهيم روبي، مثل الفئة
, ذاتي
, الطريقة
, متغير
إلخ، على Slack. إذا كانت بعض المسائل غير واضحة بشكل خاص، سأعود وأحاول شرحها مرة أخرى.
الوهم والواقع
باختصار، كان التدريس مسعى أكثر صعوبة مما كنت أعتقد أنه سيكون. كما يمكن أن يكون مجزيًا للغاية. ومع ذلك، فهو عمل شاق وآثاره لا تعتمد على المعلم وحده، بل إن جهد الطالب نفسه هو الأهم في تعلمه. وهذا يجعل التدريس مختلفًا تمامًا عن البرمجة، حيث يمكنك عادةً امتلاك جميع النجاحات والإخفاقات. من المهم تذكر هذا الاختلاف.
كما أنه يجبرك أيضًا على التفكير في قضايا لا تفكر فيها عادةً - كما أن شرح الأشياء يمنحك فهمًا أفضل لها. وبهذه الطريقة يمكن أن يجعلك التدريس أيضًا مبرمجًا أفضل.