تتبّع الكود سطرًا بسطر: لماذا تأتي القراءة قبل الكتابة
التتبّع يعني تشغيل الكود في ذهنك سطرًا بعد سطر. لماذا يتعثر في كتابة الكود من لا يستطيع التتبّع، وكيف تشرح التتبّع بالفيديو.
بقلم فريق Chasca 5 دقائق للقراءة
تتبّع الكود يعني متابعته كما يفعل الحاسوب، سطرًا بسطر، مع تدوين قيمة كل متغير كلما تغيّرت. والطلاب الذين لا يستطيعون التتبّع بثبات يتعثرون في كتابة البرامج، ولهذا تختبره هيئات الامتحانات مباشرةً، ولهذا يرى بعض الباحثين أنه ينبغي تعليمه قبل كتابة الكود.
لماذا يهمّ التتبّع إلى هذا الحد؟
لأن كثيرًا من الطلاب ينهون مقررهم الأول في البرمجة وهم لا يستطيعون البرمجة، وضعف التتبّع جزء من السبب. ففي عام 2001، أعطى فريق عمل بقيادة Michael McCracken طلاب السنة الأولى في علوم الحاسوب في أربع جامعات تقييمًا تجريبيًا في البرمجة: وبلغ متوسط درجات الطلاب الـ216 نحو 22.89 من 110.
وسأل فريق متابعة عن السبب. فاختبر Raymond Lister وزملاؤه طلابًا من سبعة بلدان في قراءة أجزاء قصيرة من الكود وتتبّعها: توقع ما سينتجه جزء قصير من الكود، واختيار السطر الناقص في كود أوشك على الاكتمال. وكان كثيرون ضعافًا في الاثنين، وهو ما فسّره المؤلفون بأنه قبضة هشّة على المهارات التي يعتمد عليها حل المشكلات.
وقد شكّل ذلك فكرة في التدريس. ففي نظرية في التدريس لمقدمة البرمجة نُشرت عام 2019، فصل Benjamin Xie وزملاؤه في جامعة واشنطن أربع مهارات، مع وضع التتبّع أولًا، ودعوا إلى تعليم القراءة قبل الكتابة. وفي دراستهم الاستكشافية، أدّت المواد التي علّمت المهارات بهذا الترتيب إلى إتمام أعلى لتمارين التدريب وأخطاء أقل وفهم أفضل في الاختبار البعدي.
كيف يُختبر التتبّع؟
مباشرةً. فمواصفات شهادة GCSE في علوم الحاسوب في إنجلترا تضمّنه. إذ تسمّي مواصفات AQA تتبّع الكود بين المهارات التي تقيسها ورقتها الأولى، وتتوقع من الطلاب استخدام جداول التتبّع لمعرفة كيف تعمل الخوارزميات البسيطة ولماذا. وتشترط مواصفات OCR أن ينشئ الطلاب جداول التتبّع ويستخدموها لمتابعة خوارزمية، وأن يحددوا الأخطاء في الكود ويقترحوا إصلاحها. وكلتاهما تطلب جداول الحقيقة أيضًا، وتشمل مواصفات AQA استعلامات SQL بسيطة.
كيف يبدو التتبّع؟
لنأخذ سؤالًا قصيرًا من النوع الذي تسأله أوراق GCSE: ماذا يطبع هذا البرنامج؟
total = 0
for n in range(1, 5):
total += n
print(total)
يتبع التتبّع الحاسوب تغييرًا تغييرًا:
| الخطوة | n | total |
|---|---|---|
| البداية | 0 | |
| الدورة الأولى | 1 | 1 |
| الدورة الثانية | 2 | 3 |
| الدورة الثالثة | 3 | 6 |
| الدورة الرابعة | 4 | 10 |
والفكرة المهمة أن range(1, 5) تتوقف قبل 5، فتعمل الحلقة أربع مرات ويطبع البرنامج 10. والطالب الذي يجيب 15 شغّل الحلقة مرة زائدة، والشرح الجيد يقول ذلك.
لماذا يصعب تعلّم التتبّع وحدك؟
- تشغيل الكود يُظهر المخرجات، لا السبب. يرى الطالب «10» ولا يزال لا يعرف أي سطر أنتجها.
- جدول التتبّع المكتمل يعرض كل شيء دفعة واحدة، فيضيع الترتيب الذي تغيّرت به القيم، وهو لبّ الأمر.
- وقت الحصة قصير. يستطيع المعلم تتبّع مثال أو اثنين على السبورة؛ أما ورقة الواجب ففيها أكثر بكثير.
- الشروحات على الإنترنت تغطي موضوعات، لا المقطع الذي تعثر فيه الطالب بعينه، ونادرًا ما تكون بلغة الطالب مع ترك كلمات الكود كما هي.
ماذا يعرض فيديو التتبّع الجيد؟
- الكود أمام العين طوال الوقت، بجانب الحل، مع تعليم السطر الذي يجري تنفيذه.
- كل قيمة حين تتغيّر، تُقال وتُكتب بمعدل تغيير واحد في كل سطر: «i = 2 → total = 3».
- الفكرة المهمة مسمّاة: الحلقة تعمل أربع مرات، والقسمة الصحيحة تُسقط الباقي، والحالة الأساسية توقف الاستدعاء الذاتي.
- في الخطأ، السطر وسبب فشله والإصلاح. وفي تحويل الأعداد، كل قسمة على الأساس. وفي SQL، أي الصفوف تبقى ولماذا.
- المخرجات داخل مربع، ثم تحقق سريع.
- الكود يُقرأ كما ينطقه المبرمجون، بالأسماء والكلمات المفتاحية بالإنجليزية، حتى لو كان الشرح بلغة أخرى.
وإبقاء الكود والتتبّع معًا مهم. فقد وجد التحليل التلوي الذي أجراه Paul Ginns عام 2006 على 50 دراسة أن جمع المعلومات المترابطة معًا، في المكان وفي الزمان، يعطي مكاسب تعلّم كبيرة، لا سيما مع المادة المعقدة. ونتناول المزيد من هذه الأبحاث في لماذا تنجح فيديوهات السبورة البيضاء.
ماذا تفعل مهارة «Code problems»؟
نحن من نصنع Chasca، فاقرأ ما نقوله هنا مع وضع ذلك في الحسبان. تحل مهارة «Code problems» أسئلة الحوسبة على سبورة المعلم:
- أحضر الكود والسؤال مكتوبين أو ملصقين، أو صورًا أو ملف PDF أو مستندًا للورقة حتى 20 صفحة: أسئلة المخرجات، وإيجاد الأخطاء، وأنظمة الأعداد، وجداول الحقيقة، وSQL على جدول صغير.
- يبقى كودك بجانب الحل منذ البداية، منسوخًا كما هو، ويُستعرض كما يشغّله الحاسوب، مع إبراز السطر المهم.
- يُكتب التتبّع على السبورة تغييرًا تغييرًا لحظة قوله. وتُرسم جداول التتبّع وجداول الحقيقة ونتائج الاستعلامات جداول، والخوارزمية المعطاة بخطوات مخططًا انسيابيًا، والاستدعاءات الذاتية شجرة.
- تُقرأ كلمات الكود كما ينطقها المبرمجون، بالإنجليزية، داخل تعليق بلغتك، بأي من 30 راويًا أو بصوتك أنت.
- تُحَل كل إجابة مرة ثانية، على حدة، قبل وضعها داخل مربع. وإذا اختلف أي شيء، أو اختلف عن مفتاحك، تخبرك صفحة الفيديو أي سؤال تراجعه.
- اطلب أسئلة عن موضوع دون أن تقدّم أي سؤال، فيكتب لك كودًا قصيرًا بنمط الاختبارات، بلغة Python ما لم تسمِّ لغة أخرى.
لمن هي؟
لمعلمي علوم الحاسوب الذين يريدون تتبّعًا مشروحًا لكل سؤال في ورقة، وللمعلمين الخصوصيين الذين يجهّزون الطلاب لاختبارات المدرسة، وللمدرّسين في مقررات مقدمة البرمجة الذين يحتاج طلابهم إلى قراءة الكود بطلاقة قبل كتابته.
ماذا لا تفعل؟
- تشغيل كودك. يُتتبَّع كما يفعل المعلم على السبورة، ثم يُتحقق منه بحله مرة ثانية؛ ولا يُنفَّذ على حاسوب.
- رسم مخططات البوابات المنطقية بعد. جداول الحقيقة نعم؛ ورموز البوابات ليس بعد.
- تعليم لغة كاملة. هي تشرح الأسئلة، سؤالًا سؤالًا.
كيف تصنع واحدًا؟
- افتح Code problems في Chasca.
- ألصق الكود والسؤال، مع خياراته ومفتاحك إن وُجدا، أو أضف صورة أو ملف PDF للورقة.
- اختر اللغة والصوت وسبورة سوداء أو بيضاء، ثم اصنع الفيديو.
- راجع صفحة الفيديو بحثًا عن أي سؤال مُعلَّم قبل أن تشاركه.
أول فيديوهين تصنعهما مجانًا، مدة كلٍّ منهما حتى دقيقة واحدة، مع علامة مائية ودون الحاجة إلى بطاقة دفع؛ ويغطي الفيديو المجاني الأسئلة الأولى التي تتسع لها دقيقته. تبدأ الخطط من $9.99 شهريًا (الأسعار).
المصادر
- McCracken, M., Almstrum, V., Diaz, D., Guzdial, M., Hagan, D., Kolikant, Y. B.-D., Laxer, C., Thomas, L., Utting, I., & Wilusz, T. (2001). A multi-national, multi-institutional study of assessment of programming skills of first-year CS students. Working Group Reports from ITiCSE on Innovation and Technology in Computer Science Education.
- Lister, R., Adams, E. S., Fitzgerald, S., Fone, W., Hamer, J., Lindholm, M., McCartney, R., Moström, J. E., Sanders, K., Seppälä, O., Simon, B., & Thomas, L. (2004). A multi-national study of reading and tracing skills in novice programmers. ACM SIGCSE Bulletin, 36(4), 119–150.
- Xie, B., Loksa, D., Nelson, G. L., Davidson, M. J., Dong, D., Kwik, H., Tan, A. H., Hwa, L., Li, M., & Ko, A. J. (2019). A theory of instruction for introductory programming skills. Computer Science Education, 29(2–3), 205–253.
- AQA (2025). GCSE Computer Science (8525) specification, version 1.3.
- OCR. GCSE (9–1) Computer Science J277 specification.
- Ginns, P. (2006). Integrating information: A meta-analysis of the spatial contiguity and temporal contiguity effects. Learning and Instruction, 16(6), 511–525.
التفريغ النصي للفيديو ما يقوله الراوي في فيديو الشرح أعلاه الذي مدته 2:25.
In this video, we trace a Python list and convert a decimal number to binary and hexadecimal.
Question one. What is the output?
First, x equals a list containing one, two, and three.
Next, y equals x, so both names refer to the same list. The call y dot append with four adds four to that shared list. Now x and y both refer to the list containing one, two, three, and four.
The print call evaluates len of x, which is four.
Notice that assigning y equals x does not copy the list. Hence, the output is four.
Question two. Convert forty-five to binary, then to hexadecimal.
First, repeatedly divide forty-five by two, keeping each remainder. Forty-five divided by two gives twenty-two with remainder one.
Twenty-two divided by two gives eleven with remainder zero.
Eleven divided by two gives five with remainder one.
Five divided by two gives two with remainder one.
Two divided by two gives one with remainder zero.
One divided by two gives zero with remainder one.
Reading the remainders from bottom to top gives one zero one one zero one in binary. For hexadecimal, divide forty-five by sixteen to get two with remainder thirteen.
Then divide two by sixteen to get zero with remainder two.
In hexadecimal, thirteen is written as D. Reading those remainders from bottom to top gives two D. As a check, two times sixteen plus thirteen equals forty-five.
Hence, forty-five is one zero one one zero one in binary and two D in hexadecimal.
أسئلة يطرحها الناس
يعني متابعة البرنامج سطرًا بسطر كما يفعل الحاسوب، وتدوين قيمة كل متغير كلما تغيّرت، لتتوقع ما سيفعله البرنامج أو ما سيطبعه. وجدول التتبّع هو الطريقة المعتادة لتسجيل ذلك.
الأدلة تميل إلى ذلك. فنظرية في التدريس لمقدمة البرمجة نُشرت عام 2019 تضع التتبّع أولًا، وفي دراستها الاستكشافية أدّى تعليم المهارات بهذا الترتيب إلى إتمام أكبر للتمارين وأخطاء أقل.
أعطِ كل متغير، والمخرجات، عمودًا خاصًا. تقدّم في الكود سطرًا بسطر وأضف صفًا كلما تغيّرت قيمة؛ ويحمل الصف الأخير القيم النهائية والمخرجات.
لأن عليهم الاحتفاظ بكل متغير في أذهانهم أثناء متابعة الترتيب الذي ينفّذ به الحاسوب الأسطر. ووجدت دراسة عام 2004 في سبعة بلدان أن كثيرًا من المبرمجين المبتدئين ضعاف في توقع ما ستنتجه أجزاء قصيرة من الكود.
لا. تتتبّع مهارة «Code problems» الكود كما يفعل المعلم على السبورة، وتُحَل كل إجابة مرة ثانية، على حدة، قبل وضعها داخل مربع. وإذا اختلف الاثنان، تخبرك صفحة الفيديو أي سؤال تراجعه.
أسئلة المخرجات والتتبّع، وإيجاد الأخطاء وإصلاحها، وتحويل الأعداد مثل العشري إلى الثنائي، وجداول الحقيقة، واستعلامات SQL على جدول صغير. ولا يرسم مخططات البوابات المنطقية بعد.