الأحد، 3 يونيو، 2012

أكثر من لغة، و أكثر من بيئةٍ متكاملة.

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

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


و تنقسم اللغات من حيث قوة تعلمي لها إلي عدة فئاتٍ هي:
  • اللغات التي أتقنتها بشكلٍ كبيرٍ جداً، مثل الـ++C و الـjava و الـ#C و VB.NET و إن كنت طبعاً لم أتقن جميع مكوناتها و قواعدها. مع إتقان جزءٍ جيدٍ من مكتباتها القياسية، و ربما مكتباتٍ أخري ذات أغراضٍ خاصة (مثل مكتبة الـOpenCV في حالة لغة الـ++C و مكتبة الـXNA مع لغة الـ#C).
  • اللغات التي أتقنت قواعدها و لكني لم أتعلم مكتبتها القياسية بشكلٍ مماثلٍ نظراً لضيق الوقت و تأجيلي لهذه الخطوة إلي مرحلة تعلم المناهج المختلفة لتصميم المكتبات البرمجية و العلاقة بينها و بين تصميم اللغات ذاتها. و هذا حدث مع لغاتٍ مثل الـpython و الـobject pascal و matlab.
  • اللغات التي تعلمت كثيراً من نحوها syntax و لكن ليس علي نفس مستوي لغات النوع الأول، و كذلك فلم أتعلم مكتبتها القياسية. و منها ruby و fortran90  و shell script (إن اعتبرنا الأخيرة لغة برمجة كاملة).
  • اللغات التي أعلم بعض الأشياء عنها و بعض قراراتها التصميمية، و لكني لم أتعمق فيها مطلقاً، مثل الـeiffel و الـGo و الـobjective C و ربما غيرهن. 
و كذلك كنت لكل لغةٍ من تلك اللغات أُنَصِّب بيئة برمجةٍ متكاملة لها علي حاسوبي لتجربتها قدر الاستطاعة؛ حتي يتسني الاحتكاك العملي لي بها فأدرك نقاط القوة و الضعف فيها عن تجربة واقعية. و كذلك لمعرفة الفروقات بين بيئات البرمجة المتكاملة و التي يعد بناؤها جزءاً هاماً للغاية من هندسة البرمجيات المُساعَدَة حاسوبياً CASE - computer aided software engineering، و لمعرفة تأثير القرارات التصميمية للغة البرمجة علي كيفية عمل و بناء بيئة البرمجة المتكاملة الخاصة بها.
و من ضمن هذه البيئات ما يلي:
  • netbeans
  • monodevelop
  • eric
  • lazarus
  • octave
  • code blocks
  • Gambas
و أعترف أنني لم تتسن لي الفرصة لتجربة أيٍ منها تجربةً حقيقيةً قويةً، إلا بيئة الـNetbeans التي استقر قراري علي استخدامها أثناء البرمجة بالـjava.
     و الجميل أنني بحمد الله تعالي تعودت منذ صغري علي التلخيص الجيد لكل ما أتعلمه، بل و كنت أتسابق في تلخيص الكتب العلمية مع صديقي: ياسين أحمد سعيد، و أدي هذا إلي أنني لم أتعلم شيئاً في حياتي له قيمةٌ إلا و دونت ما تعلمته فيه. و لم يكن تعلمي لهذه اللغات شاذاً عن هذه القاعدة، فاستطعت تكوين تلخيصاتٍ جميلةٍ للغات النوع: الأول و الثاني و الثالث، و هي التي تتكون منها موسوعة الألسن التي تحدثت عنها مسبقاً.


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

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



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

    1. وفقك الله في هذا المشروع البحثي. وإن شاء الله سوف نستفيد من نتائج هذا المشروع في المقارنات ولغات البرمجة الجديدة.

      ردحذف
    2. طالب هندسة الكترونيات\حاسوب 3d sust

      بدات التعلم البرمجة وقراءة الكتب منذ سنتين
      و لكني لاحظت كل ما ابدأ لغة اجد اغلب مراجعها محدود
      اي كأني اتعلم ابجديتها وفقط و الحال نفسه في الجامعة

      معجب بالجيل ال5 عكسك واحيانا استغني عن البرمجة واستخدم "pwct" "GameMaker بعض نقدك لsupernova منطقي لكنه ساعدني

      اعجبت و بمدونتك و ان شاء الله احاول مساعدتك "بمشروعك" لمساعدتي

      ردحذف
    3. مرحباً بك أخي الحبيب في المدونة: دمت مفيداً و مستفيداً.

      بالنسبة لقلة الموارد باللغة العربية فالأمر صحيح، لكن هناك بعض الكتب الرائعة للغات المشهورة مثل ++C و #C و java و VB و object pascal و غيرها.

      يمكنك أن تجد الكتب التالية علي الأقل:

      * سلسلة كتب لمهندس محمد حمدس غانم عن #C و VB.NET (رابط مدونته الشخصية http://mhmdhmdy.blogspot.com/)
      * احتراف فيجوال بازيك دوت نت (تركي العسيري).
      * ابدأ مع أوبجكت باسكال (أبو إياس: معتز عبد العظيم الطاهر، رابط مدونته http://abueyas.wordpress.com/).
      الخطوة الثانية مع أوبجكت باسكال (المؤلف السابق)

      و غيرها.

      بالنسبة للغات الجيل الخامس فلي عنها كلامٌ يطول، و لكن خلاصة الكلام أن لغات الجيل الثالث هي التي تتخصص في البرمجة عامة الأغراض عالية المستوي.
      بينما بالنظر إلي لغات الجيل الخامس
      نجد أنها عالية المستوي زيادة عن اللزوم و غير عامة الأغراض؛ حاول علي سبيل التجربة كتابة برنامج قيادة لكارت صوت sound card driver أو بيئة مرئية مثل الـKDE ^_^
      لاحظ أني لا أكرهها، و لكني أحب لغات الجيل الثالث أكثر بمراحل و مراحل.
      بالنسبة للسوبر نوفا فأنا اعترض بشدة علي تسميتها لغة برمجة؛ و الحق أن مهندس محمود سمير فايد ظلمها كثيراً حينما أخرجها كلغة برمجة عامة الأغراض. و كان الأولي به إخراجها كبيئة معالجة منطقية للنصوص العربية و ساعتها كان استقبالي لها سيصبح مختلفاً تماماً.
      أما الـPWCT فلا أحبه و لا أعتبره أسلوباً حقيقياً للبرمجة عامة الأغراض الفعالة، و لكني لا أنتقده بنفس حدة السوبرنوفا؛ فلقد حدد له مهندس محمود مساراً مختلفاً عن مساري منذ البداية لذا فلم يكن في قائمة ما أختص به، لكني لن أبرمج به علي الإطلاق لأني من الأغلبية الساحقة التي تري التكويد شيئاً نصياً صرفاً و لكن يمكن "أحياناً" أن تطلب المساعدة فيه من بعض الادوات المساعدة. كل ما هنالك أن مصممي اللغات ينبغي عليهم مراجعة ضمائرهم عند التصميم ^_^ يمكنك أن تحاول عمل كارت صوت أيضاً بـPWCT أو برنامجاً غاية في الضخامة لتري ما أعنيه.

      و اتمني زياراتٍ أخري منك.

      ردحذف
    4. نسيت أن أذكر أن مشروع البرمجة بإبداع الذي أعمل عليه الآن سيكون له أثرٌ بالغٌ في وجهات نظرك السابقة. كما أنه سيزيد من المحتوي العربي في مجال البرمجة بما لا يُقاس بإذن الله تعالي.

      ردحذف