الثلاثاء، 29 يناير 2013

ما يمكن أن يكون

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

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

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

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

 ورأيت ذات مرة على أحد المنتديات من يقول أن العرب متأخرون في إنتاج علومهم الخاصة، وقدم مثالاً على ذلك هو أن لغة البرمجة العربية كلمات أضعف حتى من الـVisual Basic. الكلام صحيح: كلمات أضعف من الـVB (التي هي أصلاً لغة قوية جداً، قبل أو بعد الـnet.)، لكنها في نفس الوقت مشروع لم يكتمل. لن أطلب من الناس أن يقيّموا كلمات باعتبار ما يمكن أن يكون؛ بل قيموها كما ترونها، لكن في نفس الوقت سأقول أن كلمات في صورتها الحالية هي [على ما أرجو] فصل في قصة أطول.
____________

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

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

أو بشيء أقرب لفكر المبرمج: تخيل فريقاً موهوباً قد كتب engine خاص بلعبة مليء بالإمكانيات المتقدمة، لكنه لم يكمل بعد صناعة الـmodels الخاصة بالشخصيات والمستويات. ستبدو اللعبة رديئة لمن  لا يعرف التفاصيل.

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

الثلاثاء، 22 يناير 2013

طيب هو يعني لازم سبب؟

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

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

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

استمر هذا البحث أيام الدولة الإسلامية، وفي عصر النهضة الأوروبية، حتى أدى إلى ظهور ما يسمى الهندسة غير الإقليديسية (non-euclidean geometry) واكتشاف أنه هناك "هندسات" كثيرة لا هندسة واحدة، كل هندسة منها بمجموعة مختلفة من المسلّمات. هذا الأمر قد أفاد في تكنولوجيات كثيرة، وفي نظرية النسبية، وفي أجهزة الـGPS.

لكن الذين بحثوا في موضوع المسلّمات الهندسية لم يكونوا يعرفون ذلك! لم يكن في حسبانهم النسبية والـGPS، كانوا فقط يبحثون. يشبعون حبهم للمعرفة وفهم الكون.

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

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

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

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


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

الاثنين، 21 يناير 2013

عن اللغة اليابانية (1)

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

أول ثلاث أسماء سنعرفها هي كوريه kore، وسوريه sore، وآريه are.
  • أولهم kore هو إسم إشارة للقريب من المتكلم
  • وثانيهم sore للبعيد عن المتكلم لكن قريب من المستمع
  • وثالثهم are للبعيد عن الإثنين
لكن الأسماء الثلاثة التي عرفناها لا تنفع للإشارة لشيء محدد مثل "هذا البيت" بل فقط تنفع لتقول مثلاً "هذا" بدون تحديد شيء معين. هناك أسماء أخرى معناها "هذا الـ...".
  • أولهم kono، يمكنك أن تقول مثلاً kono neko حين تقصد "هذا القط"
  • وثانيهم sono، قد تقول sono hito وأنت تشير إلى شخص (hito) بعيد عنك وقريب من المستمع
  • وثالثهم ano، للبعيد عن الطرفين
ماذا عن إسم الإشارة للمكان؟
  • نقول koko للمكان القريب من المتكلم. مثل "هنا" في اللغة العربية
  • ونقول soko للمكان البعيد عن المتكلم، القريب من المستمع
  • ونقول للبعيد عن الإثنين معاً....المفروض أن تكون ako أليس كذلك؟ لكنها للأسف ليست كذلك بل هي asoko.
(تبدو كأنها خليط من soko+ako. وعموماً في بعض اللهجات اليابانية يقولون بالفعل "ako".)

الآن تعال نتحدث عن ثلاثة أدوات استفهام يابانية:
dore معناها "أيهم"، مثل which باللغة الانجليزية، كأن تسأل "أيهم تريد؟"
dono معناها "أي من ...."، كأن  تسأل "أي طبق تريد؟"
doko معناها "أين"، للسؤال عن المكان

وهكذا نجد شيئاً طريفاً:
الإشارة للمكان الإشارة مع تحديد الإشارة فقط

-ko -no -re

koko kono kore ko- القريب من المتكلم
soko sono sore so- القريب من المستمع
asoko ano are a- البعيد عن الإثنين
doko dono dore do- الاستفهام


توجد أدوات أخرى لم أتحدث عنها مثل kochira، و sochira...الخ، تسير على نفس القاعدة؛ وهي كما ترى قاعدة منتظمة جداً: مكونات أساسية للمعاني يتم تركيبها لتكوّن معانٍ أكبر، ويشبه الأمر البرمجة. ألم أقل لك أن المقال شيق؟

[هذا المقال يعتبر تلخيصاً لصفحات من كتاب "Realms of meaning: an introduction to semantics" من تأليف Thomas Hofmann]

الأحد، 20 يناير 2013

ما الجديد في كلمات، إصدارة يناير 2013؟

أسرع وأسرع

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

 إمكانية تلوين الحروف عند طباعتها


الآن يمكن استخدام الدالة حدد.لون.النص لتغيير لون
 أي نص يطبع بعد استدعاء الدالة.










نوافذ منفصلة


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





عودة الملفات التنفيذية

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



يمكن تحميل أحدث إصدارة من كلمات من موقعها على جوجل كود، أو من موقعها الرسمي.