الثلاثاء، 22 فبراير 2011

خطة للنهضة(1): المجتمع الذي نعيش فيه

[المحتويات: الجزء الأول (هذا المقال)، الجزء الثاني ، الجزء الثالث، الجزء الرابع]

انظر نظرة سريعة إلى ما نحن فيه الآن...

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

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

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

لماذا هاتين النقطتين؟ تعال نتكلم أولا عن الإسلام وحياتنا.

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

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

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

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

ما المنافع الاقتصادية من تحريم الربا؟ ما المشاكل الاجتماعية التي يحلها السماح بتعدد الزوجات؟ ألا ينبغي الاستعانة بالأبحاث في مثل تلك المواضيع أثناء الدعوة للإسلام؟ أبحاث حقيقية مؤكدة بالأرقام والإحصائيات وليس مجرد اجتهادات فكرية؟

[ملاحظة: هناك بالفعل مؤسسات إسلامية تجري مثل هذه الأبحاث وأكثر؛ هدفي هنا ليس نقداً أو القاء لومٍ على أحد بل التوعية بأهمية العلوم الدنيوية في خدمة الإسلام]

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


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

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

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

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

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


نأتي الآن لفكرة أخرى: فكرة العلم المستشري.

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

دعنا من السخرية من أنفسنا قليلاً ولنفكر بالعكس: ما الذي يجعل الأوروبي يقرأ كل هذه الكتب أصلاً؟ وماذا سيستفيد من هذا؟؟

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

الجزء الثاني: وهل سيفيد هذا؟ أجل:

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

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

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

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

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


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

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

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

اقرأ الجزء الثاني!

الأحد، 20 فبراير 2011

علّم أخيك البرمجة في 2011

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

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

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

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

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

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

وكيف يمكن تعلم هذه اللغة للمبرمج العادي (وليس الطفل)؟

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

الخميس، 17 فبراير 2011

أريد أن أتحدث!

أعزائي المشاهدون...

لديّ أفكارٌ للنهضة. أفكر فيها منذ منتصف عام 2008، وقد بدأت العمل فيها بنفسي منذ 2009، لكن العمر قصير وما أنا إلا شخص واحد. لابد أن يأتي وقت أطرحها فيه على الناس.

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

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

أنا: لديّ خطة للنهضة
صديقي: أجل، أنت تريد عمل لغة كلمات..أليس كذلك؟

أنا: لديّ خطة للنهضة
صديق آخر: أجل، أنت تريد فتح شركة على مستوى Microsoft

أنا: لديّ خطة للنهضة
صديق ثالث: مجلس العلم في الكلية؟

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

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

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

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

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

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

صبراً أيتها الأفكار! اهدئي! أريد أن أحقق لك ما تطلبين. أريد أن أتحدث...لكني لا أعرف كيف!

السبت، 5 فبراير 2011

أسئلة للأستاذ أحمد شفيق رئيس الوزراء

سؤال النوايا

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

سؤال الجِمال

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

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

سؤال الضمانات

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

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

سؤال الشعارات

هل كبرياء رجل واحد أهم لديك يا سيدي من دماء من قُتِل، وحرية من حُبس وعُذب؟ ما الفرق عندكم بين "الرمز" والإنسان العادي؟ هل كونه رمزا معناه عدم محاسبته عن جرائمه؟ هل يجب أن نعتبر صدام حسين مثلا رمزا؟ أليس رئيسنا الحالي هو الذي سمح بدولة رجال الأعمال؟ أليس من فتح المعتقلات؟ اليس اهماله في واجبه كرئيس سببا في غرق العبارات؟

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

سؤال انتخابي

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

سؤال دستوري

تقولون أنه هناك نقاط تشريعية تحول بين انتقال الحكم بغير الطريقة التي ترضون بها. أليس هذا القول قولاً -احم- بيروقراطياً بعض الشيء؟

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

سؤال الشفافية

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

بالمناسبة هذا استفهام حقيقيّ وليس مجرد سؤال جدلي. لو كان هناك بالفعل مثل هذه المعلومات علنيا فدلني عليها سيدي.

سؤال الكماشة

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

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

أرى أنه من الطبيعيّ أن نطلب أدلة تطمئننا على عدم تورط الدولة. ربما يكون دليلا جميلاً أن ترفع كل نواحي الضيق فوراً ولو كانت المظاهرات ما تزال كما هي.

سؤال السلوك العقلاني

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

