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

أنت والفونسة الجحوية

هذا المقال عن الإدارة والمجتمع، لكن أولاً لابد أن نتحدث عن جحا.

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

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

ولو بحثت في مجتمعنا لوجدت فونسات كثيرة.

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

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

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

هل هناك صلة علمية بين فوز المدرسة ببطولة كذا وبين حُسْن تعلم الإبن فيها؟ لكن لماذا نرهق أنفسنا بهذه الحيرة بينما الترتيب في المسابقة لا يكذب، بالضبط مثل الرسومات البيانية التي تعدّ سطور الكود؟

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

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

لابد من الخروج من دائرة "أن نفعل ما نعلمه ولو لم يحل المشكلة". لابد من الخروج من دفء عمود النور ومد يدنا في الظلام..

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

خطط وأهداف(3): صنع المعنى

أريد أن أفتح شركة وأسميها Makesense. ما الهدف منها؟ تحويل الـcomputer science إلى أرباح.

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

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

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

كيف أريدها أن تكون؟ أريدها أن تكون حرة. أريدها أن تكون غنية. أريدها أن تكون إنسانية. أريد فيها علم مستشري. وأريدها أيضاً عملية وواقعية.

حرة يعني من السهل على المبرمج أن يقوم بالعمل الذي يريده. في شركة Valve لا يوجد تنظيم هرمي للإدارة، أي لا يوجد أحد مدير على أحد: إن أردت أن تقوم بمشروع محدد فعليك أن تنجح في تكوين فريق من الآخرين المقتنعين بجدوى مشروعك وفائدته للشركة وعملائها. لو نجحت في جمع ذلك الفريق فهذا هو "الأوكي" المطلوب لكي تستمر في المشروع.

المكاتب لديهم هناك على عجلات، لكي تدفع مكتبك إلى الفريق الذي تريد أن تعمل فيه.

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

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

ومن يدري؟ ربما يكون هناك فريق أو أكثر يعمل في جهاز أوراق...

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

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

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

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

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

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

- لابد من حسن اختيار الموظفين جدا، ولابد أن تشارك الشركة كلها في عملية التعيين: المبرمج هو الذي يقوم بالinterview للمبرمج، وهذه مسؤولية لا تقل أهمية عن كتابة الكود (بل هي اعلى رتبة منها). لمزيد من التفاصيل ارسلك لمقال هو من افضل مقالات إدارة الشركات التي قرأتها في حياتي: Engineering management at Facebook

أيضاً عند تعيين شخص فإن الإنترفيو لن تكون فقط لقدراته البرمجية، كما يقولون في شركة Valve:

Do not interview only technical skills, check if the candidate is able to run a company, because he will be

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

شيء أخير: شركة مايكروسوفت تسمي طاقمها Microsofties، وشركة جوجل تسميهم Googlers، فماذا نسمي طاقمنا نحن؟ ماذا عن Sense Makers؟ :)

ألا تريد أن تكون جزءاً من الحلم؟

الأحد، 8 يوليو 2012

الجمعة، 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 :)