كيف تبرمج بطريقة البرمجة المزدوجة؟

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

الخطوات

1- اختارا مهمة معرفة بشكل جيد قبل أن تجلسا ، يجب أن تكونا قادرين على إنهاء هذه المهمة خلال ساعة أو ساعتين ، على سبيل المثال " إضافة تاريخ الصيانة إلى شفرة قاعدة بيانات الشاحنات " .
2- اتفقا على هدف صغير واحد في كل مرة : شيء يمكن إنجازه في دقائق قليلة ، إن صياغة المشكلة في عبارات مفهومة يساعدك على التركيز و يشجع الطرف الأخرى على المشاركة ، و هي تضمن أن كلاكما يعرف ماذا يفترض أن تفعلان الآن .
3- اعتمد على شريكك و قدم له المساعدة: -- إذا كنت أنت القائد، أي الذي يقوم بالطباعة على لوحة المفاتيح، فأكمل المهمة الصغيرة الحالية بأكبر سرعة ممكنة ، تجاهل المشاكل الأكبر ، وثق بالمراقب لأن يكون طوق النجاة بالنسبة لك في حال الخطأ.
-- إذا كنت المراقب ، فقم بقراءة ومتابعة الشيفرة أثناء كتابتها. عملك هو التدقيق فيما يكتبه القائد ، فيجب أن تبقى متنبها للأخطاء والثغرات البرمجية المتوقعة في كل قسم من الشيفرة، لا تدع شيئا يفوتك ، فكر في العلل الممكنة ، و في المشاكل الكبيرة ، و في كيفية تبسيط و تحسين التصميم ، نبه القائد على الأخطاء ، و الشفرات التي تجدها غير قابلة للقراءة ، وإذا وجدت فكرة لحل المشاكل الكبيرة أو لتحسين التصميم ، انتظر حتى تنتهي المهمة الصغيرة الحالية ثم اعرض أفكارك ، لا تشتت القائد أثناء أدائه للمهمة الحالية ، على سبيل المثال إذا رأيت أن الشفرة الحالية ستفشل عند إدخال معطيات فارغة null ، اكتب في ورقة " أضف وحدة اختبار للمدخلات الفارغة " .
-- إذا كنت المراقب، ابتعد عن الاهتمام الزائد بالشيفرة ، القائد يجب أن يفكر في كيفية تحقيق الهدف الحالي فهو ليس مجرد آلة طباعة ، و يجب عليك كمراقب أن تستغل حقيقة أنك مفرغ من التفاصيل كي تفكر بمستوى أعلى ، فقولك " هذا يبدو جيدا ، والآن ما رأيك أن تكتب شفرة لمعالجة حالة لما يكون المؤشر الممرر فارغا ؟ " أفضل من " حسنا ، الآن اكتب if (s == NULL) { return ... " .
4- تحدث كثيرا ، تحدث عن ماذا تفعلان الآن ، اطلب تنفيذ فكرة ، اطلب طريقة أحسن لحل المسألة الحالية ، اطرح أفكار بديلة ، أشر إلى مدخلات لا تغطيها الشفرة الحالية ، اقترح أسماء أوضح للمتغيرات و الدوال ، اقترح طرق لتنفيذ الشفرة في خطوات أصغر ، اخبر القائد عن الواجهات البرمجية المطلوبة .. إلخ. طبعا لا بد أن تكون مستمع أيضا ، فعندما يجتمع شخصين بشكل جيد فإنهما يتشاركان الحديث بدون توقف ، و هذه بعض الأشياء العامة لتقولها في البرمجة المزدوجة : - هل تعتقد أن هذا الاختبار صحيح ؟ - هل يبدو هذا صحيح لك ؟ - ما التالي ؟ - ثق بي ( عندما يكون كتابة شفرة صغيرة أسهل من الكلام ) .
5- ابقيا على تزامن قدر المستطاع ، عندما تعملا معا ، ستجد نفسك في بعض الأحيان غير متزامن مع شريكك: غير واثق ماذا يفعل شريكك أو تصبح المهمة الحالية غير واضحة بالنسبة لك ، هذا شيء عادي و عندما يحصل زامن نفسك من جديد مع شريكك ، إن سر نجاح البرمجة المزدوجة هو العودة للتزامن بشكل بشكل سريع (في غضون ثواني أو دقيقة من ملاحظة أنك غير متزامن مع شريكك ) ، إذا أمضيت خمسة دقائق أو أكثر بدون تزامن فربما تصبح تكتب الشفرة بشكل منفرد مما يجعلك تخسر فائدة البرمجة المزدوجة .
- قدر الإمكان قل ماذا تنوي أن تفعل قبل أن تشرع فيه ، و الأفضل أن تسأل شريكك ، على سبيل المثال " هل نكتب الآن اختبار المؤشرات الفارغة ؟ " ، في بعض الأحيان تحتاج أن تكتب شفرة كي تفهم أفكارك بشكل أفضل و هذا لا بأس به ، بعد ذلك قل لشريكك " أحتاج أن أكتب هذه كي أرى هل هذه فكرة جيد أم لا " بهذا يكون لدى شريكك فكرة واضحه عما تفعل ، لا تنسى من الأفضل أن تجعل مثل هذه الاكتشافات في أقل من دقيقة .
- عندما يسألك شريكك هل توافق على فكل شي مثل " هل نكتب الآن اختبار حالة المدخلات الفارغة ؟ " أنا أعتقد أنه يمكن حذف هذه الدالة الآن ، هل توافق على ذلك ؟ " ، أجب بنعم أو لا مباشرة بشكل واضح .
- لا بأس أن تمرر لوحة المفاتيح بين القائد و الملاحظ بشكل متكرر ، على سبيل المثال كتابة شيء أسهل بكثير من أن تحاول شرحه بالكلمات ، فلذا دع الملاحظ يأخذ لوحة المفاتيح و يكتب ما يريد ، ثم يرجعها لك أو حتى يصبح هو القائد و أنت الملاحظ على حسب الظروف .
6- خذا لحظة للاحتفال بعد أكمال المهام أو التغلب على المشاكل ، على سبيل المثال تبادلا التهاني كل مرة تنجح شفرتكما من اجتياز اختبار .
7- تبادلا الأدوار باستمرار ، على الأقل كل نصف ساعة ، هذا سيساعدكما على الإندماج و التركيز على مستوى التفاصيل أو الصورة الأكبر ، إن الاستمرار في دور واحد سينهكك و يقتل التركيز خصوصا إذا كان الدور هو المراقب .

تلميحات

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

تحذير

إذا كانت تجربة البرمجة المزدوجة بين شخصين أحدهما خبير و الآخر مبتدئ ، فلابد من الخبير أن يستعد جيدا لاتخاذ دور المرشد و الموجه لشريكه، وإلا لن يكون هناك تناغم بينهما خلال العمل.     =================== ترجمة للمقال:How to Pair Program بواسطة:
عبدالله محمد (Googlian) زايد السعيدي الترخيص : Creative Commons