الخطوات السوية لإنتاج برامج قوية (مدخل إلى Software Engineering)

تعتبر هذه المقالة جزء من أجزاء عديدة سنقوم بنشرها باستمرار إن شاء الله من أجل تقريب هندسة البرمجيات  Software Engineering لأذهان رواد أكاديمية المبرمجين العرب.
رمقه بنظرات ساخرة وقال له بازدراء:
- ويحك يا مغبون ! لماذا تضيع وقتك في مرحلة التصميم Design؟ ألا ترى أنه لا جدوى من هذه الخزعبلات مادمت تعرف ما الذي عليك عمله؟
فقط قم بفتح بيئة التطوير وابدأ في كتابة الأكواد التي تروج في ذهنك وسترى أنك ستنجز البرنامج دون تحليل أو صداع رأس.
رفع المبرمج اللبيب رأسه ثم رد بهدوء:
- لا تستعجل يا صديقي، وأمهلنا نخبرك اليقين.
ثم تابع بنفس الهدوء:
التخطيط أو التحليل أو التصميم لا يعني تحديدا تصميم الشاشات والواجهات الرسومية GUI أو كتابة أكواد تدور في خلدك كما تتصور، وإنما يعني كذلك التصميم الوظيفي والعملي، بمعنى تحديد طريقة التعامل مع البرنامج واختيار أفضل السبل والطرق لإنجازه على أحسن وجه، إذن فالتصميم يجمع بين الشكل والوظيفة appearance and functionality
تصور معي بناء منزل من دون تصميم، أو تركيب أجزاء سيارة دون مخطط، أو تجميع جهاز موزع إلى قطع دون دليل تجميع، فكذلك يا صاحبي شأن التحليل، فهو ذلك التصور السليم الذي ستسير وفقه حتى يتم إنشاء البرنامج بالشكل الذي ترتضيه ويرضي العميل، أما أن تأتي وتبدأ إنتاج البرنامج مباشرة فذلك أشبه بتجميع قطع لعبة puzzle لم تشاهد صورتها الأصلية، فنسبة الفشل إذن كبيرة جدا.

عليك بالتحليل، فالبرمجة بلا تحليل، كالإعلام العربي بلا تضليل...

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

أضف إلى ذلك أن برنامجك سيفتقد إلى العديد من المزايا والتحسينات optimizations، التي قد لا تكتشفها لأنك بدأت التكويد مباشرة، في حين لو تريثت قليلا، ستظهر لك العديد من الإضافات الرائعة التي يمكنك زيادتها إلى برنامجك، إضافة إلى العديد من الأفكار التي قد تفيدك قبل بدء عملية التكويد وتوفر عليك الكثير من الوقت.

غياب التحليل قبل مرحلة التكويد، أو الاعتماد على تحليل سيء Bad Design قد يتسبب لك في مجموعة من الخسارات أبرزها:

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

