الجمعة، 6 يوليو 2012

مشاريع للأطفال، لكن قد تغير العالم

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

لغة Python

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

أثرت هذه اللغة كثيراً على Guido Van Rossum مصمم لغة Python، وكانت سببا من أسباب كون بايثون سهلة التعلم وسهلة القراءة. هذه السهولة ساهمت في جعل اللغة مستخدمة في مجالات كثيرة جداً: التعامل مع الصور، تطبيقات الإنترنت، برامج البحث العلمي الحوسبي Scientific computing. التحكم في الروبوت...

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

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

البرمجة بالأشياء، واجهات GUI، والأجهزة اللوحية.

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

من أجل هذا المشروع تم تطوير فكرة GUI لكي لا يحتاج الطفل لحفظ اوامر command line ولكي يجد تشبيهات سهلة الفهم وصور يضغط عليها.

وتم تقنين وضبط مباديء البرمجة بالأشياء (التي كانت ظهرت في لغة Simula في اوروبا) وتم اختراع لغة Smalltalk، التي أثرت في كل لغات البرمجة الشيئية التي تلتها. Java؟ ++C؟ Python؟ JavaScript؟ كلها متأثرة بطريقة أو أخرى بهذه اللغة.

وأكثر من ذلك: كان Bill Gates و Steve Jobs على علم بهذا المشروع في شبابهما وانبهرا به، وهذا سبب كبير لسعي الأول لمشروع Tablet PC في 2001، وسعي الثاني لإنتاج iPad في الفترة الحالية.

الكمبيوتر المنزلي

على هذه المدونة تجدني أحكي كثيراً عن كمبيوتر صخر وامثاله (Commodore, BBC Micro, Texas..). في نهاية الثمانينات كانت إحدى هذه الشركات - شركة Acorn التي صممت جهاز BBC Micro - تصمم الجيل التالي من أجهزتها. اتخذوا وقتها قرار أن يصمموا معالجاً دقيقاً خاصاً بهم بدلاً من استخدام المكونات الموجودة، وبنوا هذا المعالج على تقنية RISC، وبهذا كان اسمه:
Acorn RISC Machine

كانت في نفس الفترة شركة أبل تسعى لصنع جهاز نيوتن المحمول، وطلبت من Acorn أن تسمح لهم باستخدام تقنية ARM، فقامت تلك الأخيرة بفصل قطاع المعالجات الدقيقة لشركة منفصلة. اليوم هناك ملايين الأجهزة: هواتف ذكية، أجهزة لوحية،...الخ...الخ، تستخدم ما نسميه اليوم ARM processor.

نظريات Piaget في التعليم

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

It is with children that we have the best chance of studying the development of logical knowledge, mathematical knowledge, physical knowledge, and so forth.

ماذا؟ إنه لا يقول أنه يبحث فحسب كيف يتعلم الناس، ولكن كيف ظهرت هذه العلوم ذاتها! الفكرة هي أن العلوم التي نبحث فيها نحن البشر لم تظهر وحدها، لكنها ظهرت كجزء من عملية تفكير وملاحظة إنسانية، وهناك - يقول بياجيه - ارتباط مهم بين عملية التفكير التي أدت للنظريات وبين النظريات ذاتها.

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

البرمجة والتعليم والنهضة

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

لن أقول أنني عبقري أو مبتكر: حين كنت أفكر في كلمات لم يخطر ببالي التمكين الحوسبي وهذه الأشياء؛ كنت فقط أفكر في شيء مثل QBasic باللغة العربية ليبرمج به الأطفال.

حين كنت أحلم بـ "اوراق" كانت يدي تؤلمني من لوحة المفاتيح فتمنيت جهاز كمبيوتر بقلم، ثم رأيت مشاريع مثل MIT Design Rationale الذين يعملون منذ سنين (من ضمن ما يبحثون) في التعبير عن الأفكار والتصميمات بالرسم sketching. هؤلاء قوم يبحثون فعلاً، ويعملون فعلاً، ولا يكتفون بالأحلام.

أعتقد أن مجتمعنا على أبواب نهضة كبيرة، فمن لها؟

الخميس، 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 مثلاًـ لكن حين يكون عالم هو بذلك سوف يؤثر ذلك على طريقة شرحه، وعلى الاقتراحات والافكار التي سيقدمها، وعلى تعامله مع المشاكل، وعلى وصفه الدقيق (ولو كان مبسطاً) للعمليات التي يقوم بها الأطفال، ولا عيب أن يقول بقدر الإمكان عن النظريات الحقيقية من وراء الأنشطة التي يقومون بها.

الاثنين، 2 يوليو 2012

رسالة مفتوحة إلى د. أبو الفتوح ومشروع مصر القوية

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

مقدمة عن التحديات

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

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

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

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

الصورة المقترحة للمشروع

