وجهة نظر.. البرمجة فن!

programming-art

وجهة نظر، قد تكون مختلفة عن وجهات النظر السائدة، أو لنقل متطرقة!. برمجة الحاسوب قد لا تكون علمًا نظريًا معقدًا يحتكم إلى بعض القواعد والنظريات الرياضية الصارمة … ليس بعد الآن!، لقد أصبحت البرمجة أقرب إلى مهارة يتم إكتسابها بالممارسة والعمل المستمر، فنًا حرًا نحاول به إبتكار حلول جديدة، وجميلة.

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

اليوم هناك المئات من اللغات البرمجية، وأكثر من 20 مليون شخص مجنون لايعرفون سوى البرمجة وكيفية تنظيف نظاراتهم! (أتحدث عن المبرمجين :D)!. كل مبرمج قام بصنع 3 تطبيقات في المتوسط، نعم لربما أصبح عدد التطبيقات أكثر من عدد المباني في العالم ومازال العدد في تزايد مستمر.

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

طريقة المهندسين المعمارين تشبه مبدأ الـ “Waterfall Model” في تطوير البرمجيات والتي تعتمد بشكل كلي على التخطيط والتحليل والتصميم الدقيق المسبق قبل كتابة أي كود برمجي. مع ذلك بحكم تجربة عملي للآن، يجهل العملاء في العادة مايريدونه بشكل دقيق!، ولديهم دائماً الكثير من طلبات التعديل والتطوير مما يجعلني أفضل إتباع مبادئ الـ “Agile software development” التي تتيح لي المزيد من الحرية والراحة في العمل. الأمر لم يختلف كثيراً عندما جربت العمل مع بعض الشركات الكبيرة التي تمتلك المخططات والتصاميم للمشاريع البرمجية التي تريد تطبيقها، الناتج النهائي عادة ماكان يختلف عن التصور المسبق للمشروع.

حسب الإحصائيات المتوفرة، كثير من التطبيقات المشهورة اليوم، تمت برمجتها بأسلوب حر وبدون الإعتماد الكلي على قواعد التخطيط والتصميم والتحليل التفصيلي لكل شئ!. أصبح كثير من المبرمجين يتجهون لتطبيق مبادئ الـ “Adaptive Software Development” و “Agile software development” بدلاً عن الـ “Waterfall Model”. و بإمكانك ملاحظة كيف أن بعض التطبيقات تختلف بشكل كلي بين إصدارتها فالنسخة v1 من بعض التطبيقات تختلف بشكل كبير عن النسخة v2!. هذه هي طبيعة الأعمال الإبداعية، متغيرة وتتطور بإستمرار، البرمجة أقرب للعمل الإبداعي الحر. لكل مبرمج فلسفته وذوقه وأسلوبه الخاص. المبرمج فنان!

لست وحدي من يؤمن بهذه المبدأ، إطلع أيضاً على:

تحديث: 1/5/2014م: تم إعادة صياغة بعض الفقرات لكي تصل الفكرة بشكل أوضح.

