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

عن السوبرنوفا supernova نحكي.


سنة البناء : 2009
المطور: م. محمود سمير فايد
نظام التشغيل :WINDOWS
موقع اللغة : http://supernova.sourceforge.net
بريد المبرمجmsfclipper@yahoo.com
مواصفات أخرى :
هى لغة من لغات الجيل الخامس، أنتجها المطور باستخدام تقنية البرمجة بدون كود (Programming Without Code Technique – PWCT) التى أنتجها هو نفسه أيضاً، و قد تم إنتاج اللغة فى الفترة من يوليو من العام 2009 إلى مارس من العام 2010.
و تهدف هذه اللغة إلى أن تكون أكثر قرباً من اللغة البشرية الطبعية، و هى السمة العامة فى لغات ذلك الجيل الحديث. كما أنها لا يبدو عليها أنها تقتصر على الأمور التعليمية فقط بل يبدو من الواضح أنها لغةٌ خصصت لأجل الإنتاج البرمجى مثل اللغات عالية المستوى المستخدمة حالياً مثل C++, Java و غيرها.
و على الرغم من أن هذه اللغة تعتبر من اللغات التى تم فيها الإعتماد على الفكر المجرد دون النقل إلا أننى أجد عندى انتقادات حادة للغاية لها، و ذلك كما سيتم إيضاحه فى نقد اللغة بعد قليل، و لا أريد أن يظن أحد أن هذه الإنتقادات كان لها باعث آخر غير الرغبة فى تبيان الأخطاء، إذ أننى أعلم أن الحدة الشديدة التى صاحبت التعليق على عيوب اللغة قد تدفع إلى هذا، و لكن (و هذا هو الحق) كان الباعث على هذه الحدة هو طبيعة الأخطاء و العيوب التى توجد فى تصميم اللغة و التى لم أستطع ابتلاعها أبداً، فيرجى الإنتباه لذلك.


عيوب لغة السوبرنوفا  :

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

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

و إنى لأتساءل عن كيفية المحافظة على الهوية العربية إذا كان الكود مكتوباً باللغة الإنجليزية، و أتساءل عن كيفية الحفاظ على التواصل العالمى من خلال اللغة الإنجليزية إذا كان الكود مكتوباً باللغة العربية، و أتساءل عن كيفية فهم غير العرب للبرنامج المختلط بين اللغتين الإنجليزية و العربية. 
لذا فإننى أقول أنها ميزة وهمية الغرض الوحيد من وجودها هو إعطاء اللغة أرضية أكبر بين المستخدمين ممن يبرمجون بالعربية مع الحفاظ على إمكانية جذب المبرمجين بالإنجليزية، و يحق لى هاهنا أن أنبه إلى أن البرامج التمثيلية التى يرفقها المطور فى كتابه كتوضيح لما يشرحه من قواعد هى فى المقام الأول إنجليزية اللغة و البرامج العربية تكون تالية للبرامج الإنجليزية و كأنها هناك فقط لذر الغبار فى العيون.
و حتى القواعد اللغوية فإنها فى الأغلب تذكر باللغة الإنجليزية ثم يذكر لها مثال إنجليزى ثم يذكر المثال العربى، أى أن القاعدة اللغوية يذكر نصها بالإنجليزية فقط كثيراً فإذا كنت ممن يريدون استخدام النص العربى فى البرمجة بلغة البرمجة "العربية" سوبرنوفا فيجب عليك أن تستخلص القاعدة من المثال العربى بنفسك. لأنه "يجب على المبرمج أن يقوم بما على المبرمج أن يقوم به".
5- المكتبة الخاصة باللغة ليست إلا واجهة لمكتبة الـ(xharbourminiGUI) و ليست مكتبة حقيقية مبنية باللغة نفسها كما يجدر باللغات القوية أن تكون بل كما يجدر باللغات العريية الصرفة أن تكون. حيث أن جانباً قوياً من حوافز إنتاج لغة برمجة عربية ينتفى عند القيام بأمر كهذا و هو تعلم كيفية إنشاء المكتبات من الصفر، و بالتالى تفوت علينا الفرصة العملية المتاحة لفهم واحدة من أهم أركان النهضة البرمجية لنا، بل و هناك جانب آخر أن اللغة البرمجية العربية لن تكون فى هذه الحالة أكثر من واجهة للمكتبة و إمكانياتها، حقيقى أنها ستكون واجهة متقدمة للغاية عن لغات الترجمة التى أوضحناها من قبل، إلا أنها ستكون لغة واجهة فى آخر الأمر و كل ما تفعله يعود فى أغلبيته الساحقة فى النهاية إلى إمكانيات المكتبة الحقيقية و إبداع مطوريها و ليس لقوة لغة سوبرنوفا و مطوريها.
5- بل إن الأدهى و الأمر أن مطور اللغة لم يهتم بتطوير مكتبة قوية للغة حتى الآن، و اكتفى ببضعة أوامر بسيطة لا تسمن و لا تغنى من جوع أخذها من مكتبات (DLL) خارجية و هى كما يقول واصفاً لغته:
 و أهمل أدوات كان يجب توفيرها فى الإصدارات الأولى من اللغة مثل:
1- هياكل البيانات الاساسية كـ : المكدس، الطابور، القائمة، القائمة المرتبة.
2- دوال رياضية أساسية مثل جيب الزاوية و جيب تمام الزاوية و ظل الزاوية و غيرها.
و كان الأجدر به التركيز على هذا الأمر بشكل ضخم على الأقل ليتسنى لنا –نحن المرشحين لنكون مسخدمين للغة- أن نختبرها جيداً، بدلاً من التركيز على الأمور التى اهتم بدعمها فى لغته و أنكرناها عليه فى سابق كلامنا.
7- يضع المطور خاصية عدم الحاجة إلى تعريف المتغيرات على أساس أنها ميزة فيقول واصفاً اللغة:
و هى فى الحقيقة عيب كبير من عيوب اللغة، إذ أنها تجعل للغة خواص ضارة هى:
1/ عدم القدرة على مساعدة المبرمج على عدم الوقوع فى أخطاء استخدام المتغيرات المختلفة، كأن يستخدم متغير يحتوى على قيمة نصية على أساس احتوائه على قيمة رقمية، فلأن اللغة لا تقيد المتغير بنوع معين من الأنواع فهذا الخطأ و مثيلاته لن يتم اكتشافها إلا فى زمن التنفيذ، و هو ما يضيف إلينا أعباءاً فوق الأعباء فى مرحلة الإختبار لاكتشاف مثل هذا النوع من الاخطاء على الرغم من أن المحاولات الجادة لتطوير عملية اكتشاف الاخطاء تحاول جعل هذا فى مرحلة التصحيح قدر الإمكان.
و هذا الأمر يعد الكسر الثانى لقاعدة الأمن فى تصميم لغات البرمجة، و يبدو أن المطور لا يعترف بهذا الهدف على الإطلاق أو أنه كما قلنا قبلاً استبدله بالمبدأ القائل "على المبرمج أن يقوم بما على المبرمج أن يقوم به".
2/ استهلاك قدر أكبر من الذاكرة و وقت المعالجة من ذلك الذى تأخذه اللغات التى تفرق بين أنواع المتغيرات، و هذا أمرمتوقع ما دام المبرمج ألقى جزءاً من مسئوليته على عاتق اللغة لكى تقوم هى بالنيابة عنه. و قد يكون هذا السلوك معقولاً فى برمجة مواقع الشبكة نظراً لأن تحميل الموقع يأخذ وقتاً أطول من تحميل البرنامج العادى الموجود على القرص الصلب الخاص بالجهاز، و بالتالى لا تشكل الزيادة التى تحدثنا عنها فارقاً نظراً لتفاهتها مقارنة بعبء التحميل من الشبكة، و لكنه ليس معقولاً أبداً حينما نتحدث عن برمجة أنظمة حساسة للوقت مثل أنظمة التشغيل و المترجمات و المفسرات و غيرها من الانظمة المشابهة (و هى الأنظمة الأولى التى يجب أن نهتم بها لإنشاء قاعدة برمجية قوية تؤسس للنهضة القادمة).
8- ثالثة الأثافى كما تقول العرب أنه يمكن لأكثر من كائن واحد أن يحمل نفس الإسم الذى يستخدم فى الكود البرمجى و هو الأمر المتواتر فى لغات البرمجة رفضه و عدم عقلانيته، إذ لو كان لأكثر من كائن نفس المسمى ثم أردنا أن نجرى عملية ما على أحدها فكيف سيتسنى لنا أن نقوم بالتفرقة بينهما ما دام الشئ المخصص للتفرقة بينها و هو الإسم فقد هذه الخاصية، و العجيب أن المطور يقول فى كتابه:
و كل هذا لأن "الخيال" يسمح بذلك !!!!!!!!!
و لو كان على القواعد البرمجية أن تتماشى مع "الخيال" حتى و لو كان خطئاً لصارت الدنيا خراباً، إذ لابد من قواعد صارمة تمنع من الوقوع فى الخطأ و ليس مجاراة "الخيال".
9- ليس للغة حتى الآن خطة عمل يمكن الركون إليها ممن ينوون التحول إلى البرمجة باستخدامها، فالجدول الزمنى يعطى وضوحاً للرؤية و مصداقية كبيرة عند التعامل مع مثل هذه الأمور، كما أنه يوضح سمة التقدم فى تطوير اللغة و هل يسير على الخطى المرسومة له أم لا مما يساعد على تعديل المسار إذا لزم الأمر.
أما بدون جدول زمنى و خطة عمل واضحة فإن الامر يصير بالنسبة للمطورين المشاركين تسلية لا أكثر، و بالنسبة للمرشحين ليكونوا مستخدمين للغة البرمجة فإنه يصير حب معرفة لا أكثر، و تتحول العملية كلها إلى عبث لا جدوى منه حتى و إن كان المشاركون يمتلكون حماساً كبيراً فى بداية الأمر، فالحماس كما جربنا جميعنا لا يكفى أبداً و لابد من عقل الأمور بعقال قوى مطمئن.
10- اللغة من لغات الجيل الخامس، أى أنها من اللغات التى تهتم بأن يكون الكود مكتوباً بأسلوب و تركيب أقرب ما يكون إلى اللغة البشرية العادية.
و هذا النوع من لغات البرمجة لا يمكن الإعتماد عليه إلا فى مجالات معينة مخصص لها، مثل تطوير أساليب الذكاء الإصطناعى و محاولة الرقى بالبرمجيات التى تعمل على إدارة و تسيير البشر الآليين لكى يمكنها أن تستوعب التعابير و الأوامر البشرية التى توجه لها باللغة المعتادة حتى يمكن ضم هذه الآلات إلى الخدمة مع البشر بسهولة و يسر دون الحاجة إلى إيجاد لغات ذات قوانين تختلف عن اللغة العادية للتحكم بها (مثل لغات البرمجة الحالية).
و لأننا (نحن المسلمين عامة و العرب خاصة) لم نصل إلى هذه الدرجة من الرقى بعد فإن ما نحتاجه الآن هو اللغات التى يمكننا بها أن ننافس على المستوى العالمى فى مجال إنتاج البرمجيات، و يمكنها بالتالى إنتاج تطبيقات تتراوح بين المستوى الأدنى (أى البرمجة على مستوى الخانة) و المستوى الأعلى (أى البرمجة على مستوى عال من التجريد و الوراثة و التنظيم الهيكلى للمكتبات) و كذلك تبنى بها اللغات المنطقية الراقية التكوين فيما بعد، و هو الأمرالذى لا يتحقق لا فى لغات الأجيال الأولى و الثانية و لا فى لغات الأجيال الرابعة و لا الخامسة و إنما تتفرد به لغات الجيل الثالث.
و الغريب أن المطور يقول عن هذا الأمر:

 أى أنه لم يحاول فقط جعلها من لغات الجيل الخامس، بل حاول جعلها تتفوق فى مستوى القرب من لغة البشر الطبعية و هوالأمر الذى لا يزيدنا فى هذا المقام فرحاً.
فإذا ما سلمنا للمطور أن لغته بالفعل لغة برمجة قوية من الجيل الخامس فإن الإعتراض يظل موجوداً بأن مثل هذه اللغة خطوة متعجلة على طريق النهضة البرمجية و أن وقتها لم يحن بعد.
11- على الرغم من كون بساطة القواعد كان هدفاً أساسياً فى تصميم اللغة فإن هناك قواعد فى السوبرنوفا تسير على العكس من ذلك، حيث أنها تكون أصعب بكثير من نظيراتها فى اللغات الأخرى مثل قول المؤلف عن التعبيرات:
و مثال واقعى على القواعد السابقة الجزء التالى من برنامج كتبه المطور:
حيث نرى أنه قد تعسف منتهى التعسف حينما أرغم المبرمج المستخدم للسوبرنوفا على إحاطة كل متغير بقوسين [ ] و أجبره على إحاطة كل قيمة بقوسين () فى حين أن لغة مثل الـ(C++) (التى أكرهها أنا شخصياً لتعقيدها المقيت) تبدو متسامحة لأقصى الحدود حينما تقارن بالسوبرنوفا فى هذا الشأن، فلن يحتاج المبرمج التعس إلى إحاطة كل رمز من رموزه (التى ربما تبلغ فى المعادلات الرياضية التى تحل برمجياً حدها الأقصى) بالأقواس و لا أن يحيط القيم بالأقواس و لا أن يراعى بالطبع الفرق بين أقواس المتغيرات و أقواس القيم.
و يزداد الأمر تعقيداً حينما ندخل إلى التعامل مع المصفوفات حيث نرى ما يشبه الكود التالى:
 فالمفترض فى الكود التالى أن المطور يقوم بأخذ كل العناصر التى فى المصفوفة المسماة (myarray) و يقوم بوضعها فى صندوق قائمة (list box) يسمى (listbox)، و لكن الملفت للنظر هو كيفية  استخدامه لعناصر المصفوفة حيث:
كتب اسم المصفوفة محاطاً بقوسين مربعين [ ] ثم  تلاهما بشرطة مائلة خلفية \ ليكتب بعدها رقم العنصر المراد استخدامه بالطبع بين قوسين مربعين لأن الرقم هنا مخزن فى متغير و لو كان قيمة مباشرة لتحتم عليه أن يستخدم القوسين (). !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
و لو قارنا هذا بالـ(C++) -التى لا أدرى لم صرت أحبها فجأة- لوجدنا أنها ستكون الأيسر مرة ثانية، فكل ماهنالك أنك ستكتب اسم المصفوفة (بدون أى أقواس) ثم تكتب رقم العنصر بين قوسين [ ] بدون شرطة مائلة خلفية \، و القوسين الوحيدين الذين ستضطر إلى كتابتهما هنا موحدا الشكل و لن يشكل فارقاً أن تضع بينهما رقماً مباشراً أو أن تضع متغيراً رقمياً.
و الكودين التاليين يلخصان لنا خيبة الأمل الكاملة فى سهولة قواعد سوبرنوفا التى وعدنا بها:
حيث فى سوبرنوفا:
يساوى فى (C++):

 و لم أضرب المثال بالـ(visual basic) أو بالـ(python) حتى لا ينتحر القراء عند المقارنة، و الأمر هنا أننا نرى أن الهدف الأصل الذى قال المطور أن لغته تهدف إلى الوصول إليه قد تبخر، و صار بالضبط كسراب بقيعة نحسبه نحن المخدوعون ماءاً حتى إذا أتيناه لم نجده شيئاً، بل سنجد التعنت القواعدى الذى لا نطيقه و بالتالى يكون من العسير علينا فى هذه الحال أن نقتنع بأن السوبرنوفا خطوةٌ إلى الأمام فى سبيل تبسيط البرمجة.

هناك 3 تعليقات:

  1. لا أستطيع الكتابة بلعربية Document texte
    وهل هو شغال في الوينداوز

    ردحذف
    الردود
    1. السوبر نوفا تدعم الكتابة باللغتين: العربية و الإنقليزية، كما أنها تعمل علي الويندوز و اللينوكس.

      حذف
  2. تم تنقيح هذا المقال و تم ضمه إلي كتاب "رسالة البرمجة بإبداع" المُتاح للتحميل المجاني من هنا:
    http://ebda3lang.blogspot.com/p/blog-page.html

    فأرجو ممن لديه ملاحظةٌ علي النسخة الموجودة هنا، أو مَن أراد قراءة الموضوع بدون الإزعاج الخاص بحذف الصور المُدمجة هنا مِن موقع الاستضافة (لمرور فترةٍ كبيرة): أن يقوم بمطالعة النسخة التي الكتاب.

    ردحذف