الأربعاء، 9 نوفمبر 2011

عن الكتابة

يقول الكتّاب: Show, don't tell. أترجمها: اظهر ولا تخبر.

ما معنى هذا؟ تماشياً مع سياق هذا المقال لن اخبرك، لكن سأظهر لك :)

ملاحظة قبل أن نبدأ: المهارة هي في استخدام الأدوات التعبيرية المناسبة في المكان المناسب. لست أقترح أن تستخدم هذا الاسلوب في كل مكان بدون تفكير. المهم؛ هيا نبدأ:

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

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

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

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

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

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

السبت، 5 نوفمبر 2011

عشان كدة الثورة يا عمنا

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

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

كان ايه اللي جبرنا على ده كله...عيال خايبة...

عاوز احكي لك حكاية: حسني كان عاوز يعمل انتخابات رئاسية في سبتمبر 2011، يعني كان زماننا دلوقتي بيحكمنا راجل ما بين الحياة والموت. أو كان زمان بيحكمنا ابنه دلوقتي.

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

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

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

طيب ليه بيتظاهروا لغاية دلوقتي؟ مش كان كفاية بقى ويهمدوا؟ حاقول لك...

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

احمد شفيق كان سايب وزرا من النظام القديم؛ وكان تفكيره تفكير نظام قديم، وكان دماغه ناشفة ومايستحملش حد يقول له بم: ولو جينا نشيل الفاسدين من كل حتة كان حيقرفنا في عيشتنا ومش حناخذ منه حاجة في الآخر.

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

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

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

الجمعة، 4 نوفمبر 2011

Almost all programming is metaprogramming

Any sufficiently large program involves metaprogramming, whether the program's author meant it or not. By so I mean it:
  • Creates a 'program' in some specialized encoding, or 'language'
  • Writes an interpreter for that language
  • During runtime, creates a new program in the newly created language and executes it.
Or in other words, a sufficiently advanced data structure is indistinguishable from code.

Let's think of this in terms of real-world (and some not so real-world) examples:

1- Think of implementing a word processor; you have a specialized 'language' to describe paragraphs, lines, formatting, and so on and one or more 'interpreters' to take the program and render it to the screen or print it. Sometimes the language is very real, like for example Postscript.

2- Also, parser combinators: You are essentially creating a program out of lambdas or objects. Consider the parsing primitives to be like instructions of a virtual machine, and the resulting parser as an AST that knits those instructions together. Running the parser is passing the instructions calls to the VM.

3- Similarly, the reason a Turing machine is so powerful is because it has an infinite tape that can be freely accessed. If you study TM programs you'd find a lot of them generating intermediate data on the tape and then traversing this intermediate data using fixed circuitry in its transition diagram; so in other words interpreting it.

All of this seems rather obvious, and somewhat too philosophical. What practical benefit do we get out of this? I think if we realize that our programming is mostly about creating and executing more specialized programs; we'd start thinking about tooling support for our specialized programs..

Whether we're programming with C, Java or your favorite functional language, you probably have debugging, refactoring, and other support for the first level program; the (e.g Java code itself) the higher level program, however, is neglected as mere 'data'. So you'd be working on a lower abstraction level.

There's ongoing research about tooling support for domain specific languages and making it easy to integrate them with the host language's debugger...etc. I suggest going to the next level: make it easy to treat any data structure as a DSL..

That would probably require the host language to take homoiconism very seriously: If it's an OOP language the program itself would be composed of object literals. ML-like languages would have their code be composed of calls to data constructors. Prolog-like languages would have the program be a set of program facts. And so on. Basically, if the tools in the IDE work on code they should work similarly on anything else.

After all this is done, imagine again working on our word processor: We could step over the rendering of each paragraph, then step into a given line to troubleshoot a bug. Tracing the running of a parser created from combinators would be on a rule-by-rule basis. The 'safe delete' refactoring could have a lot in common with the language's garbage collector. An error would make the IDE stop and show which piece of input caused the problem instead of the troubled code in the main program.

Or maybe I'm wrong. Maybe no one came with the idea because there's some obvious flaw in this reasoning. Or that the idea is vaguely defined and falls apart if studied in detail..I don't know!

الاثنين، 31 أكتوبر 2011

للديموقراطية صور كثيرة

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

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

تعال نضرب أمثلة على استخدام كلمة "ديموقراطية" في نسق غير سياسي، سنعرف لماذا بعد قليل:
  • الفيسبوك ويوتيوب - ومن قبلهم المدونات - صنعوا ديموقراطية في الإعلام، وصار يمكن لأي شخص أن يصنع بذرة قناة إخبارية (مثل شبكة رصد وغيرهم). وهناك أشخاص مثلي لم يكن ليُسمع لهم صوت بدون هذه الأدوات.
  • المدونات بالذات جعلت إنشاء موقع على الإنترنت بسهولة ملء صندوق نصي. قبل ذلك كان يمكن لمتخصص أن يصنع موقعاً للإنترنت بلغة HTML ويبحث لها عن host، لكن الآن خالتي تستطيع عمل مدونة إن أرادت.
  • لغة Visual basic وبرنامج Microsoft Access صنعوا في عصرهم ديموقراطية برمجية، بحيث يمكن لصيدلي مثلاً أو صاحب سوبر ماركت أن يصنع برنامجاً لمحله دون الحاجة لمبرمج متخصص.