نطرح أن يكون مشروع مصر القوية في صورة مؤسسة (ويمكن أن يكون لها ذراع سياسية أو حزبية)، يحدد لها لها ثلاثة أنشطة أساسية:


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

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

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

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

ومن أجل ذلك الهدف يمكن:

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

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

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

الجمعة، 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. أليس هذا هو الهدف من كل شيء أصلاً؟ الفصائل، الوراثة...الخ، ما هي إلا أدوات لتنظيم وتسهيل الأهداف الاساسية. ثم في محاضرات لاحقة بدأنا الدخول في التفاصيل.

البرمجة، وقوالب الطوب، والحلم المختفي

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

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

لقد كانت لحظة فارقة في حياتي. انا اعتبر نفسي إنساناً مبدعاً لكني كسول؛ والآن هناك آلة تقوم بالعمل الممل وتترك لي العمل الإبداعي! هذا يغير أشياء كثيرة. ولهذا أحببت الكمبيوتر.

هل تعرف ما هي إمكانات جهاز BBC Micro؟ إن سرعته هي 2 ميجاهرتز (وليس جيجا). الذاكرة من 32 كيلوبايت، والمعالج 8 بت.

ثم ننظر لهذا النظام (Sketchpad) وهو موضوع رسالة الدكتوراة للباحث Ivan Sutherland في الستينات.



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

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

ننظر أيضاً لبرامج الرسم؛ سأركز على البرامج 2D حالياً: برنامج مثل Inkscape يسمح بعمل تدرجات للألوان، ويسمح باستخدام منحنيات بيزييه، ويسمح بأن تكون الخطوط مثل قلم حبر أو رصاص أو فرشاة. ويسمح بعمل أشكال ثلاثية الأبعاد. لكنه لا يساعدني أن أرسم!

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

لماذا لا تساعدني أيها الحاسوب؟؟

ثم ننظر للبرمجة. لماذا لا يساعدني الكمبيوتر؟ إنه يعطيني محرراً أكتب فيه، ثم يسكت! على الأقل أدوات مثل Eclipse هي خطوة في الاتجاه الصحيح. هب أنني غيرت عدد الـparameters في دالة. يقوم Eclipse وقتها بتنبيهي إلى كل أماكن استدعاء الدالة لكي اضيف فيها الـparameter الإضافي. ولو كانت الدالة معرفة في class، فهو يقوم بتنبيهي لكل فصيلة فرعية تعيد تعريف الدالة لكي أغيرها أيضاً..

هكذا يكون الكمبيوتر الشاطر: يقوم بكل عمليات البحث والمطابقة - تلك العمليات المملة - لكي لا احتاج أنا الإنسان أن اقوم بها.

(الظريف ان بعض المبرمجين يتباهون بعدم احتياجهم لمثل هذه الأدوات.)

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

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

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

وعموماً مازال هناك البعض يحمل الفكرة: مثلاً برنامج Scrivener هو منسق للكلمات يساعدك فعلاً على تنظيم أفكارك وليس مجرد تغيير شكل الخطوط وأحجامها. برنامج Sketchup يساعد بالفعل على التعبير عن افكارك بطريقة رسومية بسرعة. هناك جيل جديد من الأدوات البرمجية يحاول ان يقوم بالأشياء "المملة" بدلاً من المبرمج.

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

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

الأربعاء، 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، إمكانية "اظهار الإحداثيات" في كلمات نفعت جداً. أنا سعيد اني اضفتها. رسمنا مثلثاً بأمر ارسم.خط.

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

الثلاثاء، 19 يونيو 2012

افكار محمد سامي لمشاريع التخرج، 2012-2013

أفكار ماضية
  • هنا حوالي 30 فكرة مشروحة عن دعم اللغة العربية وجهاز "أوراق": الصفحة هنا.
  • وهذه فكرة عن برنامج Sketchcode، تجدها هنا.
ثم نأتي للأفكار الحديثة...

Augmented reality RTS game

I had a dream where I was in a room, playing a real time strategy game (like Red Alert or Age of Empires). The whole room was the play area: The map was the floor, you stood and gave voice orders to your army, pointing with your finger where the soldiers should attack, build, move...etc

Sounds fun, right? Why not build it? It would have a set of ready-made voice commands, but that is a small part; the big part is computer vision to recognize at which point on the map the user is pointing with their fingers; and the design of the game itself to be usable under those conditions.

Since we can't afford an LCD display to cover the whole floor, we could search for another way like a datashow projector & playing on the wall instead of floor; or augmented reality glasses.


مروة والروبوت - لعبة برمجية

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

3D Logo Turtle with augmented reality

Logo is a well-known language for teaching children programming; it features a small character, the turtle, which the user programatically moves to draw shapes and make games. I suggest using augmented reality (where a video camera takes a scene and adds other computer-generated elements) to make a 3D turtle where the child writes code to add things to a real-worlds scene: to draw on walls, carpets, or people.

Sketch-based keyframe animation

The program takes a sketch composed of keyframes + some cues (like movement lines) and creates an animation. The input should be allowed to be more interesting and realistic than this illustration.

Web-based Kalimat IDE

Kalimat is a (desktop) Arabic-based programming language for teaching children programming. Another educational programming language is MIT Scratch. Scratch allows children to share their programs and run them online in a Youtube-like site, and their new version the child does the programming itself online in the browser. Why not have the same experience for Kalimat?

Also, I have some ideas for an improved version of Scratch itself, we can talk about the details if you like :)

Cloud-based personal DBMS

 A cloud version of a personal or small-business database like Microsoft-Access: Access has allowed a lot of non-programmers (doctors, lawyers, housewives...) to create their own applications to manage work and life. Access provides those features for users:
  • Simple data design and entry
  • Forms and reports
  • Application development with VBA (a special version of visual basic).
We suggest a tool to do the same through a web-browser: ability to design and add data, create forms for the same or other users to fill-in, and generate reports; and finally to enable custom application development with JavaScript.

This is much bigger than Google spreadsheets. Google's application focuses on simple data entry and calculation, you cannot, say, create a photo-album application with it, or manage a supermarket's customers. Our project can :)

الاثنين، 11 يونيو 2012

كيف تكتب كود تبدو عربية؟

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

سوف نضع الآن بعض النصائح في جعل الكود الخاصة بك تبدو سهلة القراءة في لغة كلمات.

العوامل parameters تكون معرفة لا نكرة
مثلا في هذا الإجراء:
إجراء ارسم(الشكل):
اعرض(الشكل)
لون(الشكل)
حرك(الشكل)
نهاية
أعتقد ان السبب الآن واضح لماذا نفعل ذلك!

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


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


ب = "الشجرة الخضراء في الحديقة الغناء"
اطبع تفصيص(ب)

لكن اسم الإجراء (void function) يدل على العمل الذي يقوم به، ويأخذ صورة فعل الأمر
قراءة.البيانات()
حساب.الحسبة()
طباعة.النتائج()


اقرأ.البيانات()
احسب.الحسبة()
اطبع.النتائج()
ماذا لو كانت الدالة معرفة داخل فصيلة class وتعود بقيمة؟ في تلك الحالة استخدم صيغة بدل الاشتمال
❌ أ = الموظف : هات.المرتب()
✅ أ = الموظف: مرتبه()

❌ ص = الصورة: تدوير()
✅ ص = الصورة: تدويرها()
مذكر ام مؤنث؟ حسب اسم الفصيلة، لأنه لو كانت الفصيلة مثلاً "سيارة" فغالباً سوف نتحدث عن الكائنات منها بصورة س، سيارة1، السيارة...الخ، فسنسمي الدوال مثلاً "سرعتها"، "لونها".

عند تعريف بيانات داخل فصيلة fields، تذكر انها ستستخدم بصيغة الإضافة
فصيلة موظف:
له الاسم، المرتب
له المدير، المساعد
تم
م = اقرأ.موظف( )
الاسم المساعد المدير م = "ميشو"

✅ 
فصيلة موظف:
له اسم، مرتب
له مدير، مساعد
تم
م = اقرأ.موظف( )
اسم مساعد مدير م = "ميشو"

بالمناسبة، لا ارى مشكلة في تعبير مثل "س النقطة، ص النقطة"، قياساً على "عين الفعل، لام الفعل" في علم الصرف.

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

ماذا عن اسماء البيانات المكونة من اكثر من كلمة؟

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

أو يمكنك أن تسميه سرعة.نسبية وحين تقرأ السطر التالي:
أ = سرعة.نسبية م
تقرأه "سرعة م النسبية".

القاعدة المختصرة

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

هل لاحظت ان هذا المقال يبدو كمقال عن النحو لا فقط البرمجة؟ هذا لأن كلمات لغة البرمجة العربية الجميلة

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

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

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

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

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

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

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

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

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

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

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

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

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

البيئة المحيطة

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

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

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

كان الشرح الآن عن struct في لغة ++C. عن ان الstruct لا ينشيء بيانات في الذاكرة، لكن عمل variable منها ينشيء فعلاً البيانات. همممم، كنت اشرح الفصائل في توثيق كلمات اليوم السابق، ربما ينبغي ان ابسّط الشرح قليلاً.

دخل الشرح في الheap. هذا مهم... في كلمات، على عكس ++C، كل كائن عبارة عن reference. كيف اشرح الـreference؟

رسم الheap سهل. لكن الreference؟ دائما نرسمها اسهم تشير إلى اماكن في الذاكرة، لكن السهم ليس قيمة! حين أقول أ = ب، فإن قيمة الreference يتم نسخها. كيف اعبر عن هذا في رسمة تعبر عن البرنامج؟ أرقام؟ لا هذا معقد. أريد شيئاً مرئياً.

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

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