السلام عليكم :)
آمل أن الجميع بخير .. لدي سؤال وهو كيف يقوم فريق من المطورين بالعمل على مشروع معين بشكل مرتب ومنظم؟ هل هناك أي طرق مفضلة يجب إتباعها؟ على سبيل المثال المشروع عبارة عن منتدى سيتم تطويره بـ استخدام PHP وربطه مع قاعدة بيانات MySql.
آمل أن يحدثنا أحد الخبراء ليستفيد الجميع، حتى نبدأ بعمل مشروع مع فريقنا الخاص بشكل منظم ومرتب. لو هناك نصائح لا تبخل علينا بها :)
تحياتي،،
التعليقات
و علبكم السلام و رحمة الله و بركاته،
سؤالك يجب تأليف كتاب ضخم للإجابة عنه باستفاضة :)
و لكن القليل الذي أعلمه كما يلي:
أنصح بأن يقوم صاحب الفكرة أو المشروع بعمل بيان يوضح فيه الفكرة العامة للمشروع؛ بحيث يوزعه علي طاقم الفريق قبل البدء في العمل بفترة كافية، ليقرؤوه بتمعن و يجهزوا أسئلتهم عما استغلق عليهم فهمه في البيان، و كذلك يجهزوا قائمةً بالانطباعات التي تكونت لديهم عن الفكرة، من حيث مساوئها و ميزاتها و فرص تطويرها في القريب العاجل (و ربما في المستقبل البعيد)،
عقد جلسة "عصف ذهني" للاستماع لرؤي فريق العمل و ملاحظاتهم حول الفكرة المبدئية، و بناءً علي نتائج جلسة العصف الذهني هذه يتم عمل وثيقة نهائية بـ: أهداف المشروع، التصميم الذي تم الاستقرار عليه، الأدوات التي سيتم استخدامها في العمل، الخطة الزمنية للمشروع، أسلوب التكويد ... إلخ،
الأدوات البرمجية التي يمكن استخدامها في العمل (حسب معرفتي القليلة بأدوات العمل الجماعي):
- git لإدارة الموارد المُشتركة،
- بيئة برمجة متكاملة IDE قوية، مع استخدام git من خلالها لأن ذلك يجعل الأمور أسهل و أبسط من استخدام سطر الأوامر (حسبما أظن)،
- قائمة بريدية مغلقة للنقاش حول التفاصيل التقنية للمشروع،
أثناء العمل يجب الحرص علي توثيق أهم جوانب المشروع بدقة، لا أقول أنه يجب توثيق "كل" شيء، بل أقول أنه من اللازم الاحتفاظ بوسيلة تجعل من السهل انضمام آخرين إلي فريق العمل فيما بعد، أو حتي تغيير فريق العمل بالكامل، و لا يكون هذا إلا بتوثيق جوانب المشروع المهمة بعناية و وضوح، مع التحديث المستمر لتلك التوثيقات عند تغير أحد الجوانب التي تتحدث عنها بما يفقدها مصداقيتها.
عامةً يجب البعد عن توثيق الخوارزمات algorithms التي تتغير باستمرار ، أو الخوارزمات قليلة الأهمية أو التعقيد، و التي يمكن بمجرد قراءة الأكواد الإحاطة بها بسرعة و سلاسة (التعليقات التي في الأكواد تكفي للتوثيق الجيد لهذا النوع). و إنما يجب التركيز علي شرح تقسيم المشروع من ملفات و مجلدات، و شرح الأقسام الوظيفية في الأكواد (أعني: ما الوظيفة التي تقوم بها كل مجموعة من الأصناف classes و/أو الدوال functions).
و في نهاية التوثيق ربما يكون من الأفضل أن تضع روابط لمقالات و/أو مواقع كاملة يمكن من خلالها الاستزادة عن أحد الأمور التي تهم المشروع، مثل كيفية التعامل مغ git، و شرح بعض الأمور البرمجية التي ربما يحتاج للرجوع إليها فريق العمل باستمرار ... إلخ.
بالنسبة لمنهجية العمل البرمجي الجماعي للفريق فأنصح بأن تكون من نوعية "البرمجة الرشيقة agile development"، و لن أشرح ما هيية البرمجة الرشيقة هنا لأنها تستحق بدورها كتباً و مراجع للتمكن منها، و لم أقم حتي الآن بقراءة ما يكفي للحديث عنها باستفاضة (لكني لا زلتُ أنصح بها :P )،
يجب الاهتمام كثيراً بوضع قواعد لتعامل أعضاء فريق العمل مع بعضهم البعض؛ حتي لا تؤدي بعض الأمور الصبيانية لتعطيل المسيرة كلها !، و أن تكون هذه القواعد موجودة في نفس الكتيب الخاص بالتفاصيل التقنية للمشروع (ربما في بداية الكتيب أيضاً)؛ بحيث تضمن أنه لن يأتيك من يقول لك: "لم أقرأ هذه الجزئية" بعد أن يكون قد أثار زوبعةً من المشاكل.
و كذلك يجب الحرص علي إذكاء روح الحماس و المرح و التعاون بين أعضاء الفريق؛ فالملل يقتل الإنتاجية، و "النكد الأزلي" من جانب الإدارة سيجعل فريقك يتمني أن ينتهي موال العذاب سريعاً و بالتالي لا تسأل عن كفاءة الناتج، أما التنافس الغير صحي بين أفراد الفريق الواحد فيجعل من الصعب أن يسدي أحدهم النصح لآخر في المشاكل التي تقابله، و هذه من الكوارث في العمل الجماعي؛ لأنه من المعروف أن المناقشات الجانبية بين أفراد فريق العمل (مثل تلك التي يتبادلونها عند مكان إعداد القهوة) يمكنها أن تكون أكثر فائدةً من مئات الرسائل البريدية التقنية الباردة !
هذا غيضٌ من فيض، و في هندسة البرمجيات من القواعد و المناهج في إدارة فرق العمل البرمجية ما يفوق هذا كثيراً (بل و ربما تجد بعض الكتب تتحدث عن أشياء غريبة عليك الانتباه لها، مثل تصميم المكان الذي يعمل فيه فريق العمل ذاته و توزيع المداخل و المخارج، و نوعية الإضاءة !)،
و حتي علي صعيد الأدوات البرمجية الخاصة بالعمل الجماعي فهناك منها الكثير و الكثير، و لكل نوعٍ منهن ميزاته و عيوبه، و يجب عليك الاختيار الجيد لما يناسبك من بين هذه الأدوات و يكون جيداً للمشروع و فريق العمل و للمنهجية التي ارتضيتها للسير في المشروع.
بالتوفيق في عملكم.
بالنسبة لي أفضل استخدام git لإدارة الكود ، واستخدم MantisBT لوضع ال road map لكل iteration و كذلك لمتابعة وحل المشاكل البرمجية.
ستحتاج الى استخدام تطبيق للمحادثة داخل الشبكة لكي يستطيع المطورين الحصول على الاجابات بسرعة ، وأيضا تحتاج الى استخدام منتدى داخلي لتبادل النقاشات حول المشروع (لماذا استخدام X أفضل من Y في المشروع، كيف نحل مشكلة Z،... الخ). وهذه أحد استخدامات المنتديات لمن يسأل :)
سؤال مهم جدا
عند قرآتي لسؤالك خطر على بالي فورا لغة UML وتوقعت أن أقرأ ردود عنها في الأسفل ، ولكن يبدوا أنني محظوظ لأني أول سيذكرها هنا ^_^
ببساطة UML سيجيب عن كل أسئلتكم وسيجعل مشروعكم منظم وبسيط وسهل وممتع ودقيق
الـ UML هو اختصار لجملة Unified Modeling Language هناك من يترجمها لـ(لغة النمذجة الموحدة) لكني غير مقتنع بهذه الترجمة الحرفية حتى الآن
على كل حال و المهم في الموضوع هو أن هذه اللغة تهدف إلى ترميز العمليات البرمجية لدى فريق العمل (ليس فقط المبرمجين) .. بعبارة أخرى هي لغة تسهل التخاطب بين أفراد فريق العمل -المتنوع- عن طريق ترميز بسيط و موحد
تعريف آخر أكثر بساطة : هي لغة مشتركة بين أفراد فريق العمل وتكون هذه اللغة عبارة عن رسومات بسيطة و موحدة يتفق عليها فريق العمل .
هذا الكتاب يتحدث عن الـ UML بالعربي
الخلاصة : Git + UML سيجعل عملكم إحترافي
أعتقد ان استخدام تقنيات PMI مهمة وضرورية لعمل مشروع مشترك جيد حيث يقسم المشروع الى أقسام وكل قسم له مستندات محددة, لست ملزما باستخدام المستندات أو المراحل كاملة ولكن انتق منها مايناسبك.
وأيضا مهم أن توازن بين الوقت اللازم بين العمل الفعلي في الكودينق والتصميم وبين العمل على التخطيط وادارة المشروع.
أذكر في بداية تعلمي لادارة المشاريع تحمست كثيرا على مشاريع صغيره واستهلكت أغلب الوقت في ادارة المشروع والتخطيط والمستندات وبعد فترة وجدت فعليا أنني لم أبدأ في العمل الأساسي للمشروع.
توجد أدوات كثيره لادارة المشاريع وبعضها بنظام الكلاود(جميع الملفات أونلاين) وهي مفيدة جدا للعمل الجماعي , ,,هذه قائمة بأفضلها:
خالص تحياتي
بالنسبة للكود الحل git
المشكلة الاخرى تتعلق بقواعد البيانات واعتقد والله اعلم الحل لقواعد البيانات ان تقوم بسأجر سيرفر او مساحة لهذه المهمة ومن خلال الكود يتم الاتصال بقواعد البيانات .. لكن هناك مشكلة التحديثات التي تتم على قواعد البيانات لن تستطيع معرفة الوقت او العضو الذي قام بهذا التحديث وهذه مشكلة . اتمنى من الاعضاء افداتنا على هذه النقطه شاكراً لهم ..