ما الذي يجعلني اطلق كلمة "ديموقراطية" على كل من هذه المواقف؟ الشيء المشترك بين كل من هؤلاء هو فكرة نزع القوة من القلة وإعطاؤها للأكثرية. وللقوة صور عديدة...اقتصادية وفكرية وعلمية وتكنولوجية وسياسية وإعلامية...كل قوة منهم لو تركزت في يد قلة فإن هذه القلة قد تسعى لاستثمار قواها الحالية في اكتساب قوى جديدة. وبهذا تبدأ الديموقراطية في التآكل.

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

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

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

الخطة في اساسها اجتماعية، لكن مثل كل شيء لها جوانب سياسية أيضاً!

السبت، 29 أكتوبر 2011

Kalimat-related open source project ideas


Do you like open source and want to create your own project? Do you like Kalimat? Do you want to contribute something to the future of programming in the Arab world?

Here are some new projects that I would love to see for the Kalimat programming language, and which can be done independently of the main Kalimat package of you want to 'own' your project:

Kalimat for .Net

If you write a .Net implementation for SmallVM (the virtual machine of Kalimat & Kick) then the rest would be easy: Just recreate the compiler that translates from Kalimat to SmallVM, or even use the original compiler.

Why Kalimat for .net? It would make Kalimat both usable as an educational language and a professional one; opening the door for libraries that wrap ASP.net, ADO.net, ...etc into an Arabised API and make it available for Arab programmers; kids and adults alike.

Automatic code documentation

The CoffeeScript language has a tool called Docco, that takes commented source code and generates documentation that puts the code and the explanation side by side like this

I really want a tool that works the same way; it would make it so much easier for educators to write Kalimat tutorials with heavy source code and notes, which is why the language was created in the first place!

Kalimat environment on the web

This would make trying the language much easier without needing to download anything and make Linux users happier (since currently Kalimat for Linux has an Ubuntu-only ready made package and other Linux users have to compile from source).

Again, the secret is in SmallVM: If you write it using JavaScript and implement the run-time library (Graphics, Sprites, ...etc) with HTML5 then the IDE itself would probably not be too hard.

More platforms

In addition to .Net, Kalimat could be ported to other platforms. If done right we could have some sort of a "Kalimat everywhere" ecosystem:
  • SmallVM could be translated to, or interpreted by, ActionScript bytecode (ABC) to enable running Kalimat programs as Flash applications (suggested by Issam Elbaytam in the comments)
  • Could similarly be translated to Java, to use the Java platform or to create Android programs
  • Or perhaps translated to Objective-C, to create iOS applications ;)

الاثنين، 24 أكتوبر 2011

حكاية التلميذ الملول، والعملاق، والشراب المنوم

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

ووضع المدرّس أمامنا مجموعة من الصور كما يلي:
1- عملاق اسطوري يحطم القرية
2- شاب يحمل زجاجة شراب منوم
3- العملاق يأكل عشاءه
4- العملاق نائم
5- سكان القرية يحتفلون

وكان "الواجب" ذلك اليوم هو ان نكتب قصة مستوحاة من تلك الصور. لكني لم أرض أن أكتب تلك القصة..

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

"كان هناك عالِم يعيش في المستقبل البعيد، وكان هناك مسابقة للأشياء الغريبة، وفكر العالم أن يعود إلى الماضي لكي يحضر شيئا من هناك يشارك به في المسابقة..."

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

وهذا ما اكتشفه المدرس طبعاً، لذلك وضع دائرة حول الثلاثة اسطر إياها وكتب بخط كبير: "The real story only begins here"

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

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

الأربعاء، 12 أكتوبر 2011

A pony for Amina



يوم في حياة اعضاء بمركز التفكير الحوسبي

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

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

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

ماذا عنك أنت؟ أول مهمة سنكلفك بها هي موقع برمجة على الانترنت، يسمح للطفل - أو أي شخص - أن يكتب الكود ويراها تنفّذ فوراً. سوف يكون مكتوبا بتكنولوجيا HTML5، ويحتاج لحيل كثيرة بالـ Ajax ليقوم بدوره. أيضاً يمكنك إن أردت أن تبدأ القراءة عن MindStorms و Adruino، لأن مهمتك التالية ستكون دراسة فكرة عمل لعب الكترونية صغيرة يمكن برمجتها.

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

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

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

