السبت، نوفمبر 27، 2010

عرض كتاب نقد الجذور الفكرية للديمقراطية الغربية


بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...

كتاب "نقد الجذور الفكرية للديمقراطية الغربية", ألفه الأستاذ الدكتور محمد علي مفتي, و طبعته مجلة البيان سنة 1423 هـ / 2002م.
و قد استهل المؤلف بحثه بقول الله عز و جل "أفحكم الجاهلية يبغون و من أحسن من الله حكما لقوم يوقنون" [المائدة: 50] و ختمه بقوله "فلا ديمقراطية في الإسلام, و لا إسلام في الديمقراطية" و بين الاستهلال و الخاتمة كتب بحثا ماتعا في 118 صفحة, لخصه في خاتمة الكتاب, في آخر ثلاث صفحات, فقال (بتصرف يسير جدا):

قدمت الدراسة تحليلا نقديا للجذور الفكرية للديمقراطية الغربية؛ بهدف بيان أن الديمقراطية نظام سياسي قائم على مرتكزات, و مرتبط بشروط محددة لا بد من وجودها لتتحقق الديمقراطية. و قد ناقشت الدراسة أهم تلك القواعد أو المرتكزات و التي منها:
  • "سيادة الأمة"؛ أي حق الأمة المطلق في تبني نظام الحياة الذي تراه مناسبا من منطلق كونها تمثل المرجعية العليا في الدولة,
  • و "الحل الوسط" الذي يعد أسلوبا دائما لحل جميع المشكلات في الدولة. و يرتبط "الحل الوسط" بالعلمانية التي يقوم عليها النظام الديمقراطي. و ينطلق من افتراض أن مصالح المرء المتعلقة بالمباديء و القيم و المصالح المادية لا بد أن تسوى بـ "الحل الوسط" عند نشوء نزاع في الدولة بين الأفراد. و هذا يعني بالضرورة عدم فرض قيم اجتماعية أو عقيدية على المجتمع؛ لأن ذلك يؤدي إلى الاستناد إلى المرجعية العقيدية أو الأخلاقية في حل المشكلات الاجتماعية, و هو ما يتعارض مع ديمقراطيات الحل الوسط.
  • أما "الحرية": التي تمثل جوهر الديمقراطية فتقوم على النظرة الفردية للإنسان, و على جعله المرجعية العليا في الدولة.و تتحق حرية المرء في النظام الديمقراطي عن طريق إقرار "حرية العقيدة"؛ أي حيادية الدولة تجاه العقيدة, و هي تعني حق الأفراد في تبني ما يشاؤون من عقائد دون تدخل من أحد. و "حرية الرأي" التي تعني - كذلك- حق الأفراد في تبني ما يرغبون من أفكار و مفهومات و معالجات. و قد انبثق عن حرية الرأي "التعددية السياسية"؛ لتعبر عن حق الجماعات المختلفة عقديديا و فكريا في العيش المشترك, و في التنافس السياسي للوصول للسلطة انطلاقا من قاعدة تادول السلطة بين الجماعات المختلفة التي تقوم عليها التعددية السياسية.
