الاثنين، 18 نوفمبر، 2013

كيف يمكن إدارة المشاريع البرمجية الجماعية ؟

علي موقع Arabia I/O كان هناك تساؤلٌ تحت عنوان: "كيف يمكن إدارة المشاريع البرمجية الجماعية ؟"، يقول فيه صاحبه:
السلام عليكم :)
آمل أن الجميع بخير .. لدي سؤال، و هو "كيف يقوم فريق من المطورين بالعمل على مشروع معين بشكل مرتب و منظم؟، هل هناك أي طرق مفضلة يجب إتباعها؟، على سبيل المثال المشروع عبارة عن منتدى سيتم تطويره بـ استخدام PHP وربطه مع قاعدة بيانات MySql."
آمل أن يحدثنا أحد الخبراء ليستفيد الجميع، حتى نبدأ بعمل مشروع مع فريقنا الخاص بشكل منظم ومرتب. لو هناك نصائح لا تبخل علينا بها :)
تحياتي،،

فكانت إجابتي عليه كما يلي:
و علبكم السلام و رحمة الله و بركاته،
سؤالك يجب تأليف كتاب ضخم للإجابة عنه باستفاضة :) 
و لكن القليل الذي أعلمه كما يلي:
  • أنصح بأن يقوم صاحب الفكرة أو المشروع بعمل بيان يوضح فيه الفكرة العامة للمشروع؛ بحيث يوزعه علي طاقم الفريق قبل البدء في العمل بفترة كافية، ليقرؤوه بتمعن و يجهزوا أسئلتهم عما استغلق عليهم فهمه في البيان، و كذلك يجهزوا قائمةً بالانطباعات التي تكونت لديهم عن الفكرة، من حيث مساوئها و ميزاتها و فرص تطويرها في القريب العاجل (و ربما في المستقبل البعيد)،
  • عقد جلسة "عصف ذهني" للاستماع لرؤي فريق العمل و ملاحظاتهم حول الفكرة المبدئية، و بناءً علي نتائج جلسة العصف الذهني هذه يتم عمل وثيقة نهائية بـ: أهداف المشروع، التصميم الذي تم الاستقرار عليه، الأدوات التي سيتم استخدامها في العمل، الخطة الزمنية للمشروع، أسلوب التكويد ... إلخ،
  • الأدوات البرمجية التي يمكن استخدامها في العمل (حسب معرفتي القليلة بأدوات العمل الجماعي):
    • git لإدارة الموارد المُشتركة،
    • بيئة برمجة متكاملة IDE قوية، مع استخدام git من خلالها لأن ذلك يجعل الأمور أسهل و أبسط من استخدام سطر الأوامر (حسبما أظن)،
    • قائمة بريدية مغلقة للنقاش حول التفاصيل التقنية للمشروع،
  • أثناء العمل يجب الحرص علي توثيق أهم جوانب المشروع بدقة، لا أقول أنه يجب توثيق "كل" شيء، بل أقول أنه من اللازم الاحتفاظ بوسيلة تجعل من السهل انضمام آخرين إلي فريق العمل فيما بعد، أو حتي تغيير فريق العمل بالكامل، و لا يكون هذا إلا بتوثيق جوانب المشروع المهمة بعناية و وضوح، مع التحديث المستمر لتلك التوثيقات عند تغير أحد الجوانب التي تتحدث عنها بما يفقدها مصداقيتها. عامةً يجب البعد عن توثيق الخوارزمات algorithms التي تتغير باستمرار ، أو الخوارزمات قليلة الأهمية أو التعقيد، و التي يمكن بمجرد قراءة الأكواد الإحاطة بها بسرعة و سلاسة (التعليقات التي في الأكواد تكفي للتوثيق الجيد لهذا النوع). و إنما يجب التركيز علي شرح تقسيم المشروع من ملفات و مجلدات، و شرح الأقسام الوظيفية في الأكواد (أعني: ما الوظيفة التي تقوم بها كل مجموعة من الأصناف classes و/أو الدوال functions). و في نهاية التوثيق ربما يكون من الأفضل أن تضع روابط لمقالات و/أو مواقع كاملة يمكن من خلالها الاستزادة عن أحد الأمور التي تهم المشروع، مثل كيفية التعامل مغ git، و شرح بعض الأمور البرمجية التي ربما يحتاج للرجوع إليها فريق العمل باستمرار ... إلخ.
  • بالنسبة لمنهجية العمل البرمجي الجماعي للفريق فأنصح بأن تكون من نوعية "البرمجة الرشيقة agile development"، و لن أشرح ما هية البرمجة الرشيقة هنا لأنها تستحق بدورها كتباً و مراجع للتمكن منها، و لم أقم حتي الآن بقراءة ما يكفي للحديث عنها باستفاضة (لكني لا زلتُ أنصح بها :P
  • يجب الاهتمام كثيراً بوضع قواعد لتعامل أعضاء فريق العمل مع بعضهم البعض؛ حتي لا تؤدي بعض الأمور الصبيانية لتعطيل المسيرة كلها !، و أن تكون هذه القواعد موجودة في نفس الكتيب الخاص بالتفاصيل التقنية للمشروع (ربما في بداية الكتيب أيضاً)؛ بحيث تضمن أنه لن يأتيك من يقول لك: "لم أقرأ هذه الجزئية" بعد أن يكون قد أثار زوبعةً من المشاكل.
    و كذلك يجب الحرص علي إذكاء روح الحماس و المرح و التعاون بين أعضاء الفريق؛ فالملل يقتل الإنتاجية، و "النكد الأزلي" من جانب الإدارة سيجعل فريقك يتمني أن ينتهي موال العذاب سريعاً و بالتالي لا تسأل عن كفاءة الناتج، أما التنافس الغير صحي بين أفراد الفريق الواحد فيجعل من الصعب أن يسدي أحدهم النصح لآخر في المشاكل التي تقابله، و هذه من الكوارث في العمل الجماعي؛ لأنه من المعروف أن المناقشات الجانبية بين أفراد فريق العمل (مثل تلك التي يتبادلونها عند مكان إعداد القهوة) يمكنها أن تكون أكثر فائدةً من مئات الرسائل البريدية التقنية الباردة !

هذا غيضٌ من فيض، و في هندسة البرمجيات من القواعد و المناهج في إدارة فرق العمل البرمجية ما يفوق هذا كثيراً (بل و ربما تجد بعض الكتب تتحدث عن أشياء غريبة عليك الانتباه لها، مثل تصميم المكان الذي يعمل فيه فريق العمل ذاته و توزيع المداخل و المخارج، و نوعية الإضاءة !)،
و حتي علي صعيد الأدوات البرمجية الخاصة بالعمل الجماعي فهناك منها الكثير و الكثير، و لكل نوعٍ منهن ميزاته و عيوبه، و يجب عليك الاختيار الجيد لما يناسبك من بين هذه الأدوات و يكون جيداً للمشروع و فريق العمل و للمنهجية التي ارتضيتها للسير في المشروع.
بالتوفيق في عملكم.

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

إرسال تعليق