السبت، 22 يناير 2011

كن طموحاً

في صيف العام الدراسيّ 2009/2010 قدّمت محاضرات في التدريب الصيفيّ في كلية الحاسبات، وكانت عن لغة السي شارب والبرمجة بالأشياء (OOP) للفرقة الأولى. كانت تجربة: ماذا لو جربت، بأقصى ما لديّ من خبرة ومعرفة، أن اعلّم تلك الدفعة محتوىً يؤخذ في المعتاد في النصف الدراسي الثاني من الفرقة الثانية، أي أن اعلمهم ذلك المحتوى قبل عام ونصف من موعده التقليديّ؟

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

هذا ليس موضوع مقالي على أية حال..

في العام الماضي قضيت وقتي في كتابة لغة برمجة للأطفال. بداية هذا الموضوع مقال قديم كتبته في 2008، ثم اكتشفت بعد ذلك أن الموضوع مرتبط الآن بمجال بحث علميّ هو التفكير الحوسبي (computational thinking). صار سؤالي الآن: هل يمكن التفكير في طريقة مبتكرة لتعليم أي شخص البرمجة، أياً كان سنه أو خلفيته؟

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

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

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

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

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

الأحد، 16 يناير 2011

الجمعة، 31 ديسمبر 2010

لغة برمجة عربية تعليمية: بعض الاعتراضات والرد عليها

الاعتراضات
  • الموضوع مجرد قواعد وتركيبات؛ لا يوجد فارق فكري بين 'if' و 'إذا' أو 'while' و 'طالما'.
  • لو صنعنا لغة برمجة عربية ستكون ركيكة وغير منسجمة.
  • نريد أن نعلم المبتدئين لغة يستطيعون أن يتوظفوا بها مثل ++C أو Java أو #C...الخ، وهذه كلها انجليزية.
  • كيف سيتابع المبرمج أحدث التطورات التكنولوجية أو يشارك في البحث العلمي بدون أن يعرف الإنجليزية؟
الردود

الموضوع مجرد قواعد وتركيبات؛ لا يوجد فارق فكري بين 'if' و 'إذا' أو 'while' و 'طالما'.

الكلمات لها معنى وليست مجرد صور رياضية. المبرمج الناطق بالانجليزية لديه فرصه ليربط بين كلمة function وفكرة الدالة الرياضية، بين كلمة class وبين فكرة التصنيفات أو الفصائل، بين كلمة structure وفكرة التركيب العام أو البنْية.

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

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

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

لو صنعنا لغة برمجة عربية فستكون ركيكة وغير منسجمة

أمتأكد من ذلك؟ انظر لهذا البرنامج في لغة كلمات (على سبيل المثال) من مثال افتراضي عن لعبة طائرات:

قل لي بصدق..ألا يُفهَم هذا البرنامج بمجرد قراءته، حتى لو لم تعرف اللغة أصلا؟ :)

نريد أن نعلم المبتدئين لغة يستطيعون أن يتوظفوا بها مثل ++C أو Java أو #C...الخ، وهذه كلها انجليزية.

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

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

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

كيف سيتابع المبرمج أحدث التطورات التكنولوجية أو يشارك في البحث العلمي بدون أن يعرف الإنجليزية؟

فلندعهم يتعلمون البرمجة أولا ثم ننظر للتطورات والبحث العلمي! نحن الآن أمام موقفين محتملين في المجتمع:

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

الخميس، 30 ديسمبر 2010

Computer Science and great products

Do you need a good knowledge of computer science to make a great product? It certainly depends on what you're trying to do, but an important point is that the more CS you know the more enabled you are to make useful and impressive software.

The rest of this blog post is a case study in how CS is being used to shape my homegrown programming language for children, كلمات.

First the obvious: It would not have been made without knowledge of compilers. We got that out of the way.

Another thing is that it runs on a small virtual machine called (appropriately) SmallVM. Basically it's a program that reads assembly-like instructions and executes them. Do you know the "basic computer assembler/emulator" sometimes given in computer architecture courses? It's like the big brother of that :)

SmallVM doesn't just run instructions though; it also knows about classes and objects and has a garbage collector. That means it required knowledge about language runtimes in general.

Notice that currently the language runs programs at an acceptable speed. If I want programs to run really fast I need to go deeper: Compiler optimizations, better garbage collection, and perhaps modern VM tricks like polymorphic inline caches.

Do you know that with these techniques a language like Java or C# can reach performance comparable to C++? I hope that I or someone after me learns from those techniques and further improves on Kalimat/SmallVM.

All of this has been about the current version of the language, what about future versions? Here are some ideas I'm thinking about and how computer science can help...

Future idea #1: Gradual typing.

Currently Kalimat is dynamically typed. This means that a variable can take values of any type in the language, and obviously there are no type declarations. This is an example of a program that uses dynamic typing:


Notice how (a) There are no type declarations for the parameters or return value and (b) The program accepts any array of objects as long as each object has a method called نتيجته.

Now I've been thinking: If a child learns my language and afterwards wants to "graduate" into something like C++ ...etc then type declarations and static typing would be new to him or her, but on the other hand if I change Kalimat to require type declarations then it will be harder to teach it to children since the program will require type declarations everywhere, and those will (a) Need explaining (b) Need more syntax memorization and (c) Distract from the actual programming ideas like loops...etc

So the solution? Gradual typing! It means that the language is dynamically typed as usual but with optional static typing. When you declare the type of a variable the compiler will enforce it; otherwise the variable is dynamically typed.

If I decide to implement this feature, I imagine a future version of Kalimat where children would learn programming without being confused by types, and then at some future learning stage they would be introduced to type declarations, watch how the language checks for type errors, and see autocomplete at work!

Future idea #2: GUI programming.

Kalimat currently supports simple graphics like lines and rectangles, but in a future version I hope it supports GUI elements like Forms, Buttons, Textboxes...etc

It would be possible to copy the current event handling models of e.g C#, but I want to take seriously the idea of "a children's programming language". GUI programming is sometimes confusing even for college students! If there's a model that can make it simpler then I should do what I can to seek and use that model.

Again, computer science comes to help! There is a model for parallel programming called CSP, or Communicating Sequential Processes. It started from work by Tony Hoare (the same guy who invented quicksort) and it lead to many implementations and languages. It is also related to the actor model used in languages like Erlang.

So, a couple of days ago I read a paper about how to use CSP to greatly simplify GUI programming. To understand how this works I need to explain a little about the CSP model. Also my explanation is not 100% correspondent to the content of the paper (the idea was further developed in future papers, the paper itself is not current. Also my explanation is simplified).

Imagine that a program is composed of several processes that run independently. To communicate with each other they use a special type of object called a channel. There are two operations associated with a channel:

1- x = receive(ch) ; Which waits until data is available on the channel then returns it in x.

2- send(x, ch); Which waits until some process is ready to receive from the channel and then sends the data in x.

There is also a special command, spawn(p1, p2,...) that launches several processes in parallel.

Now we can talk about GUIs. Suppose we have a graphics application that can be used to draw lines and triangles. If we can assign a channel to each event then we can do this:

Finally we will launch both processes in the main function:


To implement something like this in a traditional GUI library you would need a lot of code in several places. If you studied design patterns you could use the state pattern, for example, to organize your code. But with CSP you write GUI code the same way you think about it. To draw a line you receive two points and join them together. Simple as that.

Now imagine if all this was part of Kalimat.. it would be an Arabic children's programming language that has an easier GUI library than the default library of most modern professional languages!

We need a lot of computer science to implement such a feature. How will we run the processes? Do we use multi-threading and rely on the operating system to schedule the work; or do we modify SmallVM to make it run several processes concurrently and write our own scheduler? Does that mean we will need to revisit what we learned in the operating systems course? :D

Finally

What I want to say in this article is...I'm grateful for all what I've learned in FCIS, without which I wouldn't have been the programmer I am today, that's one thing.

The other thing, and this is important, is that it took me a lot of years learning computer science topics to know all of this. It doesn't have to be about programming languages: Any CS topic; be it operating systems, computer vision, AI, or anything else can open the doors to great products. Products you can use to make money, or improve society, or move science further. But it will take years of hard work and learning.

Why not start now?

الثلاثاء، 21 ديسمبر 2010

Can your C++ do this?





The command وكل إلى is used to invoke tail calls. In the current language implementation it means "remove the current function's activation record from the call stack before calling the new function".

I'm still deciding if I'm going to keep this feature in the final version of Kalimat or not :)

الاثنين، 6 ديسمبر 2010

ابتسامات الكترونية جديدة :)

الابتسامة
المعنى

"مقموص"

مندهش

متأمل

متأمل ولديه نمش

ديناصور سعيد

ديناصور سعيد ولديه شامة في وجهه