2015/08/09

عادات تكتسبها من لغات البرمجة

السلام عليكم ،

الموضوع " غير مفيد علمياً " ، لكن لتقطيع الوقت فقط ..

عندما يكون لديك مجموعة زملاء ، وكل زميل " متشرّب ثقافة لغة ما " ، فإنك سترى " العجب العجاب " ، منه من ناحية أسلوبه في كتابة " البرنامج " .

لدينا أربعة زملاء :

- زميل لغته البرمجية الأولى PHP .
- زميل لغته البرمجية الأولىJava .
- زميل لغته البرمجية الأولى Visual Basic .
- زميل لغته البرمجية الأولى++C .


و لدينا هذه المشكلة :
مطلوب كتابة برنامج بسيط لإضافة وحذف و عرض مجموعة Students لدى كل واحد عدة خصائص من ضمنها Courses التي يدرسها ، و طبعاً كل Course له خصائص من الكتب المقترحة لهذا الكورس .

مبرمج PHP:
حسب تجربتي مع مبرمجي PHP ( زملاء ) ، لديهم تقديس عجيب للمصفوفات. كل شيء عندهم يمثلونه بمصفوفة ، لذلك إذا كان زميلك مبرمج PHP قح ، فسترى هذه السطور في برنامجه

<?php
function get_all_student(){
 //dummy data
 $student_id = 1;
 $course_id  = 2;
 $book_id = 3;
 
 $data['students'][$student_id]['student_name'] = $params['student_name'];
 $data['students']['courses'][$course_id]['course_name'] = $params['course_name'];;
 $data['students']['courses'][$course_id]['books'][$book_id]['book_name'] = $params['book_name'];
 
 return $data;
}

?>
صورة

ثقافة المصفوفات متأصلة في مبرمجي PHP ، وبالرغم من أن PHP 5 تدعم OOP بشكل ممتاز ( وقبلها PHP 4 ) ! ولكن كثير منهم لايستخدمها ، لدرجة أن هناك " دوال خاصة " بعملية تحويل الكائن إلى مصفوفة و العكس لإشباع رغبة هذه الطائفة ! هذه الثقافة يبدو أنها بسبب ترسبات قديمة ، كالتالي :

- المصفوفات في PHP ليست مجرد مصفوفات ، بل من الممكن أن تكون map يحتوي على key و value .. لذلك وبسبب هذه الميزة ، تجد مبرمج مبتدئ في php يستخدم maps دون أن يشعر ، بينما لو بحثت عن مبرمجي Java و Cpp ، فلن تجد إلا المبرمجين " الأقوياء " ، من يستخدم maps و في ظروف ضيقة جداً .

- php عندما ظهرت في نسخها الأولى لم تكن تدعم البرمجة الكائنية OOP ، وبالتالي كانوا يقنعون بعضهم أن المصفوفات تقوم بالأمر على أكمل وجه . .

طبعاً لن تشاهد الكثير من OOP في برنامج زميلك ، ولن تشاهد شيء اسمه Exceptions ( عندهم die شيء مقدس ومن أجل اكتشاف الأخطاء قد تشاهد var_dump ) ، ولن تشاهد function overloading لأن php لاتدعمها صورة ، لديهم طرق ملتوية باستخدام functions خاصة .

مبرمج Java :
زميلنا في Java سيحوّل كل شيء إلى Class ليبدو الوضع النهائي هكذا :
class Student{
 private Vector<Course> courses;
 private String name;
 
}

class Course {
 private Vector<Book> books;
 private String name;
}

class Book {
 private String name;
}


public static void main(){

 try{
  Student s = new Student();
  .
  .
  s.add()
 }
 catch(AddStudentException e){
 
 }
 
 catch(SqlDuplicatedKeyException e){
 }
 catch(SqlConnectionException e)
 {
 }
 .
 .
 .
 .
 ..... :(
}

طريقة كتابة الكود " منطقية " ، لأنها في النهاية عبارة عن كائنات ، لكن سيرفع ضغطك شيئان اثنان :

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

هذه مقتنع تماماً أنها عادة سيئة ولا أرى أن يتم نقل هذا الأسلوب إلى لغات أخرى . بل نستخدمها في جافا فقط .


مبرمج Visual Basic :

هذا لا أطيقه ولا أطيق العمل معه ( معلش :-) ) ، بينما نحن نتشاور حول حل المشكلة تتفاجأ باقتراحاته :

- إنشاء TextBox في Form .
- ربط Form مع Form .
- استخدام الأداة Sql للاتصال بقاعدة البيانات عن طريق Wizard .

هو يعرف كل شيء عن اللغة .. ولكن عقله الباطن لا يتحدث إلا عن GUI ، و لا يفكر إلا في هذا .. لذلك العمل معه صعب جداً .

مبرمج ++C :
تقريباً هو أفضلهم ، فهو قد يستخدم OOP إن احتاج لها ، أو يستخدم Procedures إن رأى أنها كافية ، وقد يستفيد من STL ممزوجة مع Templates ( حيث أسلوب برمجة مختلف) ... لذلك سترتاح معه ، حيث سيختار ما يحتاج لأنه تأثر بثقافة ++C حيث أنها multi-paradigm .
لكن بعد أن نكمل بناء " منطق برنامجنا " مع زميلنا ، سنتفاجأ أنه يستخدم Command-line كواجهة لبرنامجه ، فثقافة GUI هي ما تنقص زميلنا صورة .


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

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

إرسال تعليق