(هذه الرؤية لم تتحقق بعد. تريد لها أن تتحقق؟ لماذا لا نفتح حواراً عن تمويل المركز؟ لو لم تراها بعد، هذه رؤية للمركز من زاوية أخرى)

الخميس، 15 سبتمبر 2011

أهمية علم لغات البرمجة

My area of interest is programming language theory (PLT). This is an area separate from compilers, but related.

It discusses things like programming paradigms (imperative, logic, functional, object oriented,...), language semantics, type systems, programming language features, and other things.

The problem is; most programmers think 'languages' are a solved problem. They think that the best possible languages are the familiar ones like C++ or Java, and that effort should now focus on e.g the libraries. That is completely not true!

So, let's discuss some lesser-known languages and how they offer completely new ways to programming.

There is a new language called OPA - derived from the ML family - that makes web application development significantly faster. Projects that take months to develop can be made in OPA in weeks.

A large part of the power of this language comes from its type system, Which lets you describe only once the shape of your data and then generates client-side (running on the web browser) and server-side code from the same description, thus eliminating many causes for error.

Or how about Google's Go language, which focuses on speed of compilation, safety, simplicity and concurrency?

Then we have Subtext, a language (part of a series) that attempts to simplify the reading and understanding of programs?

Or Lisp, where you can define new syntax for the language, having components written with "mini-languages" inside a larger program?

Or...we know that C is fast and powerful, but very unsafe and hard-to-debug. How about a language that has the same speed and low level capabilities, but much more safe and expressive? Enter BitC.

Speaking of low-level; Mozilla (the creators of Firefox) are working on a new language for systems programming called Rust. It should be useful for the same type of programs that are written in C++ but with features like this (from their site):
  • Memory safe. No null pointers, wild pointers, etc. Automatic storage management.
  • Dynamic execution safety: task failure / unwinding, trapping, logging.RAII / dtors.
  • Typestate system: ability to define complex invariants that hold over data structures.
  • Very lightweight tasks (coroutines). Cheap to spawn thousands-to-millions.
Finally, how about F# from Microsoft, a functional programming language that is now part of Visual Studio, described on its site as "...It is a simple and pragmatic language, and has particular strengths in data-oriented programming, parallel I/O programming, parallel CPU programming, scripting and algorithmic development"

In summary, programming language theory is not simply about academic research: real companies like Google, Mozilla, and Microsoft are working on serious projects that help them in making money or beating their competition.

I think this field is very worthy of study, even if so few people pay attention to it...

الجمعة، 9 سبتمبر 2011

يوم في حياة أطفال مبرمجين

نحن في عام 2018. محسن لديه ثلاثة أبناء: مروة (13 عاماً)، منى (8 سنوات) ومصطفى (5 سنوات).

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

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

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

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

مع الوقت لن تكتفي منى بالرسم على الpaintbrush، بل سوف تكتب برامج لرسم مربعات ونجوم وزخارف كالزخارف الإسلامية، وفي كل مرة سوف تسير السيارة بها لتنفذ ما قد خُطّط لها.

لكن اليوم سوف تلهو قليلاً، بينما أختها الكبرى تتقدم قليلاً في مشروع الروبوت ثم تذهب لأخذ محاضرة في خوارزمية Depth first search.

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

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

قال بصوت رفيع: آه! أنا تائهة! أريد أن أعود إلى أمي!

ثم غير صوته لصوت أكثر غلظة (على الأقل بالنسبة لطفل في الخامسة) وحرك صورة الرجل قليلاً وقال: لا تخافي أيتها القطة الصغيرة! أنا أعرف أين هي أمك! تعالي معي!

ثم بصوت القطة: أصحيح هذا؟؟ حسناً أيها الرجل الطيب! سوف آتي معك.

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

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

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

كانت زوجة محسن تعمل معلّمة، وكانت مهمتها حالياً تحضير درس النحو الجديد، وقد تم تعديل منهج النحو ليستفيد من الطرق الحوسبية؛ مثلاً الإعراب يُكتب الآن في صورة شجرة إعرابية parse tree. بدايات صغيرة لكنها تنمو مع الوقت.

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

كانت نهاية القصة سعيدة، إذ قبض الشرطي على لص القطط وأعاد القطة الصغيرة لأمها، بينما عادت مروة ومنى من المركز. قال الأب لمنى: هل كنت سعيدة اليوم؟

قالت منى: نعم!

قال لها: وهل تريدين الذهاب غداً؟

قاطعته مروة: ولكنها سوف تعطلني عما أفعل يا أبي!

قال محسن: لا تقلقي، سوف أذهب معها أنا.

الا تريد لهذا أن يصبح حقيقة؟ يمكننا أن نبدأ بحوار عن الفكرة (بريدي الاكتروني هو samy2004 على gmail.com )، ولديّ خطة أعمال مبدئية هنا.