الثلاثاء، 27 ديسمبر، 2011

نقد نموذج لغة الـPython للأصناف classes و الدوال functions.

على الرغم من أن لغة الـPython تمثل بالنسبة لى لغةً من أفضل اللغات (بل أفضلها علي الإطلاق) من حيث شكل البرنامج المكتوب بها، إلا أنها تحتوى على قراراتٍ تصميميةٍ أجد أنه من الواجب الرد عليها؛ لأنها تمثل قراراتٍ سيئةٍ بما فيه الكفاية لمن كانت له قناعاتٌ تصميميةٌ كقناعاتى.
و من أوضح هذه القرارات الغريبة هو نظرة اللغة إلى الأصناف classes و الدوال functions؛ حيث أن هذه النظرة الغريبة ترى فى الأصناف ما يشبه الدوال، و ترى فى الدوال ما يشبه الأصناف !، فنرى أن الأصناف فى الـPython عبارةٌ عن حاويةٍ لمجموعةٍ من الأوامر المتتابعة التى تُنفذ بشكلٍ متتالٍ واحداً تلو الآخر، و أن المكونات الداخلية للأصناف مثل الدوال و المُشَيِّدَات constructors و خلافها ما هى إلا عباراتٌ تنفيذيةٌ بدورها، و يعنى هذا أنه يمكننى أن أقوم بكتابة عبارات اسناد قيمٍ و استدعاءاتٍ لإجراءاتٍ ما داخل صلب الصنف و ليس داخل مشيداته أو دواله، و مثالٌ على هذا (كودٌ للتوضيح فقط):
حيث يتم فى البداية تعريف دالة تسمى func1، ثم تم استخدامها لإسناد قيمةٍ إلى متغيرٍ يسمى A، ثم تلى ذلك تعريف دالةٍ أخرى تسمى func2.
و تكتمل الصورة حينما نعلم أنه يمكننا فى الـPython تعريف دالةٍ داخل دالةٍ أخرى، و استخدامها عن طريق كتابة اسم الدالة الحاوية لها و إتباعها بقوسى دالةٍ نكتب فيهما المعاملات الممررة للدالة الداخلية. و تُعْرف الدوال الحاوية بالاسم closures.
و مثالٌ على هذا:
و بالنظر إلى صفات الأصناف و الدوال فى الـPython سنرى أن لكليهما الصفات التالية:
  1. اسم الدالة  و اسم أى كائنٍ من الصنف هما مؤشران يشيران للدالة و الكائن، أى أنه يمكن تغيير الدالة أو الكائن الذى يشير إليه الاسم. مثل البرنامج التالي:
حيث أنه فى الأمر قبل الأخير جعلنا الاسم (log) يشير إلى كود الدالة (exp)، بينما جعلنا الاسم (exp) يشير إلى كود الدالة (log). و النتيجة التالية لاستدعاء الاسمين قبل التبديل و بعده تدل على أثر التبديل و نجاحه:
  1. كلاهما يمثل كتلةً من الأوامر التى تُنَفَّذ بشكلٍ تتابعى.
  2. كلاهما له القدرة على احتواء تعريفاتٍ لأصنافٍ داخله، أى أنه يمكن للدالة أن تحتوى على تعريف صنفٍ من الأصناف داخلها لتعود و تستخدمه بصورةٍ طَبْعيةٍ كما يحدث فى حالة الأصناف المتفرعة فى باقى لغات البرمجة.
  1. كلاهما له القدرة على احتواء دوالٍ داخليةٍ يتم استدعاؤها عند الحاجة إليها عن طريق اسم المكون الحاوى لها. مع فارقٍ: أن الدوال تحتوى داخلها دالةً داخليةً واحدةً فقط بينما يمكن للصنف تعديد الدوال، و كذلك فإن الدوال التى فى الصنف يتم استدعاؤها باسمها بينما تُستدعى الدوال الداخلية باسم المتغير الذى استدعى دالتها الحاوية. 
    مثال1:
    مثال2:
و من الصفات السابقة نرى أن هناك تقريبٌ لا معنى له بين صفات مكونين برمجيين يجب إبقاء كل منهما منفصلاً عن الآخر، و عدم إثارة البلبلة التى لا داعى لها بجعل كل منهما يحمل شيئاً من صفات الآخر بشكل لا يحقق أى أهدافٍ فى حقيقة الأمر.
فالدوال هى فى الأصل كتلةٌ من الأوامر التى تُنَفَّذ بشكلٍ تتابعىٍ بحيث يتم استدعاؤها عند الحاجة إليها فيوفر وجودها تكرار الأكواد و مساحة البرنامج النصية و يزيد القدرة على اكتشاف الأخطاء و السرعة فى ذلك و غيرها من العوامل الأخرى، أما الأصناف ففى الأصل لم تنشأ إلا لتكون حاويةً تجمع بين مجموعةٍ من المتغيرات و مجموعةٍ من الدوال التى تعمل عليها، و عن طريق الاستنساخ instantiating من الأصل يتم الاستفادة من كود الصنف أقوى استفادة، عن طريق عزل المحتويات الداخلية للكائنات عن المبرمج النهائى و غيرها من الفوائد، فما معنى وجود دوالٍ تحوى دوالاً أخرى داخلها ؟! أو صنفٍ يحوى أوامر تُنفذ بشكلٍ متسلسلٍ و كأنها كتلةُ أوامرٍ فى صلب دالةٍ من الدوال !
و ما الفائدة التى ستعود علينا من ذلك المزج و التقريب الغريبين؟، و أى ضررٍ سيعود علينا عند التفريق بينهما كما تفعل بقية اللغات؟.

الأحد، 25 ديسمبر، 2011

كلماتٌ ليست كالكلمات


    المطور: م. محمد سامي
    متأثرة بـ: python و lisp
    نظام التشغيل :WINDOWS و GNU/linux 
    موقع اللغة:
    http://www.kalimat-lang.com 
    بريد المبرمج:
    samy2004 @ gmail.com 
    مدونة المبرمج:
     http://iamsamy.blogspot.com/ 
    مواصفات أخرى:
    يقول م. محمد سامي عن اللغة:
كلمات لغةٌٌ برمجيةٌ عربيةٌ لتعليم الأطفال البرمجة وقد راعينا فيها سهولة التعلم وقابلية البرامج للقراءة.
اللغة تشمل امكانات جاهزة للرسم وتحريك الصور على الشاشة، وبها أيضا امكانية التعامل مع لوحة المفاتيح والماوس. كما تأتي في بيئة تطوير متكاملة (IDE) ليسهل بها كتابة وتنفيذ البرمجيات.
ربما تكون كلمات لغة للأطفال لكنها ليست لعبة، هذه لغة حقيقية باوصاف مألوفة للمبرمجين المحترفين:
    • Object-oriented programming
    • Dynamic typing
    • Garbage collection
    • عمل ملفات تنفيذية exe (انظر قائمة برنامج-> عمل ملف تنفيذي)
ولعلّها تكون بإذن الله جزءاً من نهضةٍ علميّةٍ في أمتنا.

ميزات لغة كلمات:
بدايةً: تعد لغة كلمات أرقي لغات البرمجة العربية الحالية علي الإطلاق، فهي بحقٍ تُعد لغة برمجةٍ بكل ما تحمل هذه الكلمة من معاني، و لكلمات الميزات التالية:
  1. كاملة الهيكل، يعني أنها لا ينقصها مكونٌ من المكونات الأساسية التي يجب توفرها في أي لغة برمجة تستخدم عملياً، مثل:
    • التعامل مع المتغيرات.
    • معاملات حسابية و منطقية logic and arithmetic operators
    • الجمل الشرطية.
    • الجمل التكرارية.
    • الدوال functions.
    • أوامر إدخال و إخراج للتعامل مع الشاشة console.
    • أوامر للتعامل مع الملفات.
    • المكونات المركبة:
      1. المصفوفات arrays
      2. القواميس dicts
  2. تحتوي علي مكتبةٍ تجريبيةٍ بسيطة، و لها الإمكانيات التالية:
    • التعامل مع الملفات.
    • الإدخال و الإخراج من/علي الشاشة.
    • أوامر رسومية:
      1. أمر ارسم.خط
      2. أمر ارسم.مستطيل
      3. أمر ارسم.دائرة
      4. أمر ارسم.نقطة
    • أوامر التعامل مع الصور (الأطياف حسب تعبير اللغة):
      1. حمل.طيف
      2. ارسم.طيف / في
      3. اخف.طيف
      4. اظهر.طيف
    • أوامر التعامل مع الحوادث المدعومة في اللغة، و هي:
      1. حوادث الماوس
      2. حوادث لوحة المفاتيح
      3. حوادث الأطياف
    • إمكانيات برمجة الواجهات الرسومية.
  3. لها ميزاتٌ متقدمةٌ للغاية عن لغات البرمجة البسيطة، مثل:
    • دعم البرمجة الكائنية oop بشكلٍ جيد، ففيها:
      1. تعريف الفصائل (تكافئ الـclasses).
      2. الوراثة inheritance
    • إمكانية تجميع الأكواد المرغوب في إعادة استعمالها في وحدات.
       
    • قويةٌ في جزئية الأحداث و معالجتها events and events handling
    • تدعم تنفيذ أكثر من عمليةٍ في نفس الوقت (شيئٌ يشبه في تأثيره تعدد خيوط التنفيذ multithreading).
و للمزيد من التفاصيل و الأمثلة يمكنكم زيارة موقع اللغة.


عيوب لغة كلمات:
و لكن علي الرغم من كل تلك الميزات التي لها، إلا أن كلمات لها عيوبٌ تجعلها لا ترضيني علي الإطلاق، و منها:
  1. اللغة من نوع اللغات ذات التنويع المتغير dynamically typed، و هذا النوع لايصلح لكتابة البرامج التي تحتاج إلي سرعاتٍ فائقةٍ في التنفيذ، و كذلك يساعد في الوقوع في أخطاء التكويد المنطقية لأن اللغة لا تقيد المتغير بنوع بياناتٍ معين (يرجي مراجعة هذه النقطة في نقد لغة السوبرنوفا).
  2. اللغة تحتوي علي مكونين في غاية التشابه هما:
    • الإجراء.
    • الدالة.
      و كان يجب ألا تضم اللغة مكونين متشابهين كهذين علي الإطلاق؛ حيث أن هذا لا داعي له منطقياً، بل و يسبب تشابهُّما الشديد إلي البلبلة عند المبتدئين و سنري مثالاً لهذا عند التحدث عن العيب رقم 5، و كان من الأفضل ضم هذين المكونين في مكونٍ واحدٍ أشمل و أقوي من كليهما (و كان يمكن لكلمات أن تحتوي علي الإجراءات فقط، و لكن مع الاهتمام بأن تأخذ الإجراءات كل جوانب القوة التي تُغْني عن كل مثيلاتها).
  3. اللغة تحتوي علي مكوني:
    • المصفوفات arrays
    • القواميس dicts
      و كان بالإمكان ضم هذين المكونين في مكونٍ واحد، و هذا سيسهل علي المبتدئين كثيراً لأنه يضم المكونات المتشابهة التكوين و الوظيفة في مكونٍ واحدٍ أشمل (هذه نقطة نقدٍ فرعية لكنها موجودةٌ بالفعل).
  4. الدوال و الإجراءات في كلمات ضعيفة البنية؛ فهي:
    • تعيد خرجاً واحداً فقط (في حالة الدالة، أما الإجراءات فلا يفترض أن تعيد مخرجاتٍ من الأصل).
    • لا يمكن إعطاء قيمٍٍ ابتدائيةٍ لمدخلات الدالة أو الإجراء، و هو الأمر الذي كان بإمكانه تيسير العمل بها بشدة و خاصةً في المشاريع الكبيرة.
  5. الفصائل في كلمات ثرثارة؛ فلكي تُعَّرِّف محتويات فصيلةٍ ما فيجب عليك كتابة كلامٍ كثير، و هو علي الرغم من كونه أقل مما هو عليه في حالة لغات مثل الـEiffel إلا أنه أكبر من المعتاد في اللغات الأخري (مثل لغة الـpython، و هي اللغة التي تأثرت بها كلمات بشدة).
    مثال1:
    مثال2:
  6. تحتوي كلمات علي أوامر "علامة" و "اذهب إلى"، و اللذين يكافئان "Goto" في اللغات الإنجليزية، و أنا أرفض هذين الأمرين لأنه من الممكن الاستغناء عنهما و استخدام مكوناتٍ أخري لتؤدي عملهما (الحلقات التكرارية و الجمل الشرطية)، و كذلك فهما يسببان الإرتباك في الكود عند استعمالهما بغزارة (يرجي مراجعة ترجمتي لخطاب Goto statement considered harmeful للبروفيسور ديجكسترا، و الذي أرسله للنشر فى مجلة (Communications of the ACM, Vol. 11, No. 3, March 1968, pp. 147-148).
  7. تعبير الحلقات التكرارية ضعيفٌ للغاية، حيث لا يتيح تغيير مقدار الخطوة في العملية إلا بقيمة زيادةٍ مقدارها 1 (و قد نبه م. محمد سامي إلي أنه ينوي تدارك هذه الجزئية في الإصدارات القادمة بإذن الله عز و جل).
  8. المكتبة حتي الآن مبنيةٌ داخل المفسر نفسه، و ليست قائمةً بذاتها و ليست مكتوبةً بلغة كلمات نفسها بل بلغة الـ++C مع مكتبة الـQT.
  9. لا يوجد مترجمٌ قويٌ للغة حتي الآن، و كل ما يوجد هو مفسرٌ يتيح لنا استخدام بعض مكونات مكتبة الـQT، و هذا أمرٌ مرفوضٌ لأننا نحتاج إلي كتابة المكتبة الخاصة باللغة كاملةً بها نفسها ليتسني لنا نقل هذا الجزء من العلم البرمجي إلي العربية. و لكن المشكلة أنه لا يمكن كتابة مكتبة كلمات بها نفسها كما سيلي في العيب العاشر.
  10. لا يمكن كتابة أوامرٍ بلغة التجميع assembly في برنامج كلمات، و هذا يجعلها غير قادرةٍ علي:
    • إنتاج مكتبتها باستخدامها هي نفسها.
    • إنتاج برامجٍ تعمل علي المتحكمات الميكروئية microcontrollers
    • كتابة البرمجيات الأخري التي نحتاج فيها إلي التعامل مع الذاكرة مباشرةً، مثل:
      1. أنظمة التشغيل.
      2. المترجمات compilers.
      3. المفسرات interpreters.
  11. الوحدات في كلمات تتيح لنا إنشاء إجراءاتٍ و دوالٍ حرة (أي لا يلزم أن تكون مكتوبةً في فصيلةٍ ما)، و هو ما يجعلنا نعاني من مساوئ نموذج البرمجة الإجرائية في المشاريع الكبيرة، و هذه الصفة تناقض مبدأ الأمن الذي نريده في لغة البرمجة القوية.
  12. اللغة لم تستقر في تصميمها بعد، و لم توضع لها خطةٌ توضح حجمها النهائي المتوقع حتي الآن، ونحن نري بالفعل أن اللغة يزيد حجمها يوماً بعد يوم.
  13. ليس فيها تعبيرٌ لمعالجة الاستثناءات exception handling.
  14. الوصول إلي مكونات الفصيلة غير مُوَحَّد الشكل، فنحن نصل إلي المتغير الداخلي للكائن عن طريق كتابة اسمه ثم كتابة اسم الكائن بعده، مثال:
    حيث م هو كائن object فيه ثلاث متغيراتٍ هي: اسم، سن، عنوان.
    أما الإجراءات و الدوال فيجب أن يكتب اسم الكائن أولاً، ثم نتبعه بعلامة : ثم اسم الإجراء أو الدالة. مثال:
    حيث ق هو الكائن، و اضف هو الإجراء أو الدالة.
  1. لا تحتوي علي مكونٍ هامٍ للغاية هو التعدادات enumerations 
  2. لا تحتوي علي فكرة الـتفويض delegating (الموجود في لغاتٍ مثل الـ#C).


    نهايةً: فكلمات علي الرغم من نقدي لها و العيوب التي أراها فيها (و بعضها ليس عيباً كبيراً كما رأيتم)، فيمكنني أن أقول ثانيةً أنها أفضل اللغات البرمجية العربية الحالية علي الإطلاق، و أنها نواةٌ جيدةٌ للغاية للغة برمجةٍ احترافيةٍ من الطراز الأول، و لا أملك حالياً إلا الدعاء لمصممها بكل التوفيق في مسعاه.

الثلاثاء، 20 ديسمبر، 2011

أيها القنو/لينوكس: صبراً فسوف أدبرك :'(

كأن هذا ما ينقصني في هذه الأيام العصيبة !
فوجئت منذ فترةٍ قريبةٍ ببرنامج kpackagekit (و هو مركز البرمجيات في توزيعة kubuntu) يتصرف بشكلٍ غريب؛ فحينما أفتحه لا يقدم لي أسماء الحزم الموجودة في المستودعات لأختار منها ما أريد تنصيبه !
و الأغرب أنني حينما أحاول أن أبحث عن التحديثات المتاحة للنظام يخرج لي هذه الرسالة:
و بالتزامن مع هذا أصبحت رسالة التنبيه إلي وجود ترقيةٍ جديدةٍ للنظام تظهر لي دائماً و بصفةٍ دورية طالما حاسوبي يعمل !

و نظراً لانشغالي الشديد في هذه الأيام، و نظراً كذلك لما تمر به مصر من أزمةٍ عنيفةٍ تضغط علي أعصابي بشدة، فإنني آثرت ألا أبحث في هذا الأمر الآن، و يمكنني أن أصدع رأسي به فيما بعد. و قلت لنفسي و أنا أنخرط فيما هو أهم:
إن كثيراً من المرح ينتظرك في الأيام القادمة يا فتي ^_^
و اليوم حاولت أن أبحث عن حلٍ لهذه المشكلة فوجدت الحديث عنها قليلاً (أو ربما لم أبحث كثيراً)، و الحل الذي وجدته كان أن أكتب الأمر التالي في سطر الأوامر:
sudo apt-get install --reinstall kpackagekit
بحيث يتم تنصيب برنامج kpackagekit من البداية، و لكن سطر الأوامر أخرج لي رسالة الخطأ التالية:
و حينما حاولت التحايل و تنصيب برنامج مدير الحزم synaptic علي أساس أنه سيُمَكِّنُنِي من أداء نفس المهام و ربما لا يكون لمشكلة kpackagekit تأثيرٌ عليه، و ذلك باستخدام الأمر:
sudo apt-get install synaptic
فإن رسالة الخطأ التالية ظهرت لي:

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

أيها القنو/لينوكس: صبراً فسوف أدبرك :'(

الأربعاء، 7 ديسمبر، 2011

تلخيصٌ لمحتويات موسوعة الألسن.

هذا تلخيصٌ لفكرة الموسوعة، كتبته لاستخدامه عند عرض الفكرة علي دور النشر، فأرجو من كان منكم راغباً في المساعدة استعماله لعرض الفكرة بشكلٍ أفضل.
------------------------------------------------------------------------
اسم الكتاب: موسوعة الألسن.
التخصص: العلوم البرمجية.
الحجم المتوقع: ما لا يقل عن 200 ورقة (400 صفحة)
المؤلف: م. وائل حسن محمدعلي.
رابط السيرة الذاتية (النسخة العربية):
رابط السيرة الذاتية (النسخة الإنجليزية):

فكرة الموسوعة:
ضم تلخيصاتٍ للعديد من لغات البرمجة التي تعلمتُها في كتابٍ واحدٍ، بحيث يغني حامله عن عشرات الكتب الأخري، و يتميز بتركيزه علي إيراد القواعد بصورةٍ في غاية التنظيم و البساطة، ليسهل فهم اللغة علي القارئ.
و في هذا المرجع سيكون هناك تلخيصٌ لما يلي من اللغات:
  1. #C
  2. Visual Basic .Net
  3. ++C
  4. Matlab
  5. shell script
  6. Java script
  7. Ruby
  8. Fortran
  9. object pascal
  10. Python
  11. java

و لو أتيحت فترةٌ زمنيةٌ كافيةٌ فيمكنني أن أضيف لما سبق من اللغات لغاتاً أخري هي:
  • Ada
  • HTML
  • intel assembly


و لكل لغةٍ في الكتاب سيكون مدوناً لها:
  • نبذةٌ بسيطةٌ عن تاريخ اللغة (تصميمها، و بناءها، و إصداراتها المختلفة).
  • قواعدها مفصلةً:
    1. تكوين ملفات البرنامج المكتوب بتلك اللغة.
    2. أنواع المتغيرات و الثوابت.
    3. قواعد التسمية (للمتغيرات، و الثوابت، و الدوال، و الأصناف و غيرها من المكونات).
    4. التعليقات comments.
    5. المعاملات الحسابية و المنطقية.
    6. النصوص Strings و كيفية التعامل معها.
    7. المصفوفات Arrays.
    8. المدي range .
    9. المتجهات vectors.
    10. القوائم lists.
    11. القواميس dicts.
    12. المجموعات tuples.
    13. التعدادات enumerations.
    14. الأنماط الجزئية subtypes.
    15. الجمل الشرطية conditional statements.
    16. الجمل التكرارية loops.
    17. معالجة الاستثناءات exceptions handling.
    18. البرمجيات الفرعية subprograms:
      • الإجراءات procedures.
      • الدوال functions.
    19. الخصائص properties.
    20. النماذج modules.
    21. الهياكل structs.
    22. الأصناف classes.
    23. الأحداث و متعهداتها Events and events handlers.
    24. الواجهات interfaces.
    25. التفويض Delegation.
    26. حيزات الأسماء Namespaces.
    27. المهمات tasks.
    28. الباقات packages.
    29. المؤشرات pointers.
      مع الأخذ في الحسبان أنه ما من لغةٍ من اللغات الملخصة تحتوي كل المكونات السابق ذكرها، بل كل لغةٍ تحتوي بعضها و لا تحتوي البعض الآخر، مع تباين ذلك البعض المُحْتَوي.
  • شرحٌ موجزٌ لقواعد اللغة (القواعد الصعبة):
    مع مراعاة عدم تكرار شرح نفس القاعدة أكثر من مرة، إذا كانت متشابهة الشكل و الوظيفة في أكثر من لغة.
  • الجزء الضروري من مكتبة اللغة، مثل:
    1. التعامل مع الملفات و المجلدات.
    2. الإدخال و الإخراج.
    3. الأوامر الأكثر شهرة في كل لغة، فمثلاً لغة الـjava script لها أوامرٌ كثيرةٌ جداً للتعامل مع محتويات صفحات مواقع الشبكة، لذلك فلا بد من وضع هذه الأوامر للحاجة الماسة المتكررة إليها، كما أن لغة الـmatlab هي لغةٌ رياضيةٌ في المقام الأول (و ربما الأوحد) لذلك يجب وضع أشهر أوامرها و التي يتكرر استخدامها بشكلٍ كبير جداً، و نفس الأمر مع لغة الـshell script التي تستخدم للتحكم في وظائف أنظمة التشغيل شبيهة اليونيكس unix-like. إلي آخره.

الفائدة من وراء هذه الموسوعة:
مرجعٌ كهذا هامٌ جداً لشريحةٍ كبيرةٍ جداً من الناس؛ فـ :
  • الطلاب و المبتدئون يهمهم التلخيص و الإيجاز (بعد إنهاء الاستذكار في الشروحات المطولة)، و لكن بدون أن يضطروا إلي التلخيص بأنفسهم، و "موسوعة الألسن" توفر لهم هذا بقوة.
  • المحترفون الراغبون في تعلم لغاتٍ جديدةٍ بمنتهي السرعة يهمهم التركيز علي إيراد القواعد بدون شرحٍ مفصلٍ لا لازمة له عندهم، و كذلك قد يرغبون في تعلم أكثر من لغةٍ جديدةٍ في وقتٍ قصير، و لا وقت لديهم للتلخيص أو البحث عن تلخيصٍ لكل لغةٍ بشكلٍ منفرد. و بالطبع فهؤلاء هم أكثر الناس حاجةً للموسوعة.
  • مصمموا لغات البرمجة و المترجمات compilers و المفسرات interpreters بحاجةٍ إلي مرجعٍٍ شاملٍ للغاتٍ عديدة؛ ليقارنوا بين تكوين تلك اللغات من ناحية قرارات التصميم المختلفة، و رؤية أثر كل قرار علي الشكل العام للغة، و هو ما كتبتُ الموسوعة خصيصاً لأجله.

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


و هذا رابطٌ لتحميل التلخيص السابق علي هيئة مستند pdf:

الأحد، 4 ديسمبر، 2011

موسوعة الألسن: هل من مساند؟

في أثناء حديثي عن مشروع "البرمجة بإبداع" ذكرتُ أن من ضمن أهدافه إنتاج مراجعٍ شاملةٍ في البرمجة باللغة العربية، و ذكرتُ كذلك أن أول تلك المراجع قد قارب علي الانتهاء بالفعل، و أنني قد أسميته "موسوعة الألسن"، و هذا الموضوع مخصصٌ للحديث عن هذا المرجع بالتفصيل.
بدايةً أريد أن أسأل كل واحدٍ منكم سؤالاً بسيطاً: كم مرةٍ تعذبت فيها لكي تتعلم لغة برمجةٍ جديدة؟
فبافتراض أنك تُجيد لغة برمجة واحدةٍ علي الأقل (فلنقل أنها الـjava مثلاً)، و أنك تريد أن تتعلم لغةً أخري (و لنقل أنها الـobject pascal) فبالتأكيد ستعاني الأمرين؛ و ذلك لأنك لن تجد المرجع الذي يخاطب من هو في مثل حالتك بسهولة، فأنت تحتاج إلي تلخيصٍ شاملٍ كاملٍ للـobject pascal و ليس مرجعاً يشرح ما هي البرمجة من الصفر و يشرح ما هي الحلقات التكرارية و ما هي الجمل الشرطية و كأنك لا تعلمها !
و لكنك للأسف سوف تتعب جداً حتي تجد تلخيصاً جيداً لها، و لو أنك أردت أن تتعلم الـpython بعد ذلك بنفس الطريقة فسوف تعاني مرةً أخري حتي تجد التلخيص الذي يغنيك عن قراءة مراجعٍ ضخمةٍ تشرح كل شيئٍ من البداية !
فما بالك لو كنت من هواة تعلم لغات البرمجة المختلفة؟ و أردت تعلم خمس أو ست لغاتٍ مرةً واحدة ؟!
ثم هل ستكون تلك التلخيصات إن وجدتها باللغة العربية، أم أنك ستجدها باللغة الإنقليزية فقط؟

لقد عانيت أنا نفسي من هذا الموقف، و كان هذا من فضل الله عز و جل؛ فأنا تعودت منذ صغري علي تلخيص كل ما أتعلمه، و كذلك تعودت علي ترجمة ما أقابله من موادٍ علميةٍ تعجبي باللغة الإنجليزية، و لأن جزءاً من أهداف مشروع "البرمجة بإبداع" هو ترجمة العلوم البرمجية إلي اللغة العربية: فقد جاءتني فكرة ضم تلخيصات لغات البرمجة التي تعلمتها في كتابٍ واحدٍ يغني حامله عن عشرات الكتب الأخري، و قد أسميته كما أوضحت من قبل "موسوعة الألسن" تعبيراً عن كونه موسوعةً للغاتِ برمجةٍ مختلفةِ التوجه.
و في هذا الكتاب سيكون هناك تخليصٌ لما يلي من اللغات:
  1. #C
  2. Visual Basic .Net
  3. ++C
  4. Ada
  5. Matlab
  6. shell script
  7. Java script
  8. Ruby
  9. Fortran
  10. object pascal
  11. Python
  12. java

و ربما أضيف لهذه اللغات لغتي:
  • HTML
  • intel assembly

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

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

و خيارات المساعدة تشمل:
  • الدعم المادي المباشر: فلو تبرع كل شخص بعشر جنيهاتٍ شهرياً فقط، فسيكون المبلغ الناتج أكبر من المطلوب فعلياً حالياً، و سيكون الفائض مستغلاً لمشروع "البرمجة بإبداع" نفسه.
    و لكني لا أحبذ هذه الفكرة و لا أرغب فيها لأسبابٍ كثيرة (منها الشخصي، و منها ما يرجع للظروف المحيطة)، و لكن علي الرغم من معارضتي لهذه الطريقة إلا أننا سنحتاج لها بشدة في الانطلاق الرسمي لمشروع "البرمجة بإبداع" فيما بعد بعون الله تعالي، بل و علي نطاقٍ واسعٍ للغاية (العالم العربي، ثم العالم الإسلامي برمته) !.
  • كسب تأييد أحد دور النشر لفكرة الكتاب، بحيث يكون من المنتظر طرحه في الأسواق بمجرد الانتهاء من كتابته علي الحاسوب و تنسيقه، و هذا في نظري أفضل سبل المساعدة علي الإطلاق؛ فهو يجعل المشروع مُمَوِلَاً لنفسه، و كذلك يجعلني متفرغاً له كل التفرغ بدون الحاجة إلي عملٍ خاص بي يقيني الفاقة.
  • نشر الفكرة علي شبكات التواصل الاجتماعي (facebook و +Google و twitter) و هذا أضعف الإيمان هنا.
  • و بالطبع هناك الدعم المادي غير المباشر: عن طريق المساعدة علي توفير فرصة عملٍ لي داخل مصر أو خارجها ^_^
    بحيث أتمكن من تفريغ أكبر وقتٍ ممكن عندي للمشروع، و الإنفاق عليه من راتبي الخاص، و هذه مساعدةٌ أفضل من النشر المجرد علي شبكات التواصل الاجتماعي.

و سأنتظر بريداً إليكترونياً ممن يريد التعاون معي، علي العنوان:
يحدد لي فيه شخصيته، و كيف يمكنه معاونتي علي هذا الأمر.