Tuesday 29 April 2008

دورة الحياة البرمجية الحبيسة


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

أذكر أنني كتبت في ذاك الوقت أوراق بسيطة، أهتم فيها بذكر إجراءات فتح وتخطيط وتنفيذ وإغلاق المشروع - أي مشروع - وسميتها Loose Paper Folder، وذلك تيمنا بإحساسي أن هناك شيئا ما مفقود، ما لم أعرفه في هذه الآونة ولكنني عرفته فيما بعد هو أن المهندس أحمد حماد مدير قسم الإنترنت آن ذاك كان قد قطع شوطا لا بأس به في هذا الاتجاه بشكل أكثر تنظيما وأكثر ابتكارا وأكثر توثيقا، ولكنه وللأسف لم يتناسب مطلقا والعمل في قسم البرامج المكتبية الذي كنت اعمل فيه، ولا يتناسب مع التكنولوجيا المستخدمة عندنا في هذا الوقت ألا وهي الفيجوال سي ولا يتناسب مع الحلول البرمجية التي كان يقدمها قسمي، عرفت أن حماد والزواوي وضعوا لبنات تطبيق نظام الأيزو أو بالأحرى طوروها وحاولوا تحسينها قدر إمكانهم، لم أدرك وقتها المعاني الخفية وراء كتل المصطلحات المستخدمة، فكنت مثلا أخلط بين ال (Process) المعروفة برمجيا وتكنولوجيا في نظام التشغيل Windows وبين المعنى الإداري للكلمة والذي بات واضحا لي أيما وضوح في مطلع العام 2005 بعد اجتياز الدورة التدريبية للPSP حيث اتضح أن للكلمة معنى مغاير تماما، وهو مجموعة الخطوات المعيارية والقياسية لأي إجراء إداري أو إجراء تنفيذي أو إجراء تطويري في محيط العمل.

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

وعندما أصبحت مديرا لوحدة ميكروسوفت أيقنت أن هناك خللا ما عند الجميع، أيقنت أن مرحلة التحليل الوظيفي لرؤية العميل والتحليل التقني لرؤية المطور بينهما خلط كبير عند الجميع بلا استثناء، فركزت على فكرة تحليلية بسيطة وهي الUse-case storyboard، كما أدركت أن 70% من المشاريع تقوم على نفس المفاهيم والأدوار والمهام والوظائف، فأعددت محاضرات تدريبية وألقيتها على رفقاء الدرب وجنود المسيرة، وأبرزت دورة الحياة البرمجية الحبيسة التي ظللت أبحث عنها طيلة 3 سنوات، وحاولت تقديمها بشكل عملي ملموس.


Component Assembly Model، نعم هي، مطلب دام أكثر من أربع سنوات بالشركة وظل يراود القادة والمدراء، ودورة حياة ظلت حبيسة الكتب والإنترنت عن كثير من المشاريع، أخيرا تظهر للنور، نعم :) حققت أحد المعادلات الهامة في حرف، فضل من الله ونعمة، ركزت جهودي مع رفقاء الدرب على مكتبة المكونات اللازمة كمبدأ من مبادئ هذه الدورة لتحقيق فكرة إعادة الاستخدام، وبدأت تدعيمها بتأريخ منظم وإحصائيات فعلية عن كل مكون داخل المكتبة، حتى يكون تقيم المشاريع المستقبلية أكثر دقة، وبالفعل بدأت سرعة الإنتاج تدب في المشاريع بعد بناء 70% من المكتبة.

هنا يجب أن نعي أن الوعاء الثقافي فارغ عند الكثيرين في هذه المهنة الصعبة، وإنه لن يمتلئ إلا مع مرور الوقت وزيادة الخبرات والمعرفة والتعلم المنهجي، والتعلم هنا يختلف عن التثقيف ;).

Component Assembly Model – Development Lifecycle Model

Object technologies provide the technical framework for a component-based process model for software engineering. The object oriented paradigm emphasizes the creation of classes that encapsulate both data and the algorithm that are used to manipulate the data. If properly designed and implemented, object oriented classes are reusable across different applicationsand computer based system architectures. Component Assembly Model leads to software reusability. The integration/assembly of the already existing software components accelerate the development process. Nowadays many component libraries are available on the Internet. If the right components are chosen, the integration aspect is made much simpler.

No comments: