الجمعة، 29 يوليو 2011

حاسبات للقرن الواحد والعشرين

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

تقليل العدد

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

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

- هؤلاء قد يرفعون مستوى الشركات التي سيعملون فيها ويطورون اسلوبها
- هؤلاء قد يتعين منهم الأساتذة الذين يرفعون مستوى التعليم والبحث العلمي
- هؤلاء قد يفتحون الشركات ويغيرون من شكل الاقتصاد

في رأيي أنه على إدارة الكلية أن تفكر في هذه النقطة جيداً وتفعل كل ما تستطيع مع المجلس الأعلى للجامعات لتقلل العدد قدر المستطاع.

صورة الكلية أمام المجتمع

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

المشكلة الثانية أن الكلية لا توجد لها قصص نجاح معلنة بما يكفي (أقصد أن لها قصص نجاح كثيرة لكن المعلن منها قليل) هذا يؤدي للحوار الآتي:
  • فلان دخل هندسة بترول وتوظف في شركة باشو للبترول بمرتب 10،000 جنيه! لماذا لا تصبح مثله؟
  • فلانة دخلت طب وفتح لها أبوها عيادة، أنت لست أقل من ذلك وأنا أدخر لك ثمن العيادة من الآن!

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

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

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

[لم أقصد انتقاد صاحب المشروع في هندسة أو شيء من هذا، المشروع محترم لكن كلامي هنا عن المستوى العلمي لكليتي أنا]

لدينا مشاريع تتعامل مع اللغة العربية، لغات برمجة جديدة، مشاريع روبوت، مشاريع علمية، لكن المجتمع لا يعرف. ويظنون البلد متخلّفة :(

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

أريد أن يصير اسم حاسبات مرتبطاً بالاختراع، هذا هو التعريف الذي أريده في ذهن المجتمع.

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

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

لدينا من الخريجين في شركة مايكروسوفت بالولايات المتحدة وكندا حتى لتظن انه هناك فرع من الكلية هناك، لمَ لا يعرف أحد شيئاً عنهم؟

ماذا عن الخريجين الذين قد أسسوا شركات؟

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

[تعقيب: قد أتبعت كلامي بعمل وبدأت خطوة صغيرة في هذا الاتجاه.]

العامل البشري

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

كفاءات عالية + بيئة إدارية مشجعة = مؤسسة ناجحة.

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

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

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

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

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

الثلاثاء، 26 يوليو 2011

لغة كلمات: مرجع كامل أخيراً!

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

الملف الذي استخدمته في العرض متاح للتحميل بأن تضغط هنا وهو في صيغة PDF

الأربعاء، 20 يوليو 2011

بيب! بيب! بيب!


Kalimat calling the Windows API! (This is work in progress)

GP Ideas: 1- Sketchcode

Concept

Let users write programs by sketching; either using paper+scanner or using a tablet computer.

More info

I have an incomplete design of a sketch-based programming language that combines text and graphics elements. Data structures like linked lists or trees would be expressed by their familiar sketch notations, while functions would resemble their familiar text representation enriched by some additional notation gained from using a pen.

I can show my designs to interested teams, but I won't post pictures here on my blog for obvious reasons :)

The project will have two major subsystems and 3 major stages. The subsystems are
(a) Sketch recognizer
(b) Code generator [or interpreter].

The stages are
(a) Language design
(b) Implementing sketch recognizer
(c) Implementing code generation

Stages (b) and (c) could probably be done in parallel assuming a complete language specification was made beforehand.

I cannot officially supervises the project of course, but I am prepared to participate in the design of the full language.

Challenges and risks

The first challenge is in the design of a language that is usable for the sketch medium and expressive enough to represent complex programs without cluttering the area with complex, unclear sketches.

The second is the usual risk of pattern-based projects: The accuracy of recognition, choice of training algorithms, and so on.

Techniques needed

Patterns recognition, image processing, possibly compilers

Notes

This is related to my technology vision of Awraq

الخميس، 7 يوليو 2011

قوائم متسلسلة في كلمات

تريد أن تحل مسألة ACM بكلمات؟ سوف تحتاج بضعة أشياء، منها القوائم المتسلسلة Linked lists. هيا نبدأ في عملها - أول ما نحتاجه هو فصيلة class يعبر عن حلقة في السلسلة. ما يكافيء node في لغات البرمجة الأجنبية :)
فصيلة حلقة :
له بيان
له سابق، تالي
نهاية
هنا لا نعرف methods في فصيلتنا، فقط نعرف مجالات للبيانات data fields.
بالمرة هيا نعرف فصيلة القائمة:
فصيلة قائمة :
له أول ، آخر
نهاية
قبل أن نتابع علينا أن نعرف بعض المعلومات عن الكائنات في لغة كلمات:
  • لإنشاء كائن object من فصيلة معينة نكتب اسم الفصيلة يليه كلمة جديد مثل م = موظف جديد
  • للوصول إلى field نكتب اسمه قبل الكائن، أي أن س مركز النقطة في كلمات يكافيء point.center.x في اللغات التقليدية
  • الثابت لاشيء يعادل null في اللغات المماثلة للJava أو #C.
الآن نريد أن نضيف إمكانيات الإضافة والمسح من القائمة. هنا ستكون الفصيلة قائمة أكثر من مجرد حاوٍ للبيانات، سوف نضيف إليها methods. قبل أن نضيفها يجب أولاً أن نعرف كيف نستدعيها!

تخيل أن فصيلة القائمة لديها method اسمها اضف(...)، سوف نستدعيها هكذا:

ق : اضف(12)

هذا يكافيء lst.add(12) //add to list في اللغات الأخرى. وهو في كلمات اسمه إرسال رسالة إلى الكائن، والكود التي ستتفذ ستكون استجابة لهذه الرسالة. مثل ال++C لابد أن نعرف الاستجابة على جزئين: نعلن عنها داخل الفصيلة ونكتب تفاصيلها خارج الفصيلة.

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

لاحظ كيف أن الكلام يبدو طبيعياً جداً... استجابة قائمة ق لـ"أضف عنصر" هو افعل كذا كذا..نهاية. هذا لأن كلمات لغة برمجة تستمد جمالها من جمال اللغة العربية™

الآن يمككنا أن نكتب الكود أخيراً:
استجابة قائمة ق ل: اضف ( العنصر ) :
ح = حلقة جديد
بيان ح = العنصر

إذا أول ق = لاشيء :
أول ق = ح
        آخر ق = ح
    وإلا :
تالي آخر ق = ح
        سابق ح = آخر ق
        آخر ق = ح
    تم
نهاية
أنظروا! استطيع كتابة كود الإضافة إلى قائمة!! سنترك كود المسح كتمرين للطالب :)

كلمة استجابة في كلمات، مثل كلمة إجراء، تعبر عن void function, void method. ماذا لو أردنا عمل شيء يعود بقيمة؟ هنا بدلاً من استخدام كلمة استجابة سوف نستخدم كلمة رد.
فصيلة قائمة :
له أول ، آخر
يستجيب ل: اضف ( عنصر )
-- هنا عرفنا رداً جديداً
يرد على عددهم ( )
نهاية
ثم نكتب تنفيذ الرد:
رد قائمة ق على عددهم ( ) :
إذا أول ق = لاشيء :
ارجع ب: 0
    وإلا :
النتيجة = 0
       أ = أول ق
طالما ليس أ = لاشيء :
النتيجة = النتيجة + 1
           أ = تالي أ
       تابع
ارجع ب: النتيجة
    تم
نهاية
الآن..نستطيع اختبار البرنامج:
الوجبات = قائمة جديد
الوجبات : اضف ( "شاورمة" )
الوجبات : اضف ( "مجبوس" )
الوجبات : اضف ( "فول وطعمية" )

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

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

فصيلة قائمة :
له أول ، آخر
يستجيب ل: اضف ( عنصر )
يرد على عددهم ( )
نهاية

رد قائمة ق على عددهم ( ) :
إذا أول ق = لاشيء :
ارجع ب: 0
وإلا :
النتيجة = 0
أ = أول ق
طالما ليس أ = لاشيء :
النتيجة = النتيجة + 1
أ = تالي أ
تابع
ارجع ب: النتيجة
تم
نهاية

استجابة قائمة ق ل: اضف ( العنصر ) :
ح = حلقة جديد
بيان ح = العنصر

إذا أول ق = لاشيء :
أول ق = ح
آخر ق = ح
وإلا :
تالي آخر ق = ح
سابق ح = آخر ق
آخر ق = ح
تم
نهاية

الوجبات = قائمة جديد
الوجبات : اضف ( "شاورمة" )
الوجبات : اضف ( "مجبوس" )
الوجبات : اضف ( "فول وطعمية" )

اطبع الوجبات : عددهم ( )

فلتكن أشياء حقيقية

من يريد ألا تصبح مملاً عليه ألا يجعل تفكيره يقتصر على الأشياء المجردة؛ بل يفكر في أشياء حقيقية.

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

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

نفس الشيء بالنسبة للمنصب، إنه يعطينا قدرة أكبر على التأثير في الناس وإصلاح المجتمع، كيف هو غير حقيقيّ؟

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

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

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

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

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

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

هذه أشياء حقيقية