و قد بينت الدراسة أن الديمقراطية نظام قائم على "فصل الدين على عن الدنيا". و تؤكد قواعد الديمقراطية - المشار إليها أعلاه - علمانية النظام, فجعل الفرد المرجعية العليا في النظام مرتبط بإنكار هيمنة الدين على شؤون الحياة, و بناء الدولة على الحرية و الحل الوسط يدل على أن الدولة الديمقراطية تختلف عن غيرها بحياديتها العقيدية و بفسحها المجال لحرية الرأي لكل أفراد المجتمع.
فالحرية في تبني الآراء و الدعوة إليها - أيا كان مصدرها و نوعها - مكفولة للجميع في ظل النظام الديمقراطي. كما يعبر الحل الوسط بصدق عن علمانية النظام الديمقراطي؛ و ذلك بإخضاع كل شؤون الدولة للمساومة؛ حيث تخضع جميع القرارات - العقيدية منها و الأخلاقية و المصلحية - للحل الوسط الذي يعد ركيزة رئيسة من ركائز الديمقراطية الغربية العلمانية.
و نظرا لما للفكر الديمقراطي من أثر على الساحة السياسية و على الكتاب و المفكرين المسلمين؛ فقد قدمت الدراسة تحليلا لمواقف عديد من الإسلاميين و الحركات الإسلامية من الديمقراطية. و قد تبين أن [الكثير من] (في الأصل: معظم) الكتاب و المفكرين الإسلاميين المعاصرين ينادون بتبني الديمقراطية؛ إما بالقول بأن تبني الديمقراطية يعد ارتكابا لأخف الضررين, فالديقراطية العلمانية "أقل شرا" من العلمانية الاستبدادية, كما يقولون. أو بالقول بأن الديمقراطية لا تعارض الشريعة الإسلامية, أو بإلباسها ثوبا شرعيا و جعلها جزءا من تعاليم الشرع الإسلامي. و قد أدت المناداة بتبني الديمقراطية إلى إقرار القواعد السياسية التي تقوم عليها كالتعددية السياسية, و التعددية الحزبية, و المشاركة في السلطة, و تداول السلطة عن طريق الانتخابات الدورية.
و بناء على ما سبق؛ نادى الإسلاميون الديمقراطيون بضرورة التعددية السياسية المتمثلة في إفساح المجال لكل التيارات السياسية في لعب دور في الساحة السياسية انطلاقا من حق الجماعات المتبياينة عقيديا في الوجود و في التعايش مع غيرها, و حقها في التنافس من أجل الوصول إلى السلطة. و قد أدى هذا الموقف من التعددية إلى المناداة يالتعددية الحزبية؛ أي إقرار وجود أحزاب سياسية شيوعية و علمانية و غيرها في المجتمع, و السماح لها بالمشاركة في الانتخابات, و في طرح برامجها للتصويت عليها من منطلق حقها في الوجود في مجتمع تعددي.
و قد بينت الدراسة خطأ جعل الديمقراطية أساسا للعمل من أجل استئناف الحياة السياسية الشرعية. فالدولة الإسلامية دولة شرعية يقوم نظامها على تطبيق أحكام الإسلام في واقع الحياة من منطلق سيادة الشرع, و ليس على التعددية أو الحرية السياسية. و في نظام الإسلام السياسي لا يجوز إقرار التعددية الحزبية أو السياسية بالمفهوم الغربي لتعارض ذلك مع قواعد الإسلام السياسية, و الدولة الإسلامية لا تقوم بالرجوع إلى الديمقراطية العلمانية بل بالرجوع إلى أحكام الإسلام و معالجته السياسية المتعلقة بنظام الحكم الشرعي, و غياب نظام الإسلام السياسي لا يجوز أن يؤدي إلى تبني النظام الديمقراطي العلماني مهما سيقت له من حجج و قدمت له من مقدمات؛ ذلك لأن الديمقراطية, و العلمانية, و الاستبداد السياسي, و الدكتاتورية و أنظمة الطغيان كلها "طاغوت" لا يقره الشرع الإسلامي, و لا يدعو إليه بحال من الأحوال.
و قيام بعض الإسلاميين بالدعوة إلى الديمقراطية و تسويغ تبنيها يتقريبها من الإسلام لا يدل بحال على أن الإسلام يجيز تبني الديمقراطية؛ "فلا ديمقراطية في الإسلام, و لا إسلام في الديمقراطية". ا.هـ.

الجمعة، نوفمبر 26، 2010

حكم المشاركة في الانتخابات

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

الأحد، نوفمبر 07، 2010

أنت لست مستخدم البرنامج

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
لازلنا مع كتاب "97 مسألة ينبغي أن يعرفها كل مبرمج"....

3- أنت لست مستخدم البرنامج
لا تحسبن - أيها المبرمج - أن مستخدم برنامجك يفكر مثلك, أو أنه سيستخدم برنامجك بنفس طريقتك. فإن فعلت فلا تلومن غير نفسك إن كانت برامجك صعبة الاستخدام.
و أفضل طريقة لمعرفة سلوك المستخدم هي مراقبته! أي مراقبته و هو يؤدي نفس الوظيفة في برنامج مشابه مثلا, فإن كان سيتخدم برنامجك فانتبه لمواضع تعثره, و لا تساعده لتتمكن من معرفة سلوكه. و بمراقبة عدة مستخدمين سيتبين لك أوجه تشابه السلوك في استخدام البرنامج, و هذا التشابه هو الذي ستبني سهولة استخدام برنامجك عليه.
و إليك بعض الفوائد التي تساعدك في جعل برامجك سهلة الاستخدام:
  • إذا تعثر مستخدم برنامجٍ, فكن على ثقة أن ملفات المساعدة هي أسوأ شيء يمكن أن يلجأ له المستخدم, بل دائما سيتركز تفكيره في الخروج من عثرته بالبحث داخل الشاشة التي هو فيها. فإن كنت و لا بد ستحتاج لنصوص توضيحية, فاجعلها قريبة من موضح المشكلة؛ و لذلك فالتلميحات tooltips التي تضعها على أجزاء البرنامج مناسبة جدا في هذه الحالة.
  • أن تجعل طريقة واحدة, واضحة, سهلة, لعمل وظيفة واحدة في البرنامج, خير من أن تجعل عدة طرق مختصرة shortcuts لعمل نفس الوظيفة فتشتت المستخدم.
  • إذا سألت المستخدم عم يريد, سيخبرك عن أشياء, فإذا راقبته ستجده يفعل أشياء مختلفة, و لذلك فاجلس مع المستخدم ساعة تراقب سلوكه خير من أن تجلس يوما تخمن ماذا يريد!
يمكن قراءة النص الأصلي من هنا.
و للحديث صلة إن شاء الله تعالى...

الخميس، نوفمبر 04، 2010

ترجمة كتاب 97 مسألة ينبغي أن يعرفها كل مبرمج 97 things every programmer should know--2

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
2- استفد من مباديء البرمجة الوظيفية
بالرغم من زيادة الاهتمام بالبرمجة الوظيفية functional programming في الآونة الأخيرة, إلا أن هذه المقالة ليس غرضها حثك على تعلم إحدى اللغات الوظيفية, بقدر حثك على الاستفادة من مبادئها, و أهم هذه المباديء ما يسمى بالشفافية المرجعية Referential transparency. و التي تعني أن البرنامج متى استُدعي من أي مكان سيعطي نفس النتيجة طالما أخذ نفس المدخلات و, قد تحدثنا عنها في المقالة السابقة, فلتُراجع لزاما.
من أهم مشاكل البرامج, تلك الأخطاء الناتجة عن تغيير قيم المتغيرات variables من أكثر من مكان في البرنامج, و هناك دائما قواعد في لغات البرمجة تحدد أي جزء في البرنامج يمكنه الوصول إلى أي معلومة (Visibility semantics), لكن هذه مرتبطة بمدى حِذق (مهارة) المبرمج في استخدامها.
يمكن تجنب هذه المشاكل إذا استطعنا تحقيق "الشفافية المرجعية" في برامجنا, عن طريق الإكثار من تقسيم البرامج إلي أجزاء أصغر numerous smaller functions, كل منها له مسئولية محدودة, و يتعامل مع البيانات التي تمرر له فقط passed arguments من غير التعامل مع بيانات مشاعة بين كل أجزاء البرنامج. هذا الأسلوب سيقلل المشاكل و سيسهل اكتشاف الأخطاء أيضا. و لن تتمكن من تطبيق هذه المباديء باحتراف ما لم تتعلم إحدى لغات البرمجة الوظيفية, حيث هذا الأسلوب في البرمجة هو الأسلوب الافتراضي.
عند برمجة واجهات الاستخدام User Interfaces لن يكون هذا الأسلوب مجديا, بل الأجدى أن تستخدمه عند برمجة "لب البرنامج", أي طبق هذا الأسلوب عند برمجة الوظيفة الفعلية للبرنامج و ليس واجهة استخدامه.
و هذا هو النص الأصلي للمقالة.

السبت، أكتوبر 30، 2010

الشفافية المرجعية في البرمجة الوظيفية Referential transparency in functional programming

بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
من أهم مميزات البرمجة الوظيفية functional programming ما يسمى بالشفافية المرجعية Referential transparency.
لفهم الشفافية المرجعية فينبغي علينا أن نستوعب مفهوما آخر يسمي التأثير أو التأثر الجانبي side effect للبرنامج, و أي برنامج يتفاعل مع العالم الخارجي, كأن يستقبل بيانات من المستخدم, أو يكتب بيانات في ملف, أو يغير في بعض البيانات التي هي مشاع بين أجزاء البرنامج الأخرى (و التي بدورها تمثل حالة state البرنامج الكلي) ...إلخ, فيعتبر له تأثير أو تأثر جانبي.
يمكن اعتبار البرنامج أو العبارة البرمجية expression ذو شفافية مرجعية إذا أمكن استبداله يقيمته من غير أن تتغير النتيجة النهائية, أو بعبارة أخرى إذا أعطَى نفس المخرجات عندما تُعطى له نفس المدخلات. مثال: العملية الرياضية (5 * 5) يمكن استبدالها بـ (25) من غير "تأثير جانبي" على البرنامج, فهي ذات شفافية مرجعية, أما إذا كان لدينا برنامج جزئي function - و ليكن اسمه GetInput(), يأخذ بيانات من المستخدم ليعرض النتيجة بناء على ما أدخله المستخدم, فهذا البرنامج ليس له شفافية مرجعية لأنه عند إعطائه نفس المدخلات (في حالتنا هذه لا شيء) نحصل على نتائج مختلفة تتبع ما أدخله المستخدم؛ فالبرنامج في هذه الحالة له "تأثر جانبي".
لم أفهم بالضبط سبب تسمية هذا المفهوم بالشفافية المرجعية, لكن أخمن أن السبب هو أن البرنامج متى استُدعي من أي مكان سيعطي نفس النتيجة طالما أخذ نفس المدخلات, فالمرجع هنا (البرنامج) فيه شفافية, و لا يتأثر يمن استدعاه... ليتنا نطبق هذا المفهوم في حياتنا السياسية :)
و السلام...

الخميس، أكتوبر 28، 2010

ترجمة كتاب 97 مسألة ينبغي أن يعرفها كل مبرمج 97 things every programmer should know--1


* مقدمة
بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...

فكتاب 97 مسألة ينبغي أن يعرفها كل مبرمج فيه فوائد متفرقة, على طريقة صيد الخاطر, كتبها مبرمجون كثر. و من مراجعات الكتاب على موقع أمازون بدى لي أن الكتاب جيد , و يفيد أكثر المبرمجين المبتدئين.
و الجميل في الكتاب أنه يمكن قراءته كاملا من على موقعه, و الأجمل أن هناك مسائل أخرى - على نفس الموقع أيضا - فيها زيادة فائدة, و ليست مطبوعة في الكتاب.
فأحببت أن أترجم الكتاب (و إن شئت فاعتبره تلخيصا أيضا) لكن بالطبع أتصرف في الترجمة و لا أتقيد فيها بالحَرْفية ...و لا حول و لا قوة إلا بالله.
و الآن, مع المسألة الأولى...

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

الأربعاء، أكتوبر 27، 2010

البرمجة الثنائية Pair Programming

* مقدمة
بسم الله و الحمد لله و الصلاة و السلام على رسول الله و بعد...
فالبرمجة الثنائية Pair Programming هي أن يجلس اثنان من المبرمجين على حاسب واحد ليكتبا برنامجا واحدا: أما أحدهما - و هو القائد driver - فيكتب البرنامج و أما الأخر - و هو المراجع أو المراقب observer - فيدقق فيما يُكتب و يتابع سير العمل. و يتبادل المبرمجان القيادة و المراجعة فيما بينهما من حين لآخر.
و البرمجة الثنائية هي إحدي الطرق المستخدمة في تطوير البرمجيات السريعة أو المرنة Agile Software Development و أحد أهم تطبيقات البرمجة القصوى Extreme programming في هندسة البرمجيات.

* إحصاءات [1]
  • أظهرت دراسة سنة 1998 أن البرمجة الثنائية تقلل وقت البرمجة بنسبة 40% بينما تزيد مجهود المبرمجين بنسبة 60%.
  • دراسة أخرى سنة 2000 أن البرمجة الثنائية تؤدي إلى تحسن في دقة البرنامج correctness و خلوه من الأخطاء و الثغرات البرمجية bugs بنسبة 15%, و كذلك أظهرت أن وقت البرمجة يقل بنسبة 20% إلى 40%, لكن في نفس الوقت تؤدي البرمجة الثنائية إلى زيادة في المجهود المبذول بنسبة 15% إلى 60%!
  • أظهرت دراسة ثالثة سنة 2006 أن البرمجة الثائية نسبة إلى البرمجة الفردية تؤدي إلى تحسن ملحوظ في الإنتاجية إذا كان كلا المبرمجين مبتدئين. أما إذا كان كلا المبرمجين محترفين فإن هناك تحسن و لكن ليس بذات النسبة العالية.
  • أظهرت دراسة رابعة سنة 2007 أن البرامج المعقدة تتحسن جودتها بنسبة 48% بتطبيق البرمجة الثنائية, و لكن لا يتأثر وقت الإنتاج. بينما البرامج البسيطة يقل وقت إنتاجها بنسبة 20% عند تطبيق البرمجة الثنائية و لكن لا يحدث تحسن ملحوظ في دقة البرنامج correctness.
  • أظهرت دراسة خامسة سنة 2008 أن البرمجة الثنائية تظهر فائدتها القصوى عند تصميم البرامج (يعني التصميم الهندسي و ليس التصميم الفني)
  • و في سنة 2007 أظهرت بعض التجارب أنه حتى بتطبيق أسلوب البرمجة الثنائية لا يمكن تنفيذ برامج دقيقة و رخيصة بسرعة؛ فالبرامج المعقدة تتطلب دائما مجهودا أكثر, و تنفيذ برامج بسيطة بسرعة دائما يؤثر على دقة و جودة هذه البرامج. و خلاصة هذه التجارب أن البرمجة الثنائية ليست دائمة هي الحل الأفضل لكل مشكلات البرمجة.

* المميزات
  • البرامج الناتجة عند تطبيق أسلوب البرمجة الثنائية تُنفذ أسرع. و تكون أقصر, و أبسط, و أجود من ناحية التصميم الهندسي, و أكثر تنظيما مما يسهل تعديلها أو إصلاحها لاحقا, و تحتوي على أخطاء أو ثغرات برمجية bugs أقل, من نظيراتها الناتجة عن البرمجة الفردية.
  • تتيح البرمجة الثنائية نقل الخبرات (سواء خبرات البرمجة العامة أو الخاصة بالبرنامج نفسه) بين المبرمجين.
  • يمكن تطبيق البرمجة الثنائية بصورة خفيفة, حيث يمر كل مبرمج في فريق العمل على كل زملائه واحدا تلو الآخر ليعملا سويا بالطريقة الثنائية؛ و هذه الطريقة تفيد في نقل معلومات و خبرات الفريق بين بعضهم بعضا, و تقلل من تأثير ترك أحد المبرمجين للفريق.
  • البرمجة الثنائية تساعد كلا المبرمجَين في التركيز و عدم تضييع وقت العمل. كما أن الناس عادة لا تقاطع من يظنون أنهم مجتمعون للعمل (كما في حالتنا حيث يجتمع اثنان من المبرمجين للعمل سويا) إلا للضرورة.

* العيوب
  • بالرغم من أن البرمجة الثنائية تقلل من وقت تنفيذ البرنامج, إلا أنه بجمع وقتي المبرمجَين تكون محصلة الوقت المستغرق أعلى مما لو نفذ البرنامج مبرمج واحد. و هذا بالطبع بعني أن المجهود المبذول أكثر.

* متى تستخدمها؟
  • عندما يكون البرنامج معقدا أو غير واضح المعالم أو يستلزم الكثير من الإبداع, فيتوقع تحسن في النتائج عند تطبيق البرمجة الثنائية.
  • عند إدخال مبرمج جديد في الفريق, تكون هذه الطريقة مفيدة جدا في تسريع توافق فهم العضو الجديد للبرنامج و لطريقة عمل و تنظيم الفريق.

* متى تتجنبها؟
  • عندما يكون البرنامج بسيطا و واضح المعالم لكلا المبرمجين, فإن تطبيق البرمجة الثنائية يؤدي إلى انخفاض في إنتاجية المبرمجين.
* نصائح
  • قبل البدء, لا بد من تحديد هدف واضح يمكن إنهاؤه خلال ساعة أو ساعتين. و يفضل كتابته و كتابة الخطوط العريضة لتحقيقه.
  • إذا كنت القائد (الذي يكتب على لوحة المفاتيح) فركز فيما تكتبه, و لا تشتت ذهنك, و اعتمد على زميلك المراجع في تدقيق ما تكتب. و لا تأخذ تعليقاته بمحمل شخصي, فالأخطاء و تصويبها طبيعة في البرمجة و لا تدل على نقص قدرات المبرمج.
  • إذا كنت المراجع, فانتبه جيدا لما يكتبه زميلك, و حاول اكتشاف الأخطاء أو التغرات البرمجية bugs, و فكر في كيفية تبسيط و تحسين البرنامج. و لا تقاطع زميلك القائد كلما عنّ لك شيء - حتى لا تفقده تركيزه, بل دونه في ورقة, فإذا ما انتهي زميلك مما يكتب (على الأقل السطر الذي هو فيه), فأخبره عما عنّ لك. و ترفق بزميلك و لا تتهكم عليه إن بدا لك خطأ فيما يكتب. و تذكر أخيرا أن دور زميلك القائد ليس كتابة ما تمليه عليه حرفيا, فأخبره عما تريد و لا تشغل بالك بتفاصيل تحقيقه, فزميلك القائد مبرمج أيضا!
  • تناقشا كثيرا حول الأفكار و البدائل و الثغرات المحتملة و كل ما من شأنه تحسين و تبسيط البرنامج. و يتبع حسنَ الكلام حسنُ الاستماع؛ فلا تنشغل عن زميلك - بالأكل مثلا - و هو يتحدث, بل أنصت جيدا لما يقول.
  • إذا تاه أحدكما من الآخر فلم يعد يدري ما يحدث, فتوقفا ثم تأكدا أنكما تقفان على أرض واحدة (يعني عدتما لفهم بعضكما ثانية) ثم استكملا.
  • في بعض الأحيان يكون من الأسهل أن يكتب المراجع جزءا في البرنامج بنفسه بدلا من أن يشرح وجهة نظره لزميله القائد ثم يقوم القائد بالكتابة, و لا بأس بذلك, بل يفضل أن يتبادل الزميلان الأدوار(القيادة و المراجعة) كل نصف ساعة أو ساعة مثلا؛ و بذلك لا يُرهق المراجع من كثرة التركيز, و لا يمل القائد من كثرة الكتابة.
  • المبرمج الأقل علما بالبرنامج أو بلغة البرمجة (أو الأقل خبرة على العموم) يكون قائدا(يكتب على لوحة المفاتيح) أكثر من كونه مراجعا, فالمرء يتعلم من أصابعه أكثر مما يتعلم من عينيه!

* مصادر استفدت منها في كتابة هذه المقالة (مرتبة حسب الأهمية)
---------------------------------------
[1] ملحوظة: النسب المقاسة بين وقت و مجهود مبرمج واحد أو اثنين لتنفيذ نفس البرنامج. و التغير في النسب تابع لتعقيد البرامج و خبرة المبرمجين.