من جن بالحب فهو عاقل و من جن بغيره فهو مجنون

إعادة النظر في اساليب تعليم البرمجة

+
منذ يناير كانون الثاني الماضي كنت انا و @ too_mitch نقوم بتدريس الطلاب في دورة في جامعه كنتاكي . لقد كانت تجربة مثيرة ومربحة،  دفعتني إلى إعادة النظر في نهجنا لتعليم الطلاب كيفية البرمجه .

المشكلة مع الدروس التقليديه للبرمجه

لم يمض وقت طويل في اول وظيفة برمجيه لي حتي أدركت أن دورات الكلية لم تعدني حقا للبرمجة في العالم الحقيقي. بالنسبة للجزء الأكبر، ركزت دورات الكلية على النظريات بدلا من الجانب العملي للبرمجة. الأشياء التي لا غنى عنها في البرمجة اليومية، والاختبار وأشياء مثل التحكم بالمصادر نادرا ما نوقشت.
جزء من هذا الشعور ملخص في هذه المشاركه . في كثير من الأحيان أجد أن الطلاب اخذوا دروس البرمجه الكائنيه علي سبيل المثال ولكن لا يعرفون كيفية تطبيق هذه الأفكار على إدارة المشاريع البرمجيه المعقده . 
مع هذه الفئة،رغبت انا و ميتش في اعطاء الطلاب فرصه لتجربه وسيله تعليميه اكثر استدامه و فعاليه .

حديث اقل و مشي اكثر

في كل دوره نقوم باعطاء الطلاب محاظره قصيره حول اهم الاساسيات التي سيحتاجونها في الامتحان المقبل . الامر الممتع انه لايهم مهما حاولنا ابلاغ الطلاب عن طرق حل الامتحان فهم لن يستوعبوا المفاهيم الا اذا واجهوا مشكله في بناء تطبيقاتهم عندها يتمكنون من استيعاب تلك المفاهيم من خلال التجربه العمليه . فبمجرد الاصطدام بالعوائق يبدؤن في البحث عن الحلول و طرح الاسئله .
كان بالامكان القاء المحاظرات كل يوم عن طريقه عمل قواعد البيانات ، و لكن الطلاب لن يستوعبوا الا اذا تركتهم يدمرون قواعد بياناتهم بانفسهم حتي يتمكنوا من فهم طريقه عملها !

اصنع سريرك

غالبا تعتمد المحاضرات الدراسيه في الكليه علي مجموعه صغيره من الامتحانات يغرض توصيل مفاهيم معينه للطلاب . عده مرات في الاسبوع يقوم الطلاب بكتابه اسطر برمجيه ثم يتم التخلص منها . بالرغم من ذلك فان المبرمج الحقيقي لا يقوم بذلك . بل يقوم بكتابه الكود ليعيش معه و يعيد صياغته و تحسينه ، فان لم تعش مع الكود الذي تقوم بكتابته فانت لاتقدر البرمجه !
في اسلوبنا الجديد ففي كل اسبوع يقوم الطلاب ببناء مشاريعهم علي ما تم عمله في الاسابيع الماضيه. و هذا يسمح لهم ببناء تطبيق يقوم بعمل واقعي و يشعرهم ببعض الملكيه و السيطره علي الكود البرمجي.
ونتيجه لذلك نشاهد الطلاب وهم يطرحون اسئله حول كيفيه عمل خاصيه معينه للتطبيق لتقوم بمهه معينه خارج ماهو مطلوب منهم في المقرر . وكمثال علي ذلك بعض الطلبه واجهته مشكله محاوله تسجيل الدخول في تطبيق ويب في كل مره يتم فيها فتح التطبيق و نتيجه لذلك فكروا في خاصيه التسجيل التلقائي للدخول .
الجانب العكسي في هذا الاسلوب هو عندما تزداد الاسطر البرمجيه و تتعقد المسائل فان خطآ واحد في تصميم البرنامج قد يعرقل اظافه المزيد من الخصائص للتطبيق .
نقوم بعمل ما بوسعنا لنساعد الطلاب علي حل مشاكلهم و تحسين تصميم كودهم البرمجي لكن في النهايه لن يتعلموا الا من خلال الكود البرمجي الذي قاموا بكتابته !

بيئه عمل واقعيه

هناك فصل دراسي في جامعه سينسناتي حيث يقوم الطلبه بكتابه برامج لتحل مشاكل رياضيه . عندما ينهون امتحان ما يقومون بطباعه الكود البرمجي مع امثله في المدخلات و المخرجات و تسليمها للمعلمين .
هدف وحيد لفصلنا الدراسي هو توفير بيئه برمجه واقعيه للطلاب .
في اليوم الاول ، قام كل طالب بعمل حساب في Github.com و قام باشتقاق مستودع المعلم ، كل طالب قام بعمل كود في مستودعات Nitrous.io و قام برفع الكود الناتج الي Github مره اخري . و كلما واجه الطالب مشكله قام بالتبليغ لنفسه عن تلك العلل في حسابه حيث يتشارك الطلاب في حل العلل لبعضهم البعض !
الحلول التي يوفرها الطلاب لبعضهم البعض هي بقدر من الفائده التي يوفرها المحاظر للطلاب. يدرك الطلاب الان ان قيامهم بتحديث مستودعاتهم يسمح للطلاب بمراجعه ما كتبوه و مساعدتهم في تطويره و حل مشاكله و التعليق عليه .

روح المغامره

لقد كانت تجربه مثيره لي و لميتش ، كان الطلاب يمضون غالب وقتهم بدون محاظر . اقتصر دورنا علي اعطاء الدرجات النهائيه . بلاشك الكثير من الطلاب يشعرون بالتحدي في هذا الفصل مقارنه بالفصول الاخري. هذا الاسلوب الجديد خلق نوع من التحدي و الرغبه للطلاب لبناء تطبيقات جديده بينما الاخرون مازالوا يبحثون عن افضل طريقه للبدء في تعلم البرمجه . نشعر بالرضا فيما حققناه لهذه اللحظه !

-- المصدر : http://gaslight.co/blog/rethinking-our-approach-to-teaching-programming