هناك 35 تعليقًا:

  1. جزاك الله خير الجزاء كفيت ووفيت
    شكرا

    ردحذف
    الردود
    1. مرحبا بك أخي الحبيب عبد اللطيف، نورتنا بمرورك.

      حذف
  2. شكرا لك .......... انا بدات تعلم البرمجة حديثا ولو اجد احسن من موقعك انطلق منه

    ردحذف
    الردود
    1. بارك الله فيك أخي الحبيب، شهادتكم فخر لنا.

      حذف
  3. هذه مشكلة أكثر المبرمجين , يبدأ مباشرة بكتابة الكود والنتيجة برنامج فاشل أو غير مكتمل أساساً! شكراً لك أستاذنا خالد

    ردحذف
    الردود
    1. تماما أخي خالد، لابد من المرور بمرحلة التخطيط لضمان إكمال البرنامج على الوجه السليم.

      حذف
  4. مقال جميل, و لكن السؤال بعد التحليل ؟ كيف أكتب مطلبي من الأكواد؟
    لأقل ما أفعل أنا بكل صراحة و ما أعجز عنه؟
    1-أحدد فكرة البرنامج والهدف منه و مدخلاته و مخرجاته.
    2-أحدد الفائدة الممكنة من مخرجاته أو توسيعها فيما بعد.
    3-أبدأ بـ SQL و أكتب الجداول جميعها و بشكل متمكن.
    4- أذهب إلى C# و أبدأ بصنع واجهة البرنامج وباقي الفورمات حسب ما حددت سابقا من الإدخالات و الإخراجات.
    5-أبدأ بالتكويد وكن هنا أحيانا يصعب عليي غالبا برمجة أفكاري و طلباتي إلى لغة البرمجة, ما الحل؟
    شكرا
    ammar harfoush

    ردحذف
    الردود
    1. حياك الله أخي عمار، سؤالك دقيق جدا، وأجوبته إن شاء الله سنبثها في الأجزاء القادمة من هذه السلسلة المكتوبة.

      حذف
  5. شكرا أخي خالد علي الإسهاب في هذه النقطة الهامة..

    *بما أن معظم البرامج في العالم العربي مرتبطة بقواعد بيانات فقاعدة بيانات البرنامج مهمة جدا في التركيز علي تحليلها جيدا.

    *أيضا نحتاج إلي ربط بين كيفية إستخدام البرمجة الشيئية OOP و خطوات تحليل كيفية تكويد البرنامج بمعني تحديد الـ Classes و الـ Methodsالخاصة بها و ربط مجموعة الـ Classes بمجموعة الوظائف Methods ، لأننا نتعلم إستخدام الـ OOP دون تعلم كيفية إستخدامها في مرحلة التحليل المنطقي التي يترتب عليها رسم الـ UML لكل مجموعات البرمجة و بدء كتابة الأكواد. فا لو أمكن عمل محاضرة فيديو لشرح هذه النقطة.

    مع تمنياتي لك بدوام التوفيق ...

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

      حذف
  6. كلام جميل وفي الصميم إذا لاقيمة للبرمحجة والتصميم من دون تحليل

    ردحذف
    الردود
    1. تماما أخي الفاضل سياف، غياب التحليل يعني الضياع بين الأخطاء المنهجية.

      حذف
  7. شكرا على المعلومات القيمة, لكن كيف يكون التخطيط وماهي مراحله ,ارجو ان يكون هناك شرح ومثال واضح يبسط كل ذلك,واتمنى لكم المزيد من التفوق والنجاح

    ردحذف
    الردود
    1. هذا ما سنتناوله في المقالات القادمة إن شاء الله إذ سنعتمد على لغة UML كلغة قوية لتحليل النظم.

      حذف
  8. أزال المؤلف هذا التعليق.

    ردحذف
    الردود
    1. اخي خالد اريد منك جزاك الله خيرا معرفة نوعية اللغة اواللغات المستعملة في متل هده البرامج
      https://www.youtube.com/watch?v=N9mDp1KJg5Q

      حذف
  9. جزاك الله خيرا اخ خالد ..............وزادك الله علوا في الدين والدنيا

    ردحذف
    الردود
    1. آمين اللهم آمين، ولكم بالمثل أخي الفاضل عبد الغني.

      حذف
  10. جزيت خيرا اخى الفاضل
    ولكن الوقوع فى الخطأ وارد دائماً حتى لو كان التحليل دقيق
    وبالفعل كلامك صحيح
    والله المسهل والمعين

    ردحذف
  11. كل التحية و الاحترام و التقدير
    نحن بانتظار كتابك علي احر من الجمر
    اعانك الله عليه و سدد خطاك

    ردحذف
    الردود
    1. حياك الله أخي الفاضل أحمد وحيى الله أهلنا الأشراف في غزة الكرامة.

      حذف
  12. جزاك الله كل الخير والسعادة في دنياك واخراك ونساله ان يمن علينا وعليك بالمزيد

    ردحذف
  13. شكرأ لك اخي خالد اتمنى الاستمرار في هندسة البرمجيات "Software Engineering"

    ردحذف
  14. كيف اقوم بتحليل البرنامج؟؟؟؟؟؟

    ردحذف
    الردود
    1. شكراّ على هذا الموضوع الجميل والملهم

      حذف
  15. مشكور
    ومزيد من التقدم

    ردحذف
  16. اسأل الله لك التوفيق والسداد ... وسوف اتواصل معك قريبا اخي خالد

    ردحذف
  17. اين الدرس 62 من مشروع إدارة المبيعات بلغة سي شارب و SQL Server

    ردحذف
  18. السلام عليكم
    أخي السعداني أرجو من مقامكم السامي أن تشرح لي بإختصار ما هو الفرق بين C++ و لغة الفيجوال بيسيك
    و ما هو SQL
    جازاك الله خيرا

    ردحذف
  19. شكرا لك على الموضوع نفعني كثيرا جزاك الله خير جزاء

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

    ردحذف
  21. جزاك الله خير الجزاء كفيت ووفيت
    شكرا

    ردحذف
  22. بارك اللة فيك اخ خالد

    ردحذف