الأربعاء، 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!