👨‍🏫 ما تعلّمته من تدريس البرمجة

أورد في هذا المنشور أهم الخبرات التي اكتسبتها خلال تدريسي للبرمجة على أكثر من مستوى، إبتداءاً بلغات البرمجة المهددة بالانقراض كـ Pascal و Basic إلى الخوارزميات وبنى المعطيات بـ ++C وانتهاءاً بجافا والبرمجة الغرضية. بعض هذه النِقاط مهم حتى لغير المشتغلين بتدريس البرمجة نظراً لأهميتها حتى عند التعلم الذاتي للغة برمجة أو إطار عمل.

لا تستعمل وصلات الخطوط Font Ligatures

وصلات الخطوط (Font ligatures) هي ميزة جمالية في بعض خطوط البرمجة. حيث يُدمج أكثر من رمز ليشكلوا رمزاً واحداً لتسهيل القراءة وإطفاء سمة مميزة على الكود.

تبدوا جميع الرموز للمستجدين في البرمج غريبة، فقلّما تجد أحداً قد استعمل { أو | أو < من قبل. وعندما تستعمل وصلات الخطوط، تبدوا تلك الرموز أكثر غرابة، ويجدون صعوبةً في إيجادها واستعمالها بالإضافة لتشتيت انتباههم.

لنأخذ مثلاً

bool isAdult = person.age >= 18;

نلاحظ وجود علامة أكبر أو يساوي =< وهي دمج لرمزي الأكبر والمساواة، ولكن عند استعمال الوصلات يُدمجان في رمز واحد وكذا الأمر بالنسبة لـ || و == إذ تبدوا وكأنها رمز واحد، فترى المتعلمين يسعون لإيجادها على لوحات مفاتيحهم مشتتين انتباههم عن وظيفتها واستخدامها.

انتبه عند التحدث عن الكُتل البرمجية Code Blocks

يُقصد بالكتل البرمجية (Code Blocks) مجموعة التعلميات التي تقع داخل تعليمة شرطية أو حلقة أو تابع إلخ. في اللغات التي تتبع أسلوب C، تبدأ الكتل البرمجية بـ { وتنتهي بـ }.

إيصال مفهوم الكُتل البرمجية ليس بسيطاً ,وله 3 أنواع رئيسية، أشهرها هو أسلوب الـ C المتبع في جافا وجافاسكربت الذي وصفناه. أمّا في بايثون، تقع التعليمات في كتلة برمجية واحدة إذا كان لها نفس المسافات الفارغة.

def my_function():
  # first code block
  for x in range(4):
    # second code block
    if x > 4:
      # third code block
      print(x)
    # back to second code block
    print(x*2)

أسلوب بايثون يُجبر المبرمج على تنسيق برنامجه بطريقة واضحة وهو شيء إيجابي. ولكنه يُصَعّب على المبتدئ معرفة فيما لو تعليمة الـ print الثانية في المثال السابق تقع داخل أو خارج تعليمة الـ if الشرطية.

أما بأسلوب C يبدو الكود أسهل على الفهم.

void my_function() {
  for (int x = 0; x < 4; x++) {
    if (x > 4) {
      cout<<x<<endl;
    }
    cout<<x*2<<endl;
  }
}

لا أدعو إلى تعليم ++C للمبتدئين بدلاً عن Python ولكني أدعو إلى توخي الحذر عند التكلم عن الكتل البرمجية.

أما الأسلوب الأخير فيشبه السابقَ ولكن عوضاً عن الأقواس تُستعمل كلمات كـ begin و end للدلالة على البداية والنهاية.

لاحظ كود البيسك التالي:

Function my_function()
  For i = 0 to 4 step 1
    If x > 4 Then
      Print x
    End If
    Print x * 2
  Next i
End Function

حلقة while أسهل من حلقة for

بعد تعلّم المتحولات والجمل الشرطية كـ if، يأتي دور جمل التحكم التكرارية (الحلقات)، ويبدأ الحديث عن حلقة for والتركيزُ عليها باعتبارها من أكثر جمل التحكم استخداماً. ولكن إذا ما نظرنا لحلقتي for و while من منظور غير المبرمجين، نرى أن مبدأ وطريقة عمل while أقرب إلى طريقة الكلام اليومي. فنقول طالما المطر يهطل، نجلس في البيت و طالما تدرس تنجح.

استخدام &lsquo;طالما&rsquo; في الحديث اليومي ليس تماماً كاستخدامها في البرمجة، ولكنه أقرب من &lsquo;من أجل&rsquo;

استخدام ‘طالما’ في الحديث اليومي ليس تماماً كاستخدامها في البرمجة، ولكنه أقرب من ‘من أجل’

الأمر الآخر هو بساطة حلقة while فهي تحتوي فقط على شرط، أما for فهي بالغالب تحتوي على متحول له قيمة ابتدائية وشرط تكرار ومقدار زيادة للخطوة وكل منها له ترتيب معيّن.

وبما أن كلتا الحلقتين متكافئتان ويمكن التعبير عن إحداهما بالأخرى في أغلب لغات البرمجة، فمن الأحرى إتقان أسهلهما قبل الإنتقال للأصعب.

أذكِ حب البرمجة دورياً

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

الحل هو إيجاد وكتابة تمارينَ لهم بحيث يكون أغلب البرنامج مكتوباً مُسبقاً وعليهم استعمال الأدوات البسيطة التي تعلموها لإتمام النقص أو حل المشكلة أو إضافة الميزة المنشودة.

بهذه الطريقة يشعرون بأن ماتعلموه أفادهم وأنهم استعملوا البرمجة لعمل لعبة أو تطبيق بأيديهم.

لا تعطني الحلّ مباشرةً، أرني المشكلة

التكلم عن المفاهيم بشكل مجرد قلّما يعطي نتيجةً، فمهما تكلمنا عن المصفوفات وأهميتها وكيفية استعمالها، ستبقى أمراً مجرداً محصوراً في ذهن المتعلّم ببعض الأمثلة.

ولهذا أقترح قبل التكلم عن أي مفهوم جديد، طرح المشكلة التي يحلّها. فقبل التكلم عن الجمل الشرطية طلب كتابة برنامجٍ لمقارنة سعر سلعتين، وقبل الجمل الشرطية طلب برنامجٍ لعرض مربع الأرقام من 1 إلى 10 وهكذا.

قد يكون ذلك عن طريق طرح مسألة في أول الكورس والعمل على تبسيطها وتحسينها دورياً كي يرى المتعملون الحاجة لكل تلك المفاهيم التي تعلموها.

خُلاصة

من يطلب العُلا يسهر الليالي، ولكن القليل من المراعاة للمتعلمين يقربهم ويجذبهم لعالم البرمجة، فحب التعلم في هذا المجال هو سمة كل من دخله وهو فوق كل شيء ضرورة لازمة للاستمرار فيه.