السلام عليكم ،
الموضوع " غير مفيد علمياً " ، لكن لتقطيع الوقت فقط ..
عندما يكون لديك مجموعة زملاء ، وكل زميل " متشرّب ثقافة لغة ما " ، فإنك سترى " العجب العجاب " ، منه من ناحية أسلوبه في كتابة " البرنامج " .
لدينا أربعة زملاء :
- زميل لغته البرمجية الأولى PHP .
- زميل لغته البرمجية الأولىJava .
- زميل لغته البرمجية الأولى Visual Basic .
- زميل لغته البرمجية الأولى++C .
و لدينا هذه المشكلة :
مطلوب كتابة برنامج بسيط لإضافة وحذف و عرض مجموعة Students لدى كل واحد عدة خصائص من ضمنها Courses التي يدرسها ، و طبعاً كل Course له خصائص من الكتب المقترحة لهذا الكورس .
مبرمج PHP:
حسب تجربتي مع مبرمجي PHP ( زملاء ) ، لديهم تقديس عجيب للمصفوفات. كل شيء عندهم يمثلونه بمصفوفة ، لذلك إذا كان زميلك مبرمج PHP قح ، فسترى هذه السطور في برنامجه
ثقافة المصفوفات متأصلة في مبرمجي 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 ليبدو الوضع النهائي هكذا :
طريقة كتابة الكود " منطقية " ، لأنها في النهاية عبارة عن كائنات ، لكن سيرفع ضغطك شيئان اثنان :
- كل شيء في جافا كائنات ، وستلاحظ أن زميلك قد تأثر بهذه العادة ، ويبدو أن الهدف أن نصل في النهاية إلى القمة Object ليبدو الأمر وكأن الهدف أن " نرسم هرم جميل " .
- هناك أمور لا معنى لها ، فمثلاً لاكتشاف خطأ " إضافة طالب " ستجده ينشئ AddStudentException خاص ، ليرث من عشرين كلاس ، بينما كان يكفي إعادة -1 ، للدلالة على أن هناك مشكلة في عملية الإضافة .
هذه مقتنع تماماً أنها عادة سيئة ولا أرى أن يتم نقل هذا الأسلوب إلى لغات أخرى . بل نستخدمها في جافا فقط .
مبرمج Visual Basic :
هذا لا أطيقه ولا أطيق العمل معه ( معلش :-) ) ، بينما نحن نتشاور حول حل المشكلة تتفاجأ باقتراحاته :
- إنشاء TextBox في Form .
- ربط Form مع Form .
- استخدام الأداة Sql للاتصال بقاعدة البيانات عن طريق Wizard .
هو يعرف كل شيء عن اللغة .. ولكن عقله الباطن لا يتحدث إلا عن GUI ، و لا يفكر إلا في هذا .. لذلك العمل معه صعب جداً .
مبرمج ++C :
تقريباً هو أفضلهم ، فهو قد يستخدم OOP إن احتاج لها ، أو يستخدم Procedures إن رأى أنها كافية ، وقد يستفيد من STL ممزوجة مع Templates ( حيث أسلوب برمجة مختلف) ... لذلك سترتاح معه ، حيث سيختار ما يحتاج لأنه تأثر بثقافة ++C حيث أنها multi-paradigm .
لكن بعد أن نكمل بناء " منطق برنامجنا " مع زميلنا ، سنتفاجأ أنه يستخدم Command-line كواجهة لبرنامجه ، فثقافة GUI هي ما تنقص زميلنا .
الخلاصة :
المبرمج الذي لا يتعلم " علوم الحاسب كمفهوم عام و شامل " ، بينما يركز على تعلّم " لغة برمجية بأدواتها فقط " ، فإنه في الغالب ستجده يستخدم الأدوات في المواقع الخطأ ، ليس لنقص في اللغة ولكن لنقص في إمكانيات المبرمج نفسه . وهي حوادث واقعية عشتها مع بعض الزملاء ،
================== الكاتب: عبد الله الشمري=============
الموضوع " غير مفيد علمياً " ، لكن لتقطيع الوقت فقط ..
عندما يكون لديك مجموعة زملاء ، وكل زميل " متشرّب ثقافة لغة ما " ، فإنك سترى " العجب العجاب " ، منه من ناحية أسلوبه في كتابة " البرنامج " .
لدينا أربعة زملاء :
- زميل لغته البرمجية الأولى 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 هي ما تنقص زميلنا .
الخلاصة :
المبرمج الذي لا يتعلم " علوم الحاسب كمفهوم عام و شامل " ، بينما يركز على تعلّم " لغة برمجية بأدواتها فقط " ، فإنه في الغالب ستجده يستخدم الأدوات في المواقع الخطأ ، ليس لنقص في اللغة ولكن لنقص في إمكانيات المبرمج نفسه . وهي حوادث واقعية عشتها مع بعض الزملاء ،
================== الكاتب: عبد الله الشمري=============
ليست هناك تعليقات:
إرسال تعليق