‏إظهار الرسائل ذات التسميات education. إظهار كافة الرسائل
‏إظهار الرسائل ذات التسميات education. إظهار كافة الرسائل

الثلاثاء، 25 مارس 2025

ما الجديد في كلمات، إصدارة فبراير 2025؟

 رسومات بطريقة Double buffering

 كانت الاطياف sprites هي الوسيلة الوحيدة للحركة والالعاب في كلمات، لكن الآن اضفنا وسيلة اخرى شبيهة بمكتبات الالعاب المعروفة عن طريق روتينات جهز.الرسم،() ابدأ.الرسم()،  انه.الرسم() ، ويستخدمون كالآتي:

جهز.الرسم()
كرر :
    ت = ابدأ.الرسم()
    -- ارسم ما تريد هنا على شاشة خاوية
    -- ت هو الوقت من الكادر السابق (time since past frame/ delta_t)

    انه.الرسم()
تابع 

هناك مثال لهذا الاسلوب مرفق مع كلمات هو cat chasing mouse


 

ألطف على الCPU

  جاءني قديما شكاوى من المستخدمين ان تنفيذ برامج كلمات يرفع جدا من صوت مروحة الCPU في اجهزتهم، وقد احتجت لتفتيش الكود الخاصة بالvirtual machine سطرا سطرا حتى عرفت سبب المشكلة (وقمت بحله).

 أمر ارسم.نص

 الطريقة الوحيدة لعرض النصوص في كلمات كانت دوماً أمر اطبع ، الآن نضيف امر ارسم.نص الذي يتيح امكانيات اكثر بكثير. صيغته كالآتي:

ارسم.نص النص في (س، ص)، اللون، الحجم، الخط

مثلاً

ارسم.نص "مرحبا" في (100، 100)، 7، 12،  "Tahoma"

 

كالعادة اللون والحجم والخط اختياريون 

 


(غالبا) اخطاء جديدة
 
لم انشر اصدارات لهذا المشروع منذ 2013 (عشر سنوات متوقفة عن النشر ولاتزال لا مثيل لها!)، لذلك اتوقع bugs يمينا ويساراً. سوف يسعدني قراءة تقارير بالأخطاء من المستخدمين لو كان هناك من لا يزال يقرأ هذه المدونة.
 
هل هذا كل شيء؟ أليس هذا بقليل؟

انا فقط انفض التراب عن هذا المشروع، لم أبدأ التطوير الحقيقي بعد. 
 
ولكي أكون صريحا معكم، المشاكل التي جعلتني اوقف مشاريعي لم تحل بعد، وقد تجدوني بعد اسبوع مثلا عدت للانغلاق من جديد.
 
لو فعلت هذا سيكون بالرغم مني. انا احب النهضة :(
 
هذا هو موقع اللغة: https://kalimat-lang.com

السبت، 1 يونيو 2013

عن اللغة اليابانية (2)

لا تنخدع بعنوان المقال، فموضوعنا الحقيقي ليس اللغة اليابانية بل أساليب التعليم المبتكرة. القضية أننا سنأتي بمهمة صعبة (تعلم عدد كبير من رموز الكانجي المستخدمة في اليابانية) ثم نأتي بأسلوب مبتكر يجعل الصعب سهلا، وربما في وسط الرحلة نكتشف شيئاً أو اثنين عن تطوير أساليب التعليم!

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

قصص ومشاهد

 رموز الكانجي بالآلاف، معظمها رموز مركّبة من رموز أصغر. كيف نتذكر تركيب الرموز على بعضها؟ حين بدأت تعلم الكانجي وجدت نفسي أخترع جملاً تذكرني لماذا - مثلاً - رمز "أذن" + رمز "بوابة" = رمز "يسمع". إنه أمر جميل ويجعلني أشعر أنني أقرأ بيتَ شعرٍ صغيراً مع كل حرف أتعلمه.

هناك من نقّح هذا الأسلوب ولم يكتف بجعلها جملاً تذكيرية بل جعلها قصصاً (أو مشاهداً من قصص) مثيرة للخيال، بحيث تصبح الرموز المختلفة هي الشخصيات والكواليس في المشهد، فإن وصفت المشهد رسمت الحرف. هذه الطريقة معروفة بإسم طريقة هِيْسج Heisig method وهناك الكثير ممن يتعلمون اليابانية بها.

سوف نتعلم الآن سوياً بعض رموز الكانجي لأن أفضل طريقة لشرح الأسلوب الجديد هي استخدامه! بعد أن ننتهي من جولتنا عبر الرموز سوف نناقش "الفلسفة التعليمية" من وراء الأسلوب الجديد، ثم نقدم خاتمة.

ملاحظات: (1) القصص في الجزء القادم بعضها من تصميم هيسج نفسه، وبعضها جمعتها من على الإنترنت من أشخاص يتبعون نفس الأسلوب، وبعضها من تصميمي. (2) أنا مازلت مبتدئاً، وقد يكون هناك أخطاء في ما يلي لأي سبب.

جولة عبر الكانجي

هذا الرمز يعني "فم"، وقد يعني أحيانا "فتحة"، مثلما يقول العرب على الفم "ثغر" أحياناً.
هذا الرمز معناه "شمس" أو "يوم". تذكر أنه في الكانجي تصير الدوائر مستطيلات. ألا يرسم الاطفال الشمس بابتسامة؟ هنا نجد دائرة فيها خط مثل الشمس المبتسمة.
هذا الرمز معناه "عين". لو ظلّلت المستطيل الأوسط باللون الأسود لرأيت عيناً مرسومة بطريقة الأنمي اليابانية.
هذا الرمز يعني "أذن". يشبه العين قليلاً لكن حافته السفلى مائلة للأعلى (مثل حافة الأذن) والخطوط المتقاطعة في الركن تشبه شحمة الأذن.
هذا الرمز يعني "حقل الأرز"، مستطيل من الأرض تقسّمه قنوات الريّ. هل تعلم أن كلمة "جدول" (مثل جدول الضرب أو جدول الحصص) مصدرها جدول الماء الذي يروي الأرض؟ كأن الصفحة قد صارت هي أرض تقسمها جداول الماء جيئة وذهاباً.
هذا الرمز معناه "شجرة". واضح طبعاً.
هذا الرمز معناه "طفل"، مثل الطفل الرضيع في عربة الأطفال، وهناك بطانية صغيرة فوقة هي هنا الخط الأفقي في منتصف الرمز؛ رأسه تظهر من خارجها والشكل العام لجسمه واضح من تحتها.
هذا الرمز معناه "امرأة"، تبدو لي كأنها امرأة ارستقراطية ترتدي قبعة كما في الأفلام القديمة.
هذا الرمز معناه "شخص"، وهو واضح على ما أعتقد. حين يأتي هذا الرمز كمكوّن في رموز أعقد يمكن أن يبدو مثل النصف الأيسر من الرموز التالية: 化 休 保
هذا الرمز يمثل الرقم عشرة، مثل الأرقام الرومانية التي ترمز للعشرة بالحرف X. يبدو أن الشعوب القديمة تحب التعبير عن العشرة بالخطوط المتقاطعة.
هذا الرمز يعني "قوة".
هذا الرمز يعني "بوابة"، وهو واضح: البوابة الحديدية التي تفتح وتغلق بالمحاور على اليمين وعلى اليسار.
هذا الرمز يعني "تاج"، لكنه (على ما أعتقد) في أصله الصيني يعني "سقف"، تذكر هذا حين نقوم بتركيبه مع رموز أخرى!
هذا ليس رمزاً مستقلاً لكنه قطعة من رموز أعقد؛ سوف نعتبره يمثل أرجلاً.
هذا أول رمز مركّب نراه، ومعناه "يرى". الأرجل تدل هنا على النشاط، والعين النشطة ترى.
هذا الرمز معناه "قديم". أعلاه رمز الرقم عشرة وأسفله رمز الفم. ألم نقل أن الفم قد يكون أيضاً فتحة؟ الشيء القديم به عشرة ثقوب.
أما هنا فالرمز يعني "مبكر" أو "سريع". شمس وتحتها عشرة، ولو كان موعدنا من شروق الشمس إلى الساعة العاشرة فهو موعد مبكر.
هذا الرمز يعني "أبيض". ألا يقولون أن ضوء الشمس أبيض ومركب من ألوان الطيف السبعة؟ هنا نرى خطاً يخرج من الشمس، شعاع من الضوء الأبيض.
هذا الرمز يعني "مائة". الخط الأفقي في أعلاه هو الرقم واحد بالكانجي، وتحته رمز كلمة "أبيض"، لأنه حينما يبلغ الرجل مائة عام لا يتبقى له سوى شعر قليل (يمثله هنا شعرة واحدة) لونه أبيض.
هذا الرمز معناه "أخ أكبر". كيف يرى الطفل أخاه الأكبر؟ إنه الأخ الذي كثيراً ما ينصحه و ويأخذه في نزهات، لذلك فإن الأخ الأكبر بالنسبة للطفل هو نصائح وتمشية، أي فم وأرجل.
هذا الرمز معناه "أصل"، أو "أساسي"، أو "كتاب". شجرة وهناك علامة على جذرها الذي هو الأصل الذي قد نبتت منه الفروع. قصة أخرى: الكتاب أساسه الورق الذي يصنع من الشجر، والعلامة في الأسفل سببها أننا بدأنا في قطع الشجرة لكي نصنع منها كتاباً.
هذا الرمز معناه "بضاعة"، تخيل سفينة بضائع محملة بالقمح والأرز والسكر، وكل هذه الأفواه هي "المستهلكون" الذين ينتظروت البضاعة بنفاذ صبر.
وهذا الرمز معناه "يهمس"، فم هامس التفّت حوله كل آذان المستمعين وإلا لن يُسمَع ما يقول.
هذا الرمز يعني "رجل"، لأنه يعمل في الحقل بقوة.
هذا الرمز معناه "يعين"، لأنك حين تعينني تضيف عينك إلى عيني وتضيف قوّتك إلى قوّتي.
هذا الرمز معناه "يضيف" أو "يجمع"، والآن تخيل سياسي يقف على المنصة ويلقي خطبة بصوته الجهوري ليكتسب مؤيدين ويضيف قوّتهم إلى قوّتة.
هذا المشهد معناه "يبحث في الأمر" investigate، والمشهد هنا عبارة عن عين فاحصة فوقها شجرة وتحتها الرقم واحد، هذه هي عين المحقق وهو يفحص البصمات تحت شجرة، لأن هذا هو الدليل الوحيد في القضية.
هذا الرمز معناه "يسمع"، الأذن هنا هي حارس يقف عند بوابة السمع؛ فإن أراد الصوت أن يمر من البوابة ليصل للمخ فسوف يمر أولاً على الأذن.
أما هذا الرمز فمعناه "فترة"، والمشهد هنا هو الشمس وهي تشرق وتغرب في تتابع سريع مثل ضيف يمر دخولاً وخروجاً عبر البوابة.
هذا الرمز معناه "وقت الفراغ"، والأن تخيل تلميذاً يذاكر ويرى الشجرة من بعيد من خلال البوابة، وكل حين يقول لنفسه: حين يصير لدي وقت فراغ ساجري عبر هذه البوابة وألعب تحت الشجرة.
هذا الرمز معناه "مازال" أو "ليس بعد"، (مثل كلمة "لسّة" في العامية المصرية التي تتضمن المعنيين). المشهد هنا هو شجرة يوجد غصن صغير في أعلاها، يدل على استمرارية نموها.
هذا الرمز معناه "رخيص" أو "أمان"، والمشهد هو شخص يتخيل عودته إلى بيته، حيث السقف الذي يأويه وزوجته التي تنتظره، والشعور بالأمان.
وهذا الرمز يعني "أخت صغرى". هل صارت امرأة بعد؟ لا ليس بعد.
هذا الرمز يعني "حرف"، لأنه حين يبدأ الطفل في تعلم الكتابة تكون الحروف هي سقف معرفته.
وهذا الرمز معناه مخاطرة، مثل عين تنظر للشمس بدون خوف من النتيجة.
وهذا الرمز معناه "ينجز"، حقل الأرز هنا يمثل نتيجة العمل والجهد، والحقل نفسه فوق الشجرة في مشهد خيالي كأننا نقول "هيا نقطف ثمار جهدنا!".
الرمز هنا يعني "يستريح"، رجل يستريح عند شجرة.
هذا الرمز يعني "برقوق"، وهو يمثل طفلاً يقف أسفل الشجرة منتظراً حتى يسقط البرقوق ليأكله. الا يستحق البرقوق أن يكون هو الثمر الذي نخصص له رمز الطفل تحت رمز الشجرة؟
أما هذا الرمز فيعني "مشمش"، والمشهد هنا هو شخص كسول ينتظر تحت الشجرة فاتحاً فاه، فالمشمش صغير وقد يسقط فيدخل فمه مباشرةً، هكذا يظن.
وهذا الرمز معناه "يُذهَل"، وهناك رجل قد ذُهِل مما رأى فتسلق أقرب شجرة وأخذ يصيح بملء فمه ليخبر الناس بما رآه.
وهذا معناه "ينتصر" أو "يتغلّب على": الرقم عشرة تحته "أخ أكبر"..لو كان معك عشرة من إخوتك الكبار فإنك بالتأكيد ستتغلب على خصمك!

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

أربعون، هل تتخيل؟ لقد قمنا بإنجاز (果) كبير اليوم.

المهم هو التركيب
قد يبدو لأول وهلة أن هذا المقال ما هو إلا تكرار لفكرة "رموز الكانجي هي رسومات"، لكنّ الأمر ليس كذلك:

أولاً: فكرة "رموز الكانجي رسومات" لا تقدّم لنا أسلوباً عملياً يمكن تطبيقه لدراسة الكانجي، وإلا لكان الجميع يتعلمونه بسهولة.

ثانياً: الفكرة نفسها ليست صحيحة. مثلاً تعلّمنا أن مائة هي 百. قل لي: هل نحن هكذا رسمنا المائة؟

ثالثاً: الكانجي بها آلاف الرموز، منها حوالي مائتي رمز أساسيين والباقي تراكيب أعقد تستخدم الرموز السابقة. معنى هذا أن المشكلة ليست في رسم الرمز بل في "التكوين" أو "التركيب". ليست المشكلة في أن شجرة هي 木 بل المشكلة هي كيف نجمع بين رمز "شجرة" ورمز "خروف" ورمز"شمس"...الخ لنكوّن رموزاً أعقد، لهذا قلنا كل هذا الكلام عن القصص والمشاهد.

نقطة جانبية
أليس العلم كله كذلك؟ إن العلوم تركز جداً على علاقات الأشياء ببعضها البعض: البرمجة هي تراكيب من البيانات والإجراءات، والرياضيات تجد فكرة "relation"، وفكرة "function" التي هي حالة خاصة من relation، في أساسها. كل علم ترى فيه مكونات أساسية وتراكيب.

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

نقطة أخيرة: في تعلمي الشخصي لم أشعر "بالانسجام" مع كثير من القصص الموجودة لتعلم كانجي معين (بمعنى أنني لم أستطع ربط القصة بالحرف)، ووضعت بدلاً منها قصصي الخاصة التي كانت أنسب بكثير. صاحب الطريقة نفسه يقول أن خيال كل شخص مختلف عن خيال الآخر، وأن الطريقة الصحيحة هي أن يتعلم الشخص كيف يصنع قصصه بنفسه؛ هنا يدعو الأمر للتساؤل: لو قمنا بطبيق هذا الأسلوب في المدارس - أعني أسلوب تعليمي يدرس فيه كل شخص "منهجاً" مختلفاً عن الآخرين، منهجاً وليد عقله وخياله هو - فكيف يمكن تنظيم هذا الموضوع إدارياً؟ وكيف يمكن تقييم أداء الطلبة مثلاً؟ أسئلة تستحق التفكير.

الجمعة، 12 أكتوبر 2012

طيب ليه المجتمع ما بقاش فجأة مليان بطلبة العلم؟

نحن الآن في عصر الوفرة المعلوماتية. من أراد أن يتعلم سيجد مئات الكتب والدروس والفيديوهات والأوراق البحثية والبرامج والـsource code. لكن ليس الكثير يستغلون هذه الموارد. لماذا؟

هذا سؤال جاد يستحق إجابة جادة. وهذا المقال رسالة إلى كل من يريد النهضة: النهضة لن تأتي بتوزيع الأجهزة اللوحية في المدارس (وإن كنا نرحب بكل خطوة نافعة)، بل من فهم سلوك الناس ودوافعهم. إن لدينا بالفعل ما يكافيء مدرسة وجامعة ومكتبة في كل بيت متصل بالإنترنت؛ ولن تضيف الأجهزة اللوحية كثيراً إلى هذا. فكر لماذا لم يستفد أحد من الموارد الموجودة قبل أن تسارع لعمل صفقة للاستحواذ على موارد جديدة.

هل هو الوقت والمال؟

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

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

لا أقصد أنهم تافهون: ربما بعضهم كذلك لكن كثير منهم تراه يتمنى فعلاً النهضة ويتحدث عن قيمة العلم ويقارن حالنا بحال الدول الغربية...الخ. فما السبب إذاً؟

القصور الذاتي

Every object in a state of uniform motion tends to remain in that state of motion unless an external force is applied to it.
Newton's first law of motion

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

هناك جهود كثيرة مبذولة في ما يسمى التنمية البشرية، لكن لا يوجد جهد مكافيء في العلم الحقيقي. في أحسن الأحوال هناك مبادرات على غرار "مصر تقرأ" لكن لا تؤخذ هذه الأمور بجدية مثلما تؤخذ "صناع الحياة" أو غيرها. هذا يفتح الباب لنسأل: ما الأسباب التي أدت لذلك؟ ربما يحتاج هذا السؤال مقالاً آخر.

ومعظم الناس ببساطة لم يفكروا في الموارد الموجودة أو لم يسمعوا بها. كيف نخبرهم؟

وكثير من المؤسسات الفكرية النهضوية (وليس كلها) تبحث عن التوعية أكثر منها العلم. وحتى من يبحث عن العلم فيها نجده يتحدث عن العلم أكثر منها في العلم. أي أن رسالته هي "ندوة عن أهمية العلم" أكثر منها "ندوة عن الـcontext free grammars".

ولابد من البحث عن الأسباب.

"ولكن كيف سيؤثر في حياتي؟"

برامج التنمية البشرية لا تستحي من التهويل في أثرها: ان شعار كثير منها حرفياً هو "ايقظ المارد الموجود بداخلك". هم يقدمون لك فكرة أنك ستكون إنساناً أكثر نجاحاً وأقرب للسعادة وأكبر تأثيراً لو نميت نفسك على طريقتهم. أما العلم فماذا سيغير في حياتك؟

فلنفترض أنك قد قرأت وقرأت وقرأت، وتعلمت البرمجة، أو قرأت في الفيزياء، أو في التاريخ، أو في علم الفلك، أو في الاقتصاد، فماذا بعد؟

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

"ولكن العلم ممل"

الحرارة النوعية هي كمية الحرارة اللازمة لرفع درجه حرارة 1 كيلوجرام من المادة بمقدار درجه واحدة. ويرمز لها بالرمز (c) ووحداتها في النظام الدولي هي (جول/كيلوجرام/كلفن).
من ويكيبديا

لماذا أراك تحب الكتب هكذا؟ أنا لا أحب الكتب! هل رأيت كتب المدرسة؟
من حديث مع أقاربي


مشكلتنا لها نواح متعددة: بدايةً معظمنا، في أول خبرة له بالعلم، يرى العلم في الكتب المدرسية، والكتب المدرسية المصرية (وربما هذه مشكلة عالمية) تبدو بلا اتجاه ولا هدف، بل هي مجموعة من الحقائق المرصوصة بعضها بجوار بعض.

المشكلة الثانية أن العلم فعلاً - ولو خارج الكتب المدرسية - يقدم بطريقة جافة مجردة. ومعظم الذين يسعون لحل المشكلة يركزون على جزء "جافة" بأن يضيفوا الرسومات والألوان والحركة ولا يقتربون من جزء "مجردة". ما معنى الحرارة النوعية؟ لا أقصد المعنى المذكور في التعريف، ولكن المعنى مثلما نقول "حياتي لها معنى"...ما السبب الذي جعلنا نعرّف الحرارة النوعية ونضعها في الكتب؟ ما دور هذه المعادلة في سير الطبيعة وفي الاستفادة من العلم؟ ما هو الـraison d'etre لهذا القانون؟

وكيف "أشعر" بهذا القانون وليس فقط "اعرفه"؟ هذه نقطة لا ينتبه لها البعض: أن القوانين لا توجد في الورق ولكنها تتمثل في الطبيعة المحسوسة. لماذا نسلق اللحم في الماء لكن نقليه في الزيت؟ ما علاقة هذا بالحرارة النوعية؟ حتى القواعد التي تبدو مجردة مثل قواعد النحو أو البلاغة، لماذا هي كما نراها وليس بصورة أخرى؟ مثلاً لماذا نضع بعض الطلبات في صورة سؤال مثل "could you pass the salt؟"، وما الأثر النفسي لهذه الصياغة على السامع، وما سبب ذلك الأثر؟

"ولكن العلم صعب"

وحتى من يبحث عن العلم فيها نجده يتحدث عن العلم أكثر منها في العلم. أي أن رسالته هي "ندوة عن أهمية العلم" أكثر منها "ندوة عن الـcontext free grammars".
 — أنا، من جزء سابق في هذا المقال

هؤلاء يقضون الساعات على الفيسبوك، أو الفيديو جيمز، أو في الخروج، أو في الكوفي شوبس.
  — أنا برضه

 الحديث عن العلم أسهل من الدخول في التفاصيل العلمية. مشاهدة المسلسل أسهل من تعلم البرمجة. إن كنا نبحث عن الأسباب فهذا سبب.

لكني أعتقد أن الصعوبة هي شيء نسبي: في طفولتي كان كثير من الأطفال يبرمجون، وكان هناك مجلات وكتب متخصصة للأطفال المبرمجين. وكان الأطفال يصنعون الصور في الألعاب بالأكواد الhexadecimal. وكان هذا في العالم العربي مثلما كان في الغرب.

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

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

 ولن تكون النهضة العلمية بتوزيع الأجهزة اللوحية في المدارس (وإن كنا نرحب بكل خطوة نافعة)، بل من فهم سلوك الناس ودوافعهم.

الخميس، 20 سبتمبر 2012

يا مدارس يا مدارس، لزمتك ايه؟

 يا مدارس يا مدارس، قولي لي إيه لزمتك؟
ليه أروحك كل يوم، واستحملك؟
عملت إيه بالهرولة، والقسمة المطولة،
والجغرافيا والـmental arithmetic؟

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

الإجابة التقليدية لسؤال "ما الهدف" تكون غالباً مبسطة جداً: الهدف من الجامعات هو الإعداد لسوق العمل، والهدف من المدارس هو الإعداد للجامعات. هذا يتماشى مع قصة حياة كل منا. لكن هذه الإجابة المبسطة لا تفسر أشياء كثيرة. مثلاً:
  •  لماذا يعلمونهم الضرب والقسمة المطولة بينما الآلات الحاسبة متوفرة في كل مكان؟
  • لماذا أخذنا جغرافيا؟ الضغط الجوي؟ كيمياء؟
  • ما فائدة مادة الـProlog في كلية الحاسبات؛ بينما لغة البرولوج ليست شائعة في سوق العمل؟
  • وفي الواقع، ما فائدة حاسبات نفسها بينما الكورسات تملاً البلد؟
  • وما فائدة الكليات التي تدرس التاريخ مثلاً؟ أو الآدب؟ وماذا يهمنا في تطور الشعر في حقبة كذا؟ 
أفكر في هذه الأمور، وأقول هاهنا أفكاري..

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

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

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

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

لو فهمت النحو جيداً، قد يفيدك في دخول مجال اللغويات الحوسبية في المستقبل وعمل برنامج للترجمة الآلية.

لو فهمت مباديء الرياضيات، يمهد هذا لفهم مباديء الاقتصاد، وبالتالي تكون أقدر على الدخول في حوار قومي عن شكل الدولة ودورها، أو انتخاب أشخاص ذوي أفكار معينة وتجنب آخرين.

هل تفيد الخلفية العلمية الواسعة شيئاً غير هذه الأمثلة العملية؟ هنا بيت القصيد، والهدف الحقيقي من هذا المقال: الخلفية العلمية توسع فكرك.

هذا من أهم ما تقدمه المدارس والجامعات على الإطلاق. على الإطلاق!

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

اسمعك تقول أنك لم تر في حياتك أحداً تعلم هذه الأشياء. أرد فأقول لك: أليس معنى ذلك أن مقالي هذا مهم للغاية؟ :)

مثال آخر: لغة Prolog في حاسبات..
- سوف أتعلم منها أهمية كتابة برنامج يعبر عن الهدف الذي أريد تحقيقه، وليس وسيلة تنفيذ ذلك الهدف.
- سوف أتعلم منها أن البرمجة لها صور كثيرة غير الصورة المألوفة؛ وربما يدفعني هذا للتفكير في صور جديدة.
- قد أتعلم منها أنه يمكن فصل البرنامج عن وسيلة تنفيذه (أي أن نفس البرنامج يمكن تنفيذه بطرق متعددة).

مشكلة هذه الأشياء، سواء في مثال القسمة أو البرولوج، أنها أشياء لا تظهر بصورة واضحة: إنها أشياء لا أكتبها في السي في ولن تُسأل عنها في الإنترفيو، وبالتالي لا ينجذب لها الكثير. لكنها أفكار تأتي بالعباقرة..إنها أفكار تدفع المعرفة البشرية للأمام.

هل تعلم أن الشريحة الإلكترونية في جهاز الكمبيوتر تقوم بالجمع والطرح والضرب بطريقة شبيهة بما أخذت في المدرسة (لكن بالنظام الثنائي)؟ تخيل لو كانت الآلة الحاسبة موجودة وقتها ولا يتعلم أحد سوى بها، والجميع لا يعرف معنى الضرب أصلاً أو خوارزمية القيام به؛ بالنسبة له الضرب هو لغز بلا حل سوى بالآلة الحاسبة -- كيف كانت ستتطور البرمجة؟

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

أو لغة Erlang، وهي تجمع بين نموذج Actor model، نموذج نظري حوسبي، مع أفكار عن الـfault tolerance، وتم عمل أول إصدارة بها بالبرولوج (!)، لتكون أحد اللغات المفيدة التي تستخدمها شركات مثل Ericcson، Facebook، Amazon...شركات كبيرة رابحة.

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

وقتها لا يكفي أن تعرف "اقل ما يمكن لدخول سوق العمل"، بل لابد من أن تدخل في النظري والعملي، القديم والجديد، المعروف والمغمور. لابد أن تتعلم جيداً.

الخميس، 5 يوليو 2012

أنشطة فكرية للأطفال

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

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


رسم قصص مصورة

دع الطفل يكتب سيناريو القصة (كل لقطة ماذا تصف، وماذا تقول كل شخصية) ثم يحكي القصة عن طريق comic strips. دعه مسؤولاً بالكامل عن القصة، لكن لا بأس أن تقترح له أفكاراً على غرار اكتب مغامرة، اكتب قصة خيال علمي، اكتب قصة تاريخية،. اعرض عليه نماذج للقصص الموجودة وناقش الـtechniques المستخدمة فيها مثل إظهار المشهد من زوايا مختلفة، عمل زوم على الوجه في اللقطات الدرامية، ...الخ

صنع كلمات متقاطعة

 تأليف الكلمات المتقاطعة ليس شيئاً سهلاً! ارسم مربع ن×ن (حيث ن مثلاً 8، 10، أو أكثر حسب مستوى الاطفال) ثم دعهم - بإشراف منك أو بأقل إشراف ممكن - يضعون كلمات في الصفوف والأعمدة، يلاحظون كيف تتداخل الكلمات وكيفية فك هذا التداخل، أين يضعون المربعات السوداء. هناك heuristics معينة للكلمات المتقاطعة الجيدة: أن يكون الكلام المعكوس أو المبعثر قليل، أن تكون الخلايا السوداء متناثرة غير متجاورة،...الخ.

صنع ألغاز

 مثلاً يؤلف الأطفال لغز "استخرج الاختلافات الستة بين الرسمتين"، وكيف يجعلون الاختلافات خفية ومحيرة (يمكن عمل اللغز بالكمبيوتر أو الورق الشفاف لكي تكون الأجزاء الأخرى متطابقة)، 

يمكنهم تصميم ألغاز أخرى مثل المتاهات، والمتاهة الجيدة لها قواعد رياضية وهناك اجزاء من علم computer science متعلقة بتصميمها.

(لو كنت مهتماً بالعلاقة بين علوم الـalgorithms والمتاهات، أحيلك إلى هذا العرض، وهو من أجمل ما قيل في هذا الموضوع. طبعاً مع الاطفال يمكن تبسيط الأمر أو التدرج فيه).

زخارف إسلامية 

هل تعرف أن المهندس القديم في الدولة الإسلامية كان يستخدم في زخارفه شيئين فحسب: البرجل والمسطرة؟ لم يحتج بعد ذلك سوى عقله وخياله. وهل تعلم أنه هناك نظريات علمية راقية وراء هذه الزخارف، وأنه هناك باحثون في جامعات بالخارج، سواء art أو computer science أو math، يدرسون هذه الزخارف ويحللونها؟

لماذا لا نأتي بالأطفال ونأتي بالبرجل والمسطرة، ونأتي بكتاب أو اثنين عن مباديء الزخرفة الإسلامية، ونجعلهم يأخذون جولات في صنع زخارفهم وتصميماتهم؟

بعض المصادر السريعة: دروس من مصمم بريطاني مهتم بالزخارف الإسلامية، وهذه صفحة مشروع لعالم متخصص في computer graphics في جامعة كندية، الصفحة تحتوي papers عن الزخارف الإسلامية والـgraphics منها رسالة دكتوراه في هذا الموضوع. وهناك اهتمام عالمي بالمجال يمكن لمن يبحث عنه أن يجد الكثير.

ماذا سيتعلم الطفل؟

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

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

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

يتعلم الطفل أيضاً كيف يفكر في جمهوره، أي كيف يجعل القصة شيقةً أو اللغز محيراً. هذا التفكير في أثر العمل على الآخرين يفتح الباب في المستقبل لفن الصياغة المقنعة أو التفاوض أو في مجال الـuser interaction design في صناعة البرمجيات أو في تصميم المنتجات لاحتياجات المستخدم...الخ

ثم يتعلم الطفل أيضاً من هذه الأنشطة الثقة بالنفس، والفخر بإنتاجه الشخصي.

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

نعود للأفكار...

جغرافيات

لقد كان جزء من التقدم العلمي للدولة الإسلامية في الجغرافيا والخرائط. كذلك أيام النهضة الأوروبية. لماذا لا نستعيد تلك الثقافة وذلك الفكر؟ هل يمكن أن يقوم الأطفال باستكشاف مكان ما (حديقة، المدرسة...) وصنع خرائط لها؟ أعتقد أيضاً أن شيء مثل Google earth منجم ذهب لهذه الأشياء. مثلاً يمسكوا بخريطة للقاهرة ومطلوب منهم استخدامها للعثور على مكان معين على Google earth، أو "استكشاف" منطقة معينة أو حتى دولة أو دول عن طريق GE ثم رسم خريطة لها. أيضاً يمكن التفكير في الجغرافيا الفلكية: يستخدمون التلسكوب ويرسمون خريطة لقطاع معين من الفضاء بنجومه. أو الاسترشاد بالنجوم كما كان يفعل المسافرون القدامى.

هذا الكلام بالمناسبة مليء بالهندسة التحليلية وحساب المثلثات :)

Codes, cryptography, and cryptanalysis

النهاردة يا ولاد هدفنا بسيط جداً: سمير عليه يكتب رسالة بالشفرة، أحمد عليه يفكها، والرسالة حتعدي الأول على شريف ومجدي، وهم عليهم يحاولوا يعرفوا الرسالة من غير ما يكونوا عارفين الشفرة إيه!

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

ملاحظات أخيرة

رغم أن هذه الأنشطة مصنوعة ليتعلم الأطفال بالممارسة، إلا أن دور المعلم هنا حيوي جداًـ رغم أنه ظاهرياً التلاميذ هم من
 يقومون بالعمل.

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

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

ليس مطلوباً بالضرورة أن يعلهم algorithms مثلاًـ لكن حين يكون عالم هو بذلك سوف يؤثر ذلك على طريقة شرحه، وعلى الاقتراحات والافكار التي سيقدمها، وعلى تعامله مع المشاكل، وعلى وصفه الدقيق (ولو كان مبسطاً) للعمليات التي يقوم بها الأطفال، ولا عيب أن يقول بقدر الإمكان عن النظريات الحقيقية من وراء الأنشطة التي يقومون بها.

الجمعة، 29 يونيو 2012

ابحث عن الفكرة الكبيرة!

كنت أريد أن أعلم الفرقة الأولى شيئاً عن البرمجة الشيئية (OOP).

في المحاضرة الأولى لم اتطرق للـclasses اصلاً، بل كان كلامي عن الـobjects. في ذلك اليوم تعلم الطلبة ان البرنامج مكون من "كائنات" أو "أشياء"، وأن هذه الأشياء تعبر عن اجزاء مختلفة من البرنامج مثل أزرار، موظفين، أو حتى algorithms متنوعة، وأن الأشياء تتعامل مع بعضها عن طريق ارسال رسائل لبعضها البعض، ووسيلة تنفيذ الرسالة اسمها method، وكل كائن مسؤول عن الاستجابة بطريقته.

هذه هي الفكرة الكبيرة للبرمجة بالأشياء: البرنامج مكون من أشياء، وهي تتبادل الرسائل! كل شيء آخر عبارة عن تفاصيل. هناك لغات شيئية لا يوجد بها inheritance، ولا حتى classes، مثل JavaScript أو Self.

ماذا عن الديموقراطية؟ بالنسبة لي الفكرة الكبيرة هي "انتزاع السلطة من القلة وإعطاؤها للكثرة". ربما يكون هذا بصورة انتخابات، أو بشيء مثل الديموقراطية التشاركية، أو بتمكين المجتمع المدني، لكن الفكرة الكبيرة ليست في هذه التفاصيل.

أنا لست خبيراً سياسياً، وهذا الرأي رأي شخصي، لكن حتى لو فكرتي الكبيرة خاطئة، فهناك حتماً فكرة كبيرة أخرى!

الفكرة الكبيرة وراء منهج البحث العلمي (أيضاً رأي شخصي): لا تكتفِ بالرأي البشري أو أن يبدو الكلام "منطقياً"، الجأ للتجربة والملاحظة. احرص على إجراء التجربة بشكل صحيح.

ماذا عن الفكرة الكبيرة وراء البرمجة؟ يقول David Harel هذا الملخص:

Programming is not about doing; it's about causing the doing

كنت قد عبرت ذات مرة عن شيء مثل هذا: لو قررت، بدلاً من حلب البقرة، أن تخترع جهازاً لحلب الأبقار، فهذه هي البرمجة.

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

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

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

الفصل الأول: أنواع البيانات

عدد صحيح / Integer / من -2,147,483,648 إلى 2,147,483,647
قيمة منطقية / Boolean / تأخذ true أو false
قيمة احادية الدقة / Single / ...

هذه ليست البرمجة!

ولهذا فإني في لغة كلمات حاولت تقليل التفاصيل المطلوبة لبدء البرنامج: لا يوجد ضرورة للإعلان عن أنواع متغيرات، ولا دالة main، ولا الزام بعملية include. الإمكانات القوية موجودة لمن يريدها، لكنها لا تحول بين الطفل وبين الأفكار الاساسية للبرمجة.

ونرجع لأول محاضرة قدمتها في تدريب OOP: بدأت بنماذج لبرامج شهيرة (MS Word, Paint, Age of Empires). ما هي الكائنات في مثل هذه البرامج؟ كيف تتفاعل؟

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

الأربعاء، 27 يونيو 2012

كلمات والأطفال: بعض النتائج التجريبية (5)

في صورة ملاحظات سريعة، لكن مفيدة:

علمته اليوم control flow باستخدام goto. كانت ظريفة وسلسة. أحد القرارات الصحيحة مني: قدمت مثالاً به أكثر من "علامة" في نفس البرنامج، وقدمت امثلة على goto للأمام (skipping code) وgoto للخلف (repetition). اول مثال كان infinite loop لكي لا احتاج لشرح goto مع if من المرة الأولى.

حين كنت أشرح goto وسألته كيف يتصرف البرنامج هنا، قال "لو شغلنا المراقب العجيب حيحصل كذا.." وقصده "لو عملنا trace للبرنامج حيحصل كذا". شيء مثير للاهتمام جداً!

دع الطفل يجرب التفاصيل غير البرمجية ويستمتع بيها...مثلاً يختار نصوص ظريفة في الرسائل التي يعرضها على الشاشة.

قال لي "امر اقرأ بيجي دايماً قبل اطبع صح؟"، هذا لأن كل البرامج التي اخذها من قبل فيها هذا النمط. حرصت ان اظهر ان البرمجة بها حرية ان تقول أي اوامر بأي ترتيب، وان المهم في النهاية هو ان تحقق هذه الأوامر الهدف المطلوب. وجربت مثالاً امامه يأتي فيه "اطبع" قبل "اقرأ".

صار يفعل مثلي: يكتب جزءاً من البرنامج ويجرب تنفيذه، ثم يكتب المزيد، وهكذا. لا أعرف إن كان هذا بسبب الاقتداء بي أم بسبب الخبرة (ان معظم البرامج لا تكون صحيحة من اول مرة). يحتاج الأمر لتجارب للإجابة :)

بدأت أعلمه استخدام الـfunctions (وليس تعريفها) لأسباب عملية: كان البرنامج اكثر من مرة لا يعطي النتيجة الصحيحة بسبب وجود مسافات في أول أو آخر المدخلات، فعلمته دالة تقليم(س).

حاولت اشرح له boolean values، بس حاسس انها abstract أكثر من اللازم. مش متعودين كأشخاص ان "صح" و"خطأ" تكون قيم منفصلة عما تصف.

Nested ifs are a problem too, the concept of "an if statement, like any other statement, can be inside an if'" is not directly understood.

حاولت برضه اعلمه القواميس (وهي مثل الـhashtables)، فهم القواميس نفسها كان سهلاً، لكن كانت هناك مشكلتان: (1) مشاكل في شرح عملية lookup نظراً لتعقيدها وعدم وجود تشبيه مشهور يمثلها (2) لم أجد طريقة لقراءة التعبير س[أ]، فكنت كل مرة اقول "س القوسين أ" أو ما شابه :(

بالمرة اخذته في جولة سريعة في موضوع الـgraphics، إمكانية "اظهار الإحداثيات" في كلمات نفعت جداً. أنا سعيد اني اضفتها. رسمنا مثلثاً بأمر ارسم.خط.

من التجربة أدركت أيضاً أهمية لغة مثل "كلمات"، هناك أشياء كثيرة صممت فيها لأهداف تعليمية، ولا توجد في كثير من اللغات الأخرى،...ونفعت!

الجمعة، 8 يونيو 2012

الإبداع الذي كان

وكنت اقرأ كتاباً عن نظرية Piaget عن مراحل التطور المعرفي للطفل وهو ينمو. الفصل الثالث: المرحلة الحسية الحركية. منذ الميلاد وحتى سن سنتين. هذه المرحلة يقسمها الكتاب إلى ستة مراحل فرعية.

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

ثم يذكر الكتاب مثال لتجربة قام بها Piaget نفسه:
ملاحظة 167: القت جاكلين باللعبة خارج قفص اللعب البلاستيك التي كانت تلعب فيه. ولما لم تنجح، قامت بدفع القفص نفسه في الاتجاه الصحيح! كانت قد امسكت بإطار القفص بيدها بينما تمد اليد الاخرى محاولةً الامساك باللعبة، ولاحظت ان الاطار يتحرك في يدها. لقد اكتشفت انها، بدون ان تقصد، حركت الاطار في اتجاه بعيد عن المطلوب. ما ان اكتشفت ذلك حتى حاولت فوراً ان تصحح اتجاه الحركة وهكذا رأت القفص يتجه نحو الهدف.

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

بعدها بساعات، كانت جاكلين تحرك القفص فوراً كلما ارادت الامساك بشيء خارجها.

لقد ابتكرت الطفلة وسيلة جديدة لتحقيق اهدافها، لم تكن مسبوقة.لقد كانت مخترعة وهي في المرحلة العمرية الاولى، المرحلة الفرعية الخامسة، من سن 12 شهر حتى 18.

وإني أرى الناس في سن 18 سنة وقد نسوا تماماً ماذا تعني "فكرة مبتكرة غير مسبوقة". حين يتحدثون عن النهضة لابد من "تجربة" لتقليدها، ماليزية او تركية او برازيلية. حين نقول "حلول مبدعة" نقصد ابدعها آخرون: تصدير البرمجيات كما فعلت الهند، تحرير اكاديمي تقليداً لـ"أكاديمي" اخرى. ليس التقليد خطأ ولا الاستفادة من خبرات الآخرين - لكن التقليد كوسيلة حصرية للتقدم؟ سوف نكون فرضنا على انفسنا فرضاً ان يسبقنا من نقلدهم. ليس لأنهم بالضرورة افضل منا عملاً ولكن لأننا دائماً بانتظار الافكار منهم.
s
وحين ارى الجامعيين يتعلمون البرمجة، اشفق عليهم. لقد علمهم تراكم سنين في المدارس المصرية ان كل مشكلة لها حل جاهز، وكل ما عليهم هو تطبيق الحل الجاهز على المشكلة الجاهزة. والبرمجة هي العكس تماماً: البرمجة هي ان تخترع حلاً جديداً في كل مرة تكتب فيها برنامجاً. ولكي ينجح الطالب لابد ان يمر بمرحلة يلقي فيها من على اكتافه حمولة المدارس المصرية من الافكار الخاطئة، ويعود لجذوره الاختراعية كإنسان يفكر ويبتكر منذ الطفولة.

ثم نتحدث، في الفصل الرابع من الكتاب، عن المرحلة قبيل العملية (Pre-operational، والتعريب من عندي وليس بالضرورة دقيقاً) من سن 2 إلى 7 سنوات.

يتحدث الكتاب عما يسمى representation، أي اتخاذ شيء ليمثل شيئاً آخر (مثلاً اللعب بقطعة خشب كأنها سيارة). يقول الكتاب انه هناك خمسة طرق لهذا التمثيل يمارسها الطفل في تلك الفترة:
  • التقليد المؤجل: ان يحاكي الطفل موقفا قد حدث بعدها بمدة، مثل ان يلعب مع نفسه لعبة كان يمارسها معه اهله.
  • اللعب الرمزي: مثل مثال قطعة الخشب/السيارة.
  • الرسم.
  • الصور الذهنية (أي الصور التي يراها بعين خياله)
  • اللغة المنطوقة.
اللعب الرمزي ليس مجرد تسلية، يقول Piaget، ان له اثراً هاماً على تطور الطفل معرفياً. هنا نأتي لسؤال مهم: إن الطفل في هذه المرحلة يتعلم مفاهيم هامة جداً وصعبة (مثل اللغة)، بينما لم يقل له أحد أن يفعل ذلك! لم يأت احد بسبورة أو قاموس ويعلمه الكلمات التي يتحدث بها، لم يعطه احد شهادة لكي يعلم نفسه الرموز عن طريق اللعب. إنه يفعل ذلك لدوافع فيه هو.

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

يحتاج الامر للتأمل.

الأحد، 20 مايو 2012

نصف ساعة من النحو

الجمل تكون خبرية (تعطي معلومات) أو إنشائية (تفاعل مع شخص آخر، مثل نداء او استفهام). سوف نركز هنا على الجمل الخبرية.

هذه الجمل تكون بشكل عام مكونة من شيئين: (1) موضوع اتحدث عنه: انا، اخي، مصر، البحر... (2) معلومة اقدمها عن هذا الموضوع: آكل، ينام، جميلة، هاديء.

الموضوع الاساسي في الجملة اسمه المسند إليه، والمعلومة اسمها المسند، وذلك لأنني حين اقول "اخي جائع" فكأني اسندت صفة الجوع إلى أخي. في اللغة الانجليزية يسمونهما subject و predicate.

في الجملة الاسمية (التي تبدأ بإسم) مثل "البحر هاديء" يكون المسند هو الخبر (هاديء) والمسند إليه هو المبتدأ(البحر)، وفي الجمل الفعلية مثل "أكل الرجل" يكون المسند اليه - أي الموضوع الاساسي، هو الفاعل (الرجل) والمسند هو الفعل (أكل).

هذه المسندات الاربعة تكون مرفوعة. هذا الرفع اعتبره علامة أن لها أهم وضع في الجملة، فهي المكونات الأساسية لها. موضوع ومعلومة: هذه هي الجملة.

لكن في الجمل قد أريد ان اقول معلومات اضافية، مثلاً في جملة أنا أكلت:
  • ماذا أكلت بالضبط؟
  • كيف كان حالي وانا آكل؟
  • ما الظروف التي حدث فيها الأكل؟
  • لماذا أكلت؟
  • هل كان أكلاً خفيفاً أم كان أكلاً بكل معاني الكلمة؟
  • وهكذا وهكذا...
هناك طرق لاضافة هذه المعلومات:
  • لو قلت "أكلت دجاجاً" فإن دجاجاً هنا مفعول به
  • لو قلت "أكلت فرحاناً" فإن فرحاناً هي حال
  • لو قلت "أكلت نهاراً" فهذا ظرف زمان
  • لو قلت "أكلت ترفيهاً عن نفسي" فإن ترفيها هي مفعول لأجله
  • لو قلت "أكلت أكلاً" فهنا نوع من التوكيد اسمه المفعول المطلق
هذه المكونات، وغيرها، ليست أساسية تماماً في الجملة لكنها مفيدة، لذلك هي ليست مرفوعة بل لها وضع أقل قليلاً من الرفع، إنها المنصوبات.
هناك نوع ثالث من المكونات. فكر في جملة مثل "قابلت أخت زوجي". إن الزوج هنا ليس له دور في الجملة - لم يحضر المقابلة - لكن له علاقة بأحد اطراف الجملة. هذه العلاقة هي الإضافة، فقد جئت بكلمة "زوجي" واضفت لها علاقة "اخت" ليكون لدي الشيء الذي أتكلم عنه، ولذلك كلمة "أخت" هي مضاف (إعرابها مفعول به، لكنها أيضاًَ مضاف) وكلمة "زوجي" إعرابها "مضاف إليه".

الأخت هنا هي الشيء الذي له وضع في الجملة (مفعول به) لكن كلمة "زوجي" بعيدة، إنها لا هي مكون اساسي يرفع ولا معلومة تكميلية تنصب، فقط هي وسيلة لاذكر بها شيء آخر هو اخت الزوج...والكلمة هنا لا مرفوعة ولا منصوبة، إنها مجرورة.

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

تكلمنا في معظم كلامنا عن الأسماء، فماذا عن الأفعال..هل هي مرفوعة ام منصوبة أم مجرورة؟ افعال الماضي (أكل) او الامر (كل) تكون مبنية، أي لا تحمل علامات إعراب، بينما الفعل المضارع له ثلاث حالات إعرابية:

في الظروف الطبيعية يكون مرفوعاً (فهو مسند).
حين تسبقه اداة نصب مثل "أن" أو "لن" أو "كي"، يكون منصوباً، والنصب هنا يوحي بشيء..

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

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

هناك حالة ثالثة للفعل المضارع هي الجزم، وهو يحدث لو سبق الفعل احد من:

لم: لم يأكل
لام الامر: لنرحل من هنا
لا الناهية: لا تقترب!!

لماذا هي مجزومة؟ لا اعرف. اتشعر انه لأن الموضوع فيه "عجالة" نوعاً ما....

علامات الإعراب

الآن نتحدث عن شيء: كيف نعرف حالة كل كلمة في الجملة؟ لو قلت "ضرب زكي اشرف"، من الذي ضرب من؟؟

في اللغات غير المعربة مثل الانجليزية يكون الأمر بترتيب معين للكلمات، لو قلت "Zaki hit Ashraf" فمن المؤكد تماما ان زكي هو الضارب، بينما "Ashraf hit Zaki" يكون العكس. لكن اللغة العربية لغة حرة لا تلزمك بترتيب معين بل يكاد يكون الترتيب حراً تماماً..أحمد يحب العنب، يحب أحمد العنب، يحب العنب أحمد..

هذه الحرية تعطي فرصاً كثيرة للبلاغة بالتقديم والتأخير وتؤثر على المعنى، هناك فرق تشعره بين جملة مثل "ترك الجَمَل اخي الغبي" وبين "ترك اخي الغبي الجَمَل".

لكن كيف إذاً نعرف وضع كل كلمة؟ اللغة العربية تقدم علامات معينة لتخبرك ان الكلمة مرفوعة او منصوبة او مجرورة أو مجزومة.

علامة الرفع المعتادة هي الضمة لأخر حرف من الكلمة، والنصب بوضع فتحة في آخر الكلمة، والجر بالكسرة.

لكن في حالة جمع المذكر السالم يكون الرفع هكذا: مدرسون، والنصب والجر هكذا: مدرسين. في حالة جمع المؤنث السالم يكون الرفع الضمة مدرساتُ والنصب والجر بالكسرة مدرساتِ.

وفي حالة المثنى يكون الرفع بالألف "مدرسان" والنصب والجر بالياء "مدرسيْن". في كل الحالات تشعر ان الحرف "الاضعف" لغير الرفع.

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

في حالة الفعل المضارع يكون الرفع والنصب كالمعتاد، والجزم بالسكون، لكن الحرف المعتل يجزم بحذف حرف العلة: لم يمت الحلم، عنترة لم يعتدِ على احد.

وإن كان من الافعال الخمسة (على صورة يفعلان، تفعلان، يفعلون، تفعلون، تفعلين) يكون علامة نصبه وجزمه حذف النون: "أن تأكلا، هذا شيء مكلف". "اعملوا كي تأكلوا"، "لم تأكلي شيئاً يا أمي".

هناك حالات اخرى لعلامات الإعراب لكن هذا يكفي حالياً.

التوابع

التوابع هي مكونات للجملة تأخذ نفس اعراب مكون آخر تتبعه. مثلاً:

الصفة: الورد الجميل في الحديقة. كلمة جميل مرفوعة مثل الموصوف (الورد).

البدل: البدل هو - بتبسيط - نفس شيء آخر في الجملة. مثلاً "قال احمس الأول ملك مصر: أنا احب البيتزا". هنا نجد ان "احمس الاول" و"ملك مصر" هما نفس الشيء، لذلك نجد كلمة "ملك" هي بدل لكلمة "احمس". هناك انواع اخرى من البدل.

العطف: "اكلت تفاحة وفرخة"، هنا فرخة معطوفة على تفاحة وتأخذ نفس اعرابها. ادوات العطف الشهيرة: "و"، "أو"، "فـ"، "ثم".

هناك تابع آخر اسمه التوكيد، بنوعيه اللفظي والمعنوي، لكن لن نتعرض له هنا.

جمل بداخل جمل

لو انت مبرمج، فهذا شيء ستحبه: هناك recursion في معظم اللغات البشرية بحيث يمكن ان تكون جملة هي مكون في جملة اكبر.

مثلاً في الانجليزية: He told me that she heard that they went to eat a chicken

في اللغة العربية سنعطي بعض الامثلة:

يمكن ان تكون جملة في مكان الخبر: البحر [ماؤه مالح]

(سوف اضع الجملة الداخلية بين اقواس مربعة)

او يمكن ان يكون الخبر جملة فعلية: الرجل [يخاف الناس من صوته]

ويمكن ان تكون الجملة حالاً: ذهبت إلى الحديقة [صوتي مهزوز من الإثارة]

ويمكن ان تكون الجملة صفة: يجري الجندي وراء عدو [يقفز خلف الجدران]

شبه الجملة

يوجد ايضاً عنصر اسمه "شبه الجملة"، وهو إما جار ومجرور أو ظرف ومضاف إليه.

وينفع لشبه الجملة أن تكون صفة: رأيت قلما [على الارض]، رأيت قلماً [تحت السلم].
أو أن تكون خبراً: الحاسوب [تحت الطاولة]
أو ان تكون حالاً: جلس اخي [في الشارع]

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

الخميس، 3 مايو 2012

سنوات قطر 4 - اختراعات

لم اتأثر في حياتي بشخصية مثل عبقرينو...


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

ثم انه ليس مثلاً باحث في شركة، وليس استاذ جامعة، إنه مخترع. بهذه البساطة! يعيش في بيت هو في نفس الوقت ورشة، ويخترع.

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

كرات دمنا الحمراء، والبيضاء، موجودة هنا!
(جملة لا اذكرها) وتصنع الحياة!
نمضي لها إذاً، في رحلة عجيبة،
لنكشف معاً، اسرارها الغريبة،
ونعرف الحياة!
هذه هي الحياة! هذه هي الحياة!

برامج كثيرة من هذا النوع. برنامج المناهل حيث البطل الخارق ابو الحروف: اقوى من الشدة! اطول من المدة! احد من السين! اهدأ من السكون! أسرع من لمح العين!

وكان هناك برنامجاً اجنبياً مترجماً عن الإدارة. شاهدت منه اول حلقة ثم عدنا إلى مصر. هل رأيت طفلاً يحزن لأنه قد فاته برنامج عن الإدارة؟

او الكتب..كتب سلسلة Usborne الانجليزية في المدرسة، ونفس الكتب مترجمة في المكتبات. هذه صفحة من كتاب "جسمك كيف يعمل"، هناك الآن الكثيرين في مصر يقولون انهم سيطورون العلم، ويأتون بمصممي الرسوم، ومصممي الفيديو، يأتون بفوتوشوباتهم واونلايناتهم، ثم في النهاية لا يحملون شمعة لمثل هذا الكتاب المصنوع في الثمانينات، بالطريقة القديمة على الورق. تأمل:


وفي تلك الفترة كان أيضاً أفلام الرسوم المتحركة المبنية على الخيال العلمي. تعرفون طبعاً جرندايزر الآلي العملاق. كان دائماً يحيرني: كيف كان الدوق فليد يقوده؟ ان كابينة القيادة في جرندايزر تبدو هكذا:


ولكن الآلي نفسه كان يمشي ويجري ويقفز ويضرب ويقاتل بما يشبه السيف...كيف يتحكم الدوق فليد فيه ليفعل كل هذا؟

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

أليس موضوع رسالة ماجستير ظريفة في علم الـhuman computer interaction؟ حين كبرت فكرت في ثلاثة طرق:
  • شيء مثل بذلة الـmotion capture التي يستخدمونها في الافلام ثلاثية الابعاد، مغمورا في حوض ماء (ملاحظة: فكرة حوض الماء اخذتها من قصة لسوبرمان).
  • جهاز رسم مخ EEG متطور بحيث يتحكم الشخص في الآلي كأنما يتحكم في جسمه.
  • حركة بغير حرية تامة، بل مجموعة حركات جاهزة وزر لكل منها. حركة "معلبة".
عندما كبرت ورأيت الرسوم المتحركة في صورتها اليابانية، اكتشفت شيئاً لم اعرفه عن جرندايزر لأنه لم يكن واضحاً في النسخة العربية:

نعم سيدي! انها شاشة touchscreen شفافة! لا نستطيع ان نطلق عليها بالضبط augmented reality لكن...في تلك اللحظة فهمت العلاقة بين العلم والخيال. ربما يحتاج هذا الجيل افلام رسوم متحركة خاصة به، ليحلم احلاما جديدة.

ربما يكون المحور الاساسي لأفكاري، خطة النهضة، التفكير الحوسبي، مجالس العلم، الخ...هي تلك الفكرة التي أثرت في منذ الطفولة: العلم الـcasual. الاختراع. نحن الآن في مجتمع كلما اخترع احد شيئاً وجدت الناس (ما لم يتجاهلوه) يتصرفون كأنه فعل شيئاً لا يصدق، ويتساءلون عن عدم دعم المجتمع له، ويدعونه للحديث في المؤتمرات. ربما تأتي لحظة يكون الاختراع شيئاً عادياً يقوم به المجتمع كله اطفالاً وكباراً.

والاختراع ليس فقط ان تخترع تلسكوب او راديو. ماذا عن انواع جديدة من الشركات؟ انواع جديدة من العلم السياسي؟ انواع جديدة من الجامعات؟ انواع جديدة من الخوارزميات؟ انواع جديدة من طرق حكي القصص؟

او المبرمجون: ماذا لو توقفتم عن السخرية من المجتمع ومن نظام التعليم ومن ومن...وتذكرتم من انتم؟ الستم تقولون على انفسكم problem solvers؟ لماذا لا تفكرون في طرق عبقرية لحل كل المشاكل التي ترونها، بدلا من النقد حين تفشل الطرق القديمة التقليدية؟

الخميس، 26 أبريل 2012

An educational tower of programming features

I've been working on an educational programming language for children called Kalimat. One of the ideas about its design is "different concepts for different levels".

Some languages are quite easy to learn, like 80s Basic, while others try to still be easy but add structure or discipline. There's this famous Dijkstra quote (probably made in jest) about Basic ruining children's minds beyond all repair.

Well, Kalimat goes the other way by assuming "all repair" is possible, even a good thing: it starts with a language very similar to QBasic; a child can write interesting programs using only global variables, If conditions, and goto. They can learn with flowcharts if it benefits them, and they can use graphics routines.

We can call this "Level 1". Gradually, these primitive features are shed in favor of more advanced, more abstract features.

Kalimat is Arabic-based, but I'll use a hypothetical English version for the example. This is the typical 'guess the number' game:

n = random(20)
label begin
read "Guess the number:", #g
if g > n :
    print "too high!"
    goto begin
else if g < n :
    print "too low!"
    goto begin
else
    print "good job!"
done

The benefit of this model is that almost everything is visible. The child doesn't need to know the abstractions of procedure calls, or keep in their head the semantics of such calls when thinking about what to do. Commands are executed, sometimes execution jumps. Variables store numbers and sentences, and that's more or less it. Now let's move stuff on the screen or write short quiz programs.

If the child outgrows the kind of programs this model allows, they can learn looping with for and while, and further learn procedure calls. Procedures are separate from functions: this allows the teacher to talks about procedures as "taking some lines of code and giving them a name", and then enter the realm of local variables and parameter passing, and finally talk about "defining our own functions" similar to built-in functions like sin, cos, or random. Let's call that level 2.

Level 3 is OOP. While OOP is now all about abstraction, there's some bit of "concreteness" left: There is no implicit "this" or "self" reference, and like, say, Python this reference is explicit. We also borrow the "send a message" metaphor from Smalltalk. An object can respond to a message or reply to it. Mirroring procedures and functions (I admit this part looks clumsy, needs experimentation to see if it turns to actually make the teaching easier).


class Point:
    has x, y
    responds to draw( )
end

responseOf Point p to draw( ):
    drawPixel (x of p, y of p)
end 

You've probably noticed the usage of cues from natural language to make reading programs flow more naturally. We are not trying to emulate COBOL or SQL; but we believe such cues in the right dosage could help with teaching and conversations about the code. I intend for Kalimat to have something of a canonical reading form, that is when reading code aloud, there is a known way to voice expressions, definitions, ...etc

Anyway, I like the result in the code snippet:  "the response of a point P to 'draw!' is to invoke drawPixel at the x and y of P".

How about other levels? Now that the child's programming knowledge has matured, they can learn more: like for example concurrency. Kalimat uses the CSP model. First we have the launch command that takes a procedure invocation and runs it separately. It's easy to take a program that draws an animated ball and transform it into 50 concurrently moving balls, with the simple addition of a loop and a launch statement.

To coordinate between processes, we have channels and their usual operations: send, receive, and select. Those same channels are also used for the GUI library; in my opinion this simplifies GUI programming in many situations. For example to create a program where the user draws lines you could do:

while true:
    receive p1 from mouseClickChannel( )
    receive p2 from mouseClickChannel( )
    drawLine (x of p1, y of p1)-(x of p2, y of p2)
loop

The flow of execution matches the flow of user actions, no need to separate program state, and in larger programs the need for some design patterns is minimized.

Other than concurrency, Kalimat has (explicit) tail-call elimination for any ambitious teacher who wants to go into functional directions, and currently I'm working an a language-hosted PEG parsing, for people who want the children to create e.g NLP user interfaces, text-adventure games, or whatever they fancy. Kalimat is all about teaching thinking, computer science, and the fun of programming.

I did the design of Kalimat on intuition and from memories from my childhood days of programming, but I've recently found out about Piaget's well-know theory of child intellectual development stages. I'm not so sure about this, since I'm far from being a development psychologist, but there might be some fit between Kalimat's primary, abstraction-free, levels and the operational model of early childhood learning. This might be able to explain the exploding success of 80s Basic among children and allow us to take advantage of some of its characteristics.

Kalimat is open source, hosted on http://code.google.com/p/kalimat

It is Arabic-based, but I hope to have an English version for better discussion and experimentation with the global programming education community, if anyone turns to be interested.

I once made a buggy, half complete English release (here's a screenshot of it). I don't want to publicly release it at this stage, but I'd be happy to give it to anyone who requests. My email ID is samy2004 on Gmail.

السبت، 31 مارس 2012

كلمات والاطفال: بعض النتائج التجريبية

هناك تجربة تكررت مع طفلين في نفس السن تقريباً (9، 10). حدثتا في ظروف متشابهة، ولعل من المفيد أن احكيهما للإفادة. حفاظاً على الخصوصية لن اذكر مع من جربت، لكن ظروف التجربة كانت كالآتي:
  • لم تكون دروساً منتظمة بل على فترات متباعدة (ولعل هذا هو السبب الاساسي في المشاكل التي حدثت).
  • كنت اعلمهم شفاهة بلا مرجع مكتوب.
  • لكن كل منهما كان لديه نسخة مطبوعة من كتاب تحقيق الذات في كتابة البرمجيات.
لم تكن التجارب بمنهج علمي (many free variables, no control group, insufficient sampling) لكني ارى المعلومات مفيدة جداً.
كان المثال الذي احاول شرحه دائماً هو برنامج "التحية"، الذي يسأل المستخدم عن اسمه ثم يرد بقول "مرحباً يا فلان". وفي الحالتين كانت نفس المشاكل تكرر نفسها.

1- المشكلة الاولى في موضوع analytical thinking، كان كل منهما يحاول كتابة البرنامج المطلوب عن طريق تخمين مكوناته من البرامج السابقة. فكان البرناج يبدو كخليط من مجموعة الامثلة التي قلتها له في نفس الجلسة او الجلسات السابقة. اعتقد اننا هنا في نقطة جوهرية: لكي تعلم الطفل، او اي شخص، كيف يبرمج لابد أن يدرك ماهية البرمجة نفسها: وهي أن تضع هدفاً محدداً ثم تفكر كيف تعبر عن ذلك الهدف عن طريق الاوامر الاساسية الموجودة في اللغة.

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

موضوع الconcepts عن طريق الحكايات اقوى مما ظننت، ويستحق المزيد من البحث. افكر في عمل video game بها مروة والروبوت، وعليك التحكم فيه بالاوامر ليقوم بأعمال المنزل. ربما يكون هذا اكثر تصويراً من اوامر "اطبع" و"اقرأ".

2- في التجربتين الطفل لم يكن مدركاً جيداً للsyntax الخاص بكلمات، اعتقد انه كان من الافضل بكثير عمل reference من ورقة واحدة للsyntax الخاص بالاوامر الخاصة بكل درس.

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

ينبغي إجراء تجارب اخرى من دروس مبنية على تمارين مكثفة على الاوامر قبل التفكير في البرامج، مع تسجيل الملاحظات.

3- دائماً هناك مشكلة في امر اقرأ والمتغيرات. اولاً: كلمة "متغير" تمرّ دائماً من اذن وتخرج من الاخرى. هناك مصطلحات اكثر ثباتاً من "متغير": حين اقول انها اسماء فإن الامر يكون مقبولاً، وحين اضرب امثلة مثل "تيكيت مكتوب على الصندوق المخزن فيه قيمة" فإن وجه الشبه ليس دائماً مستخدما عملياً (اقصد استخدام تشبيه التيكيت في تحليل سلوك البرنامج) لكن على الاقل التشبيه نفسه مفهوم.

لا احب كلمة متغير كثيراً...إنها تركز على صفة جانبية (انه يمكن أن يتغير) بينما الاهمية الكبرى للمتغير انه اسم يدل على قيمة.

في الfunctional programming، يطلقون على هذا النوع من المتغيرات name bound to a cell..أي ان الاسم - الثابت - يشير إلى موضع تخزين، لكن من الممكن ان اغير ما اخزنه في ذلك الموضع. يعني من الآخر اخذوا تشبيه "اسم على صندوق" وجعلوه مصطلحاً علمياً رسمياً. هذا افضل؛ سأحاول تجنب موضوع "المتغير" بعد ذلك.

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

أيضاً في هذه الكود فإن القطعة البرمجية "أ" لها معنيان:
اقرأ أ
اطبع "مرحبا يا "، أ

المعنى الأول أن "أ" هو مكان التخزين الذي يجب ان تضع فيه ما قرأته من المستخدم. المعنى الثاني هو القيمة المخزنة في مكان التخزين هذا. بصورة رسمية اكثر، المعنى الأول memory address والثاني memory content. هناك لغات مثل لغة لوجو تميز نحوياً بين المعنيين:

... معناها المتغير نفسه

... معناها القيمة المخزنة فيه.

المشكلة اني لا اريد عمل هذا في كلمات لأنها مصممة لتكون سهلة للاطفال لكن قوية بما يكفي ليمكن عمل برامج قوية/تجارية بها، فلابد ان تشبه إلى حد ما اللغات التقليدية. ربما يمكنني عمل لغة "Kalimat mini" للاطفال فقط وتكون اسهل في التعلم. سأفكر.

ملاحظة اخرى: يبدو ان الافضل اعطاء المتغيرات اسماء مجردة مثل "أ"، "س"، بدلا من اسماء ذات معنى مثل "الاسم" أو - وهذه مشكلة كبيرة - "سامح" أو "كريم" ..هذا يؤدي دائماً للبس بين اسم المتغير ومعناه.

المفاجأة هي أنه - على ما يبدو - الاطفال اقدر مما تخيلت على التعامل مع التجريد. مثلاً حين كنت اشرح الامر أ=12 قلت ان أ هو اسم، وان 12 هو المسمى، أي الشيء الذي هذا اسمه. وجدت الامر مقبولاً وكنت استخدم كلمة "مسمى" بحريّة بعد ذلك.

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

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

نقطة اخيرة، انني استخدمت هذا التشبيه بتوفيق كبير: "تخيل انني قد وضعت علامة - × على عمود نور مثلا - في الشارع واتفقت مع شخصين..الأول سيأخذ الجاموسة ويربطها بجانب هذه العلامة. أما الآخر فقلت له أن يذهب لتلك العلامة وحين يجد شيئاً مربوطاً هناك يأخذه ويذبحه".

ضربت هذا المثل لأوضّح لماذا كان ينبغي استخدام نفس المتغير في السطرين في برنامج "اقرأ كذا/اطبع مرحبا يا كذا"، وصار الامر هكذا واضحاً جداً!

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

في بداية طرحي للمثال كانت العلامة هي عمود النور نفسه، لكن الطفل الذي كنت اعلمه اقترح أن تكون علامة × على احد العواميد لتمييز اي عمود هو. هذا تشبيه ادق لفكرة "اسم المتغير"، أليس كذلك؟ :)

الأربعاء، 21 مارس 2012

سياسة الدولة (1) - مجانية التعليم

كل شاب مصري يكوّن هذه النظرية عن مجانية التعليم. أنا شخصيا كونتها في فترة ما من حياتي ثم اعرضت عنها:

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

مشكلة هذه النظرية انها توحي لمن يسمعها أن صاحبها فكر في كل شيء وسد كل الثغرات، كما تشعره أنه عملي لا يردد الشعارات (فهو يرى الموضوع شعاراً)، واخيراً تشعره انه تغلب على الفكر "الاشتراكي" الخاص بالفترة السابقة في مصر. هذا الشعور بالرضا عن النفس يقوم بدور مثل الفيروس، فيجعل الفكرة تنتشر من شخص لآخر ويجعل انتزاعها ممن يؤمن بها صعباً.

لكني سأحاول.

الصعود الاجتماعي

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

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

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

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

لماذا لا نعترف ان الطالب الاقل من المتفوق له حق في التعليم؟ لاحظ التعبير: أنا لا اتحدث عن الفاشل دراسيا بل عن من يمكنه ان يتعلم ويكون عضوا منتجا في المجتمع بعلمه لكن ليس من افضل 5% أو 10%.

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

النهوض الاقتصادي

ثم يقولون "ولكن مصر يخرج منها عشرات آلاف الخريجين كل عام ولا وظائف لكل هؤلاء". اقول ان هذه مشكلة دولةٍ تعتبر المتعلم عالة وليس فرصة. ماذا فعلت الهند؟ لديهم تعليم مجاني وقلة في الوظائف -- ففكروا في فكرة outsourcing وجلبوا الوظائف من الخارج عبر الانترنت حتى صار الامريكان يشكون من اخذ الهنود لوظائفهم. اكثر من هذا: هذه الاموال التي تدخل لهم تبذل الآن في تحقيق نهوض اقتصادي هندي، واخرجت الكثيرين هناك من طبقاتهم الاجتماعية الدنيا.

لا اقول ان الحل في الـoutsourcing (أقصد ليس فيه بالذات) لكن الفكرة الاساسية هنا هي اعتبار فكرة "آلاف المتعلمين" مورداً لا عبئاً، والإتيان بخبراء ومبدعين يخرجوا لنا بمائة مشروع مثل outsourcing وافضل. ببساطة لو ضبطنا النموذج الاجتماعي بحيث يكون العائد المالي من التعليم > المال المنفق عليه، فستكون المجانية هي افضل شيء للاقتصاد :)

الفكر

انظر للمشهد السياسي الآن: غياب للثقافة السياسية هددت نجاح الثورة نفسها، وقد تؤثر على الانتخابات القادمة، وغياب للفكر المطلوب لصنع الديموقراطية (أن يعرف الجميع شيئا عن السياسة، الاقتصاد، القانون...الخ ليختاروا ويقوّموا ممثليهم في الدولة)، وثغرات فكرية كثيرة تسعى مؤسسات وافراد للتوعية بها. الآن تخيل نفس المشهد مع وجود نسبة اكثر بكثير لم يكملوا سوى الإعدادية او الثانوية. سوف تتحول الثغرات إلى هاوية.

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

الدول الاخرى

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

Only a small number of independent schools exist in Finland, and even they are all publicly financed. None is allowed to charge tuition fees. There are no private universities, either. This means that practically every person in Finland attends public school, whether for pre-K or a Ph.D.

هل تدرك مدى هذا الموقف؟ انا ادعو لنظام مختلط من المدارس والجامعات الحكومية والخاصة، لكن فنلندا ذهبت لأبعد من هذا فجعلت كل المؤسسات التعليمية، كل المدارس والجامعات، مجانية!!

في هذه الظروف قد يحسب البعض أن هذا سيؤدي لكارثة قومية ينهار فيها تعليم الدولة واقتصادها، لكن العكس تماما حدث: من افضل التعليم في العالم.

الواقعية بالنسبة لي ليس معناها "التشاؤم" أو "شد الحزام"، بل معناها النظر للتجارب الموجودة في الواقع والاستفادة من نتائجها، حتى لو لم تكن نتائج متماشية مع افكارك الاصلية.

ماذا عن امريكا؟ اقرأ هذا المقال عن انخفاض معدل خريجي الجامعات لديهم. مقتطف من المقال:

One of those challenges is the cost of college, which continues to rise, even as family income has flattened. Students from well-off families are far more likely to go to college than students from poor households, according to the report.

Among families earning $100,000 or more, 91 percent of students go to college. That number drops to 78 percent among middle-income families ($50,000 to $100,000). And for families earning less than $20,000 a year, it's 52 percent.

"We need a new social contract about tuition," Callan said. "It's a political football that discourages low-income people from attending college and middle-income people from saving for it."


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

الدولة الاسلامية

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

خاتمة

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

الثلاثاء، 13 مارس 2012

سنوات قطر 3 - انا مبرمج يوجه نفسه بنفسه

(هذا المقال هو الجزء الثاني من جزئين)

انتهى الجزء الأول بأنني قد تعلمت البرمجة. ولكن كيف مارستها وطورت نفسي فيها؟

كان الامر يعتمد على البيئة المحيطة، والبيئة المحيطة كانت جيدة جداً. في البداية كان في مكتبة المدرسة سلسلة كتب من دار النشر الانجليزية Usborne، وهي كتب من تأليف ورسم اشخاص شديدي الموهبة في جميع مجالات العلوم. اتجهت لكتب البرمجة فيها. إن كتب Usborne هي كنوز لم اجد لها بديلاً حتى الآن..كانت مشاريع البرمجة تتضمن العاباً، برامج مفيدة، مؤثرات..

كما كانت الكتب متقدمة تكنولوجياً. هناك كتب تعلمك تركيب sensor ضوءي بالكمبيوتر وصنع برنامج إنذار لو مر شخص او شيء أمام الsensor. هناك كتاب في السلسلة عن البرمجة بالـmachine language...

نعم. لغة الآلة، للاطفال، في الثمانينات. هذا هو الكتاب على موقع امازون إن لم تصدقني، وإن المقابلة رهيبة بين الغلاف الطفولي الملون وبين عنوانه الذي يرتجف له الكثير من طلبة هندسة وحاسبات :]

وهناك من يشك حتى هذه اللحظة في موضوع تعليم الأطفال البرمجة. هأ!

المصدر الآخر كان الكتب التي نشرتها شركة العالمية (المسؤولة عن كمبيوتر صخر)..كنت اخذ امي لمحل الكمبيوتر كل فترة لتشتري لي نسخة. هذه صور الاغلفة من مقال سابق كتبته..

كنت قد قرأت وقتها قصة في مجلة ماجد عن لغات الكمبيوتر (بطولة ذكية الذكية إن أردت أن تسأل) وذكروا اسماء بعض اللغات الشهيرة وقتها مثل Fortran, Cobol وذكرت أيضا لغة لوغو. تقول زكية "وهي عبارة عن سلحفاة صغيرة اوجهها بأوامري".

سلحفاة؟ لغة برمجة؟ ما الأمر؟ كان قد جاء مع كمبيوتر صخر كتالوج بكل البرامج التي صممتها "العالمية" له (وكانت كثيرة) منها صخر لوغو. وكانوا يرسمون في الكتالوج سلحفاة.

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

- ولكني أريده!

قالت أمي: هل أنت متأكد أنه سيفيدك؟

- نعم!

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

لم يكن برنامجا عادياً، كان دليل الاستخدام كثيفاً وليس بضع صفحات كالبرامج السابقة. وبدأت أقرأ. إن لغة Logo لها قصة فهي صممت اصلا للتعليم ومبنية على مباديء علمية حديثة اسمها constructionist learning وصممها خبير تعليمي اسمه Seymour Papert، وكانت لغة متطورة بها اشياء لم اكن احلم بها في الbasic:
- subroutine calls
- list data structures
- tail-call elimination
- سلحفاة

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

وحين صنعت لغة "كلمات" كان تصميمي منذ البداية أن تبدو مثل البيسك وليس اللوجو. أريد لكود كلمات أن تبدو كبرمجة: سطور وراء بعضها كل سطر فيه امر، تحكم في تدفق مسار البرنامج. كلمات هي الوريث الفكري لصخر بيسك، مع تحديث طبعا وقوة اكبر بكثير :)



لكن مازالت "الوراثة" ظاهرة :)

جربت أيضا برمجة بعض الاجهزة الغريبة مثل Casio PB 1000، وهو يعتبر جد، جد، جد الPDAs أو الSmartphones الحديثة. كانت الشاشة اربع سطور..أربعة!! هذه صورته الأنيقة جداً. هلم وشاهدها قبل ان تحذفها الويكيبديا :]

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

strlen(s)
char *s;
{
int n=0;
while(*s++) n++;
return n;
}

ما هذا؟؟ هل هي رسالة بالشفرة؟ أين هذا من PRINT, FOR, NEXT؟ أين هذا حتى من اوامر صخر لوغو عالية المستوى مثل اقرأ.حرف أو كرر؟ لا تظنني جاهل في السي او غير معترف بأهميتها، لغة كلمات مكتوبة بالسي++، لكن الآن أعتقد أنك قد عرفت لماذا اللغة اسمها 'كلمات' وليس 'رموز'.

مادمت قد قرأت المقال حتى النهاية عزيزي القاريء، سأقدم لك هدية اضافية: برنامج البيسك على صخر الذي نفذت به رسم الدالة في الصورة اعلاه. ارجو ان يعجبك :]