هذه المرة جربت مع شخص مختلف عن المقال السابق. هذه لم تكن اول session مع هذا الشخص. مشكلتي قبل ذلك مع معظم الاطفال - كما تذكرون - كانت في المتغيرات، وكيف ان الطفل لا يسمع الكلمة اصلاً وانا اقولها. لو قلت "أمر اقرأ يضع قيمة في متغير" فالطفل سيسمعها "أمر اقرأ يضع قيمة".
حلاً للإشكالية فكرت ان اصنع شيء مثل تصوير كامل للـruntime الخاصة باللغة: سبورة مثلاً تمثّل شاشة الإخراج، جدول يمثل الذاكرة (يربط بين المتغير والقيمة)، ثم حين بدأت اكتشفت ان معي بعض من هؤلاء:
فقررت الاستعانة بهم. ما هو تعريف المتغير؟ إنه واحد من هؤلاء الكائنات. وما هي صفاته؟ له اسم، ويحمل في داخله قيمة. لم اذكر قابليته للتغير او مثل ذلك: المتغير اسم وقيمة. هكذا صار لدينا شيء نتكلم عنه.
تبسيط آخر: لم احاول هذه المرة قراءة أي قيم نصية من المستخدم، أو تخزين قيم نصية في متغيرات، هذا يجعل الامر اسهل: الاعداد قيم والحروف اسماء متغيرات. أيضاً لم استخدم اسماء متغيرات من كلمات طويلة او اسماء اشخاص. دائماً حروف.
أيضاً كان لابد من الحديث عن الـsyntax: يا تلميذتي، ما بين علامات التنصيص هو نص يؤخذ كما هو، أما الذي لا يأخذ علامات تنصيص فهو اسم متغير. ما معنى اسم متغير؟ المتغيرات هي ما رأيتيه.
ماذا يفعل امر '=' ؟ لو قلت س = 12 فإنه يصنع متغير اسمه س والقيمه بداخله 12.
وهل هناك طريقة اخرى لصنع متغير؟ أمر اقرأ! انه يأتي في صورة كلمة اقرأ يليها اسم متغير، ولو اردت قراءة ارقام لابد من علامة # قبل اسم المتغير.
ولكن ماذا يقرأ؟ انه ينتظر أن يكتب المستخدم له شيئاً، وحين اضغط enter يعلم انني قد انتهيت من الكتابة، فيقرأ ما كتبته له.
ثم انه يصنع متغيراً، اسمه هو نفس اسم المتغير بعد كلمة اقرأ (هذا الجزء مهم التركيز عليه)، والقيمة بداخله هو الرقم المقروء.
جربت ان اريها صنع المتغيرات اثناء تنفيذ البرنامج، عن طريق المراقب العجيب، لكن لم يظهر المتغير لسبب ما. كانت نسخة كلمات بها خطأ :(
الآن ماذا نفعل بالمتغيرات؟؟ سوف نكتب برنامجاً يأخذ رقماً ويعرضه على الشاشة مجموعاً عليه 10. لكني اكتشفت انني لم اشرح فكرة المتغير، بل قد شرحت نصفها! إن نصف المتغير هو التخزين، بينما النصف الآخر هو الاسترجاع.
كنت دائماً، حتى وانا معيد بالكلية، اشرح القراءة من المتغير عن طريق مفهوم lookup، أي ان مفسر اللغة يبحث في الذاكرة حتى يجد القيمة ثم يحلها محل المتغير. هذه المرة قررت استخدام مفهوم آخر هو "substitution". إن الفرق بين الاثنين قد يبدو طفيفاً، لكن الامر ليس كذلك.
في الجمل التي تحتوي اسماء، استطيع ان اقول نفس الجملة بالمسمى مكان الاسم. يعني لو قلت "اذهب لجارك واضربه" وكان الجار اسمه شفيق، فكأنني بالضبط قلت "اذهب لشفيق واضربه". حتى الاسم ليس هو نفسه الشيء المسمى، إن اسمي محمد، لكن الاسم ليس هو "أنا"...انا شخص له عقل وجسم وذكريات و...و...، والاسم مجرد وسيلة للدلالة على شخصي (نعم، أنا اناقش الفلسفة مع الاطفال؛ لماذا تسأل؟؟).
...وهكذا يا تلميذتي، لو قلت س + 10، وكان المتغير س يحتوي بداخله القيمة 8، فكأني قلت بالضبط 8 + 10
والآن هل مفهوم هذا البرنامج؟
اقرأ # س
اطبع س + 10
هيا ننفذه!
هل يمكن ان تشرحي لي كل خطوة، ماذا يحدث بالضبط؟
(ملاحظة: كنت قد مللت رسم أيدي ووجه واقدام المتغيرات، فصرت ارسم "السلة" فقط...نحن هكذا نتجه تدريجياً من التصوير إلى التجريد. هذا ليس شيئاً خطأ! المهم هنا هو "تدريجياً").
الآن لو علمنا ان امر اطبع يمكنه ان يطبع اكثر من شيء لو فصلنا بينهم بفاصلة، اطبع _______ ، ________
...فهل يمكن ان تكتبي برنامج يكتب "عندك كم سنة"؟
ثم ينتظر حتى ادخل له سني
ثم يقول: العام القادم سيكون لديك <السن الصحيح>
كتبت امر اطبع، ثم حين بدأت تكتب امر اقرأ سألت "أنا اقدر اسميه اي اسم صح؟".
بعد تصحيح بعض اخطاء الsyntax، تم تنفيذ البرنامج، ثم طلبت ان تشرحه لي (صرت مصرّاً على هذا حين اعلم احد).
البرنامج الثالث كان يشبه الأول: اقرأ رقم واطبعه مضروباً في 2، وكان بلا اخطاء.
اشعر ان هذه المرة كانت مثمرة.
ليست هناك تعليقات:
إرسال تعليق