أورد في هذا المنشور أهم الخبرات التي اكتسبتها خلال تدريسي للبرمجة على أكثر من مستوى، إبتداءاً بلغات البرمجة المهددة بالانقراض كـ Pascal و Basic إلى الخوارزميات وبنى المعطيات بـ ++C وانتهاءاً بجافا والبرمجة الغرضية. بعض هذه النِقاط مهم حتى لغير المشتغلين بتدريس البرمجة نظراً لأهميتها حتى عند التعلم الذاتي للغة برمجة أو إطار عمل.
لا تستعمل وصلات الخطوط Font Ligatures Link to heading
وصلات الخطوط (Font ligatures) هي ميزة جمالية في بعض خطوط البرمجة. حيث يُدمج أكثر من رمز ليشكلوا رمزاً واحداً لتسهيل القراءة وإطفاء سمة مميزة على الكود.
تبدوا جميع الرموز للمستجدين في البرمج غريبة، فقلّما تجد أحداً قد استعمل {
أو |
أو <
من قبل. وعندما تستعمل وصلات الخطوط، تبدوا تلك الرموز أكثر غرابة، ويجدون صعوبةً في إيجادها واستعمالها بالإضافة لتشتيت انتباههم.
لنأخذ مثلاً
bool isAdult = person.age >= 18;
نلاحظ وجود علامة أكبر أو يساوي =<
وهي دمج لرمزي الأكبر والمساواة، ولكن عند استعمال الوصلات يُدمجان في رمز واحد ≤
وكذا الأمر بالنسبة لـ ||
و ==
إذ تبدوا وكأنها رمز واحد، فترى المتعلمين يسعون لإيجادها على لوحات مفاتيحهم مشتتين انتباههم عن وظيفتها واستخدامها.
انتبه عند التحدث عن الكُتل البرمجية Code Blocks Link to heading
يُقصد بالكتل البرمجية (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
Link to heading
بعد تعلّم المتحولات والجمل الشرطية كـ if
، يأتي دور جمل التحكم التكرارية (الحلقات)، ويبدأ الحديث عن حلقة for
والتركيزُ عليها باعتبارها من أكثر جمل التحكم استخداماً. ولكن إذا ما نظرنا لحلقتي for
و while
من منظور غير المبرمجين، نرى أن مبدأ وطريقة عمل while
أقرب إلى طريقة الكلام اليومي. فنقول طالما المطر يهطل، نجلس في البيت و طالما تدرس تنجح.
الأمر الآخر هو بساطة حلقة while
فهي تحتوي فقط على شرط، أما for
فهي بالغالب تحتوي على متحول له قيمة ابتدائية وشرط تكرار ومقدار زيادة للخطوة وكل منها له ترتيب معيّن.
وبما أن كلتا الحلقتين متكافئتان ويمكن التعبير عن إحداهما بالأخرى في أغلب لغات البرمجة، فمن الأحرى إتقان أسهلهما قبل الإنتقال للأصعب.
أذكِ حب البرمجة دورياً Link to heading
يتعلم الناس البرمجة لشغفهم بها ورغبتهم ببناء شيء جميل وكبير بأيديهم، ولكن هكذا مشاريع تحتاج لوقت وجهد وخبرة. بينما بضعة التعليمات التي يتعلمها المبتدئ في أول أسبوع له بالكاد تكفي. مما يسبب للكثيرين إحباطاً وفتوراً في رغبتهم للتعلم.
الحل هو إيجاد وكتابة تمارينَ لهم بحيث يكون أغلب البرنامج مكتوباً مُسبقاً وعليهم استعمال الأدوات البسيطة التي تعلموها لإتمام النقص أو حل المشكلة أو إضافة الميزة المنشودة.
بهذه الطريقة يشعرون بأن ماتعلموه أفادهم وأنهم استعملوا البرمجة لعمل لعبة أو تطبيق بأيديهم.
لا تعطني الحلّ مباشرةً، أرني المشكلة Link to heading
التكلم عن المفاهيم بشكل مجرد قلّما يعطي نتيجةً، فمهما تكلمنا عن المصفوفات وأهميتها وكيفية استعمالها، ستبقى أمراً مجرداً محصوراً في ذهن المتعلّم ببعض الأمثلة.
ولهذا أقترح قبل التكلم عن أي مفهوم جديد، طرح المشكلة التي يحلّها. فقبل التكلم عن الجمل الشرطية طلب كتابة برنامجٍ لمقارنة سعر سلعتين، وقبل الجمل الشرطية طلب برنامجٍ لعرض مربع الأرقام من 1 إلى 10 وهكذا.
قد يكون ذلك عن طريق طرح مسألة في أول الكورس والعمل على تبسيطها وتحسينها دورياً كي يرى المتعملون الحاجة لكل تلك المفاهيم التي تعلموها.
خُلاصة Link to heading
من يطلب العُلا يسهر الليالي، ولكن القليل من المراعاة للمتعلمين يقربهم ويجذبهم لعالم البرمجة، فحب التعلم في هذا المجال هو سمة كل من دخله وهو فوق كل شيء ضرورة لازمة للاستمرار فيه.