9 رأي حول “وجهة نظر.. البرمجة فن!”

  1. التصميم والرسم عمل ابداعي لكن البرمجة عمل تنظيمي تماماً كما قارنتها بالهندسة المعمارية , فهل ياترى من الممكن بناء اي منزل متوسط او كبير دون تخطيط مسبق ؟
    من الممكن بناء حضيرة او بناء منزل صغير او حوش , لكن مشروع بناء من عدة طوابق او قصر , فالتأكيد تحتاج الى مخططات عدة .

    ما اريد الوصول اليه ان البرامج الصغيرة من الممكن ان تبرمج دون مخطط اما المتوسطة والكبيرة فهي تحتاج الى مخططات وتحتاج الى دراسة وتحديد الأهداف أولاًُ كي لايكون العمل خال من الأخطاء وسهل التطوير ودون وجود ثغرات .
    ويبقى التخطيط الجيد والتنفيذ المتقن مايميز مبرمج عن آخر ومن يتفاخر انه يبرمج دون مخططات فعليه ان يراجع برامجه .

    تحياتي وبإنتظار المقال القادم

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

      البرمجة أمر مختلف عن الهندسة المعمارية، تماماً!. البرمجة مجال مرن وقابل للتغيير والتطوير بإستمرار وبدون شروط وحدود معينة. فلسفة الـ Agile Software Development هي الأكثر شيوعاً بين المبرمجين اليوم، حيث يقوم المبرمج بتسليم المشروع على أجزاء وفترات معينة، وبإمكان العميل طلب عمل التغييرات أثناء العمل أو بعده،، راجع مفاهيم الـ “Extreme programming”.

      إتباع الخطوات التقليدية من إنشاء واستخدام الـ UML و الـ Diagrams و الـ Case Tools وغير ذلك تجعل العمل يبدوا منظماً.. ولكن في التطبيق العملي هذه الخطوات لا تسبب سوى المزيد من التعقيد والبطئ في عملية التطوير. للأسف هذه الخطوات لا تعطي البرمجة حقها من الحرية والمرونة، نحن نحتاج إلى أساليب أفضل وأكثر حداثة.

      1. اسمح لي ان اختلف معك في هذه النقطة لسبب بسيط هو ان قدرات الانسان تختلف من شخص إلى آخر من حيث الذاكرة , فالتخطيط يعطيك الخطوط العريضة وفي ايضاً مرونة فإبمكانك ان تتجاوز المخطط في بعض الاشياء ولا تقيد نفسك بها ام الإستغناء عن المخطط فهو مضيعة اكبر للوقت والجهد ولا ادري كيف سيتذكر المبرمج المئات من الشفرات البرمجية والدوال والمتغيرات المستخدمة وكذا جداول البيانات المختلفة

        1. أعتقد أنك تقصد الإختلاف من حيث مدى الخبرة والممارسة؟، نعم، أتفق معك. فإستعمال أدوات التخطيط المختلفة في بداية مشوارك في عالم تطوير البرمجيات سيساعدك في التنظيم والفهم بشكل أكبر. ولكن مع الممارسة سيصبح الأمر لاداعي له ويمكن الإستغناء عنه.. لا أتخدث هنا عن المشاريع الجماعية والتي تتطلب التأكد من أن جميع أعضاء الفريق يملكون نفس الفكرة التي يجب عليهم تطبيقها.

          البرمجة أصبحت أقرب للفنون التطبيقية. مرنة وحرة. محاولات الأكاديمين في تقييد هذا الفن بالقوانين الصارمة ستبوء بالفشل بإعتقادي الشخصي. إن كنا نريد فرض قواعد معينة على هذا المجال فنحن بحاجة إلى قواعد مرنة وقادرة على إستيعاب التغير الدائم في هذه المهنة.

  2. مع وجهة نظرك أخي نشوان .. لكن يمكن هي مجرد عمليات روتينية يعملوها بالنسبة للــ UML .. يعني مثلا انت عندك مشروع.. هناك خطوات معينة يجب عليك إتباعها ..
    يمكن الأمر سهل بالنسبة للمبرمجين البارعين أمثالك حيث ما يحتاج للرسومات وغيرها .. وبتغير الأفكار بكل سهولة .. لكن ماذا لو واصل أحد مشاريعك غيرك … !!

    هل بيكون قادر على فهم ما كان يدووور في خاطرك؟!

  3. هذا وانت مطور ووردبريس، لو فيه معاك برامج قمت ببنائها من البدايه ايش كنت عتسوي!!،،، ورجاء رجاء لا تصدع راسي بحكاية اعادة اختراع العجله ، لكن مافيش منظمه او شركة كبيره محترمه ترضى تستخدم اي كود جاهز , وفيه معاك حقوق ملكية،،

    1. لم أفهم ماهي علاقة الموضوع بالبرمجيات الجاهزة؟! ولكن بخصوص نقطة أن الشركات الكبيرة لا ترضى باستخدام المكتبات والمشاريع مفتوحة المصدر!. من المعروف أن لكل شركة طريقة إدارتها الخاصة التي تتناسب مع أهدافها، شركات كثيرة وكبيرة جداً تستخدم مشاريع مفتوحة المصدر، مثل: Apple وFacebook..الخ وبحسب التقارير الموجودة على الإنترنت، فحوالي 80% من الشركات تستخدم مشاريع مفتوحة المصدر في منتجاتها!!!

اترك رد