electrical-engineering-principles
كيفية استخدام الفطيرة برمجة تعزيز المبادئ الصلبة التبني
Table of Contents
فالبرمجة العادلة، وهي ممارسة متأصلة في البرمجة القصوى، تضع مطورين في محطة واحدة لصناعة السيارات، كرمز لكتابة السائقين، والآخر كما يقوم الملاح باستعراض كل خط في الوقت الحقيقي، وهذه الكثافة التعاونية تزيد عن البقايا الملتقطة في وقت مبكر؛ وتخلق بيئة تعليمية مستمرة منخفضة الضغط، وعندما يهدف الفريق إلى اعتماد مبادئ تصميم نظام SOLID ودمجها الداخلي، تصبح البرمجة المزدوجة واحدة من أكثر الاستراتيجيات فعالية المتاحة.
وتُستخدم مبادئ SOLID، التي أوضحها لأول مرة روبرت س. مارتن (عمة بوب)، كأساس لبناء نظم ذات وجهة موضوعية يسهل الحفاظ عليها وتوسيعها واختبارها، وتُضاعف البرمجة العادلة من أثرها لأنها تُجبر كلا المطورين على صياغة قراراتهم المتعلقة بالتصميم، وافتراضات الأسئلة، والشاهدين مباشرة كيف يحول كل مبدأ دون الدين التقني، وتستكشف هذه المادة كيفية استخدام البرمجة الثنائية كأداة لتعزيز تقنيات الاعتماد القائمة على أساس سليم.
Understanding the SOLID Principles
وقبل مناقشة الكيفية التي يمكن بها للبرمجة أن تعزز برنامج تنمية المرأة، يجدر استعراض كل مبدأ في السياق، وسيستفيد أعضاء الفريق الذين يتزوجون معا من مفرد مشترك وفهم واضح لما يهدف إليه كل مبدأ من المبادئ في حله.
مبدأ المسؤولية الوحيدة
وينبغي أن يكون للفئة سبب واحد للتغيير، وهذا يعني أنها ينبغي أن تلخص مسؤولية واحدة وأن تفعل ذلك على نحو جيد، وعندما يربط المطورون، يمكنهم أن يكتشفوا بسرعة فصولاً تقوم على سبيل المثال، بـ " مشرف " يصادق على المستعملين ويرسل رسائل إلكترونية نرحب بها، ويمكن للملاح أن يسأل " ماذا يحدث إذا غيرنا شكل البريد الإلكتروني؟ وهل سيعيد هذا الكسر منطق التوثيق؟ "
المبدأ المفتوح/المغلق
وينبغي أن تكون كيانات البرمجيات مفتوحة للتمديد ولكنها مغلقة للتعديل، وهذا يشجع عمليا على تصميم نظم تُضاف فيها سلوكيات جديدة من خلال فصول أو وظائف جديدة بدلا من تغيير الرمز القائم والمختبر، وقد يحاول السائق، خلال دورة برمجة ثنائية، تعديل وحدة أساسية لإضافة سمة، ويمكن للملاح أن يقترح استراتيجية مثل استخدام التعددية، أو حقنة التبعية، أو نمط النموذج الأولي لتحقيق التمديد دون تعديل.
Liskov Substitution Principle (LSP)
وينبغي الاستعاضة عن أهداف الدرجة العليا بأجسام من الدرجة الفرعية دون المساس بالصحة، وكثيرا ما تظهر انتهاكات نظام الأفضليات المعمم على أنها علاقات " سابقة " لا تتصرف على النحو المتوقع - على سبيل المثال، وهي ساحة لا تلعب بقواعد التراجع، ويساعد الفرز على فهم هذه المسائل لأن الملاح يمكن أن يشكك فيها، " إذا قمنا بمسح طبقة الأساس لهذه الدرجة المشتقة، فهل ستستمر عملية الاختبار في الإرث " .
مبدأ الفصل بين الأوجه
ولا ينبغي إجبار أي زبون على الاعتماد على الأساليب التي لا يستخدمها، ويشجع نظام المعلومات الإدارية المتكامل على تقسيم الوصلات البينية السمينة إلى أنواع أصغر حجماً، خاصة بدور محدد، وقد يلاحظ الملاح في دورة مقترنة أن السائق ينفذ واجهة كبيرة تجبر طبقة على توفير أساليب فارغة، ويمكنه بعد ذلك مناقشة تقسيم الوصل إلى عقود مركزة، مما يؤدي إلى وضع مدونة أكثر تماسكاً وقابلية للاختبار.
مبدأ الإعالة
وينبغي ألا تعتمد الوحدات الرفيعة المستوى على وحدات متدنية المستوى؛ وينبغي أن تعتمد الخلاصات على حد سواء، فالبرمجة العادلة هي المثالية لإظهار برنامج التنمية البشرية لأن الملاح يمكنه أن يتحدى فوراً من المعالينات الملموسة، وقد يقترحون إدخال وصلة بينية وحقنها عن طريق البناء أو حاوية من أجهزة الاستنشاق، ويمكن للزوجين أن يعيدا صياغة المدونة معاً، ويعززان المبدأ من خلال الممارسة العملية.
برمجة الهواء كعامل لتبني الأطفال
فالبرمجة العادلة تخلق بطبيعة الحال حلقة تغذية مرتدة تعمل لصالح اعتماد مبادرة " سولتيد " ، لأن كلا المطورين يشاركون بنشاط في اتخاذ كل قرار يجري تدقيقه في الوقت الراهن، ويمكن للملاح أن يسرع في ذلك، أو " هل ينتهك هذا الفصل المسؤولية القانونية؟ " أو " كيف يمكننا تطبيق برنامج العمل الدولي هنا؟ " ، ويكسب السائق بدوره نظرة فورية إلى كيفية اختلاف تفكيرهم عن النموذج التصميمي المرغوب.
وعلاوة على ذلك، فإن البرمجة المزدوجة تقلل من الخوف من إعادة التصنيع، إذ أن محاولة تطبيق مبادئ SOLID على قاعدة مشفرة قائمة يمكن أن تشعر بأن تغييراً خطيراً قد يكسر شيئاً، فبوجود مجموعتين من العينين، يمكن للفريق أن يستعيد الثقة، مع العلم بأن أي خطأ سيُمسك فوراً، وهذا الأمان النفسي يعجل بالتعلم، وتشير الدراسات التي تجريها جماعة أغيلي إلى أن البرمجة على أساس ثنائي لا تؤدي إلى تحسين نوعية المدونة فحسب بل تعزز أيضاً فهم أعضاء الفريق لأعمالهم في مجال التصميم.
كما أن الأدوار المختلفة في البرمجة تدعم مختلف طرائق التعلم، ويركز السائق على التفاصيل التكتيكية لمدونة الكتابة؛ ويأخذ الملاح نظرة استراتيجية، ويفكر في الهندسة المعمارية والتصميم، ويضمن تناوب هذه الأدوار بانتظام أن يمارس كل مطور كيفية وسبب مبادئ SOLID.
Pair Programmles that Reinforce SOLID
]Driver-Navigator (Classic Style): نوع واحد من المطورين بينما الاستعراضات الأخرى، ويمكن للملاح أن يشاهد عمدا انتهاكات SOLID والإصلاحات الفورية، مثلا، رؤية فصل له ثلاثة مسؤوليات متميزة، يمكن للملاح أن يسأل، " هل ينبغي لنا أن نستخرج هذه الفحوصات إلى فصول منفصلة؟ "
Ping-Pong Style]: يُستخدم بشكل مشترك مع التطوير الذي يُجرى على أساس الاختبار، ويكتب أحد المطورين اختباراً فاشلاً يعبر عن هدف تصميمي متوائم مع SOLID (مثلاً، " أريد أن أضيف طريقة جديدة للدفع دون تعديل المجهزين الحاليين " - مكتب المعالجين) ويكتب المطور الآخر التنفيذ لإرضاءة على الاختبار.
Strong-Style Pairing]: يأمر الملاح بالحركة التالية، ويصف ما يجب أن يطبع دون أن يملي على وجه الدقة، وهذا الأسلوب قوي بشكل خاص لتعليم SOLID لأن الملاح يجب أن يصوغ القرارات المتعلقة بالتصميم، ويتبع السائق التعليمات ويتعلم من خلال القيام بذلك.
استراتيجيات تعزيز مبادئ التنمية المستدامة من خلال البرمجة العادلة
ولا يضمن طلب اثنين من المطورين معاً مناقشة مبادئ مبادرة شولدايد أو اعتمادها، ويجب أن تكون الأفرقة مقصودة بشأن تنظيم الدورات لتشجيع إجراء محادثات على مستوى التصميم.
تحديد أهداف التعلم الواضحة لكل دورة
وقبل أن تقترن الدورة بتحديد مبدأ " شولد " الذي ستركز عليه الدورة، فعلى سبيل المثال، يمكن أن تستهدف جلسة الصباح مبدأ المسؤولية الوحيدة، ويستعرض المطوران قطعة من قاعدة البيانات المعروفة بأنها تنطوي على انتهاكات للقانون الإنساني الدولي، وهدفهما هو تحديد تلك الانتهاكات وإعادة معالجتها، ويبقي الهدف المحدد الدورة مثمرة ويمنع الزوجين من الانجراف إلى مهام غير متصلة بها.
ويمكن أن تورد قائمة بالأهداف على قائمة مرجعية مشتركة مرئية لكلا المطورين، على سبيل المثال:
- ابحث على الأقل عن ثلاث صفوف مع أكثر من مسؤولية واحدة
- اسحب كل مسؤولية إضافية إلى صف منفصل
- ضمان أن تستمر الطبقات المعاد تسميتها في جميع الاختبارات القائمة.
استعراضات مدونة الاستخدام بوصفها فرص التعلم في الوقت الحقيقي
وفي استعراض الرموز التقليدية، تأتي التعليقات بعد ساعات أو أيام من كتابة المدونة، وفي برمجة ثنائي، يجري الاستعراض فورا، وتشجيع الملاح على التصرف كوصي على " مؤسسة " للدورة، وفي كل مرة يبدأ السائق في صياغة طريقة أو صف جديد، ينبغي للملاح أن يسأل " كيف يتصل ذلك بمبادئ التصميم؟ وهل هناك موقف أفضل من التعسف يمكن أن نستخدمه؟ " على مر الزمن، يتعلم السائق أن يسأل تلك الأسئلة داخليا.
ولجعل هذا الوضع طبيعياً، يمكن للفرق أن تعتمد قاعدة بسيطة: يجب على الملاح أن يحدد على الأقل تحسيناً واحداً يتعلق بـ (سولايد) في كل ثلاثين دقيقة من الأزواج، وهذا المقام يحافظ على الوعي.
جلسات إعادة التصنيع المتعمدة
يرجى ذكر آخر ما بين 15 و 20 دقيقة من كل دورة من دورات الأزواج لتثبيت الرمز ليكون أكثر توافقا مع برنامج SOLID، ويمكن أن يتم ذلك على أساس الرمز المكتوب للتو، أو على جزء من الدين التقني، مثلا، يمكن أن ينظر الزوجان إلى فئة من الإرث تنتهك مبدأ التحرر/الخاسر، وأن يعيدا تصميمه لقبول سلوكيات جديدة من خلال التبعية.
أما جلسات إعادة التصنيع فهي حيث تصبح المبادئ المجردة ملموسة، ويمكن للزوجين توثيق ما فعلوه ولماذا يتقاسمان النتائج مع الفريق الأوسع، ويبنيان مكتبة لأمثلة عالمية حقيقية على التحسينات التي أدخلتها المنظمة.
مطورو الخبرة في مجال الطوابق مع صغار السن
ويمكن أن تكون مبادئ " SOLID " مجردة للمطورين في وقت مبكر من حياتهم الوظيفية، إذ أن إقامة مطور كبير يجسد هذه المبادئ مع مطور مبتدئ يعجل بالتبني، ويمكن للمسنين أن يبرهنوا على كيفية التفكير في التصميم من منظور " SOLID " ، ليس فقط على المستوى الرمزي بل على المستوى المعماري، ويتعلم المبتدئون عن طريق المراقبة ثم التدريب تحت الإشراف.
وبغية زيادة الفعالية إلى أقصى حد، يتناوب الزوجان أسبوعياً بحيث تنتشر المعرفة عبر الفريق، وتشجيع المبتدئين على قيادة جزء من الوقت حتى يصبحوا يمارسون التدريب العملي مع التصميم الذي يُوجهه برنامج SOLID.
إدماج قوائم مرجعية لسير العمل في نظام " بيرينغ "
إنشاء قائمة مرجعية مادية أو رقمية يُجرى الزوجان قبل وضع علامة على المهمة على النحو المنجز.
- [ ] هل لكل فئة مسؤولية واضحة واحدة؟
- [] هل يمكننا إضافة سمة جديدة دون تعديل فئة قائمة؟ (OCP)
- هل يمكننا أن نستبدل طبقة فرعية لصنفها الخارق دون اختبارات اقتحام؟
- [] هل تتضمن كل واجهة فقط الأساليب التي يحتاجها عملاؤها؟ (ISP)
- [] Do high-level modules depend on abstractions, not on concrete implementations? (DIP)
وتصبح هذه القائمة المرجعية نموذجاً عقلياً مشتركاً يستخدمه الزوجان طوال الدورة، ومع مرور الوقت، تتناقص الحاجة إلى القائمة المرجعية المادية مع كون المبادئ عادة.
أمثلة عالمية حقيقية والتحديات المشتركة
وقد قامت أفرقة تضم برامج مزدوجة من أجل تقرير اعتماد مبادرة " سولتيد " بتخفيض الوقت اللازم لإجراء استعراضات شفراتية وتخفيضات على إعادة العمل، فعلى سبيل المثال، بدأ العمل في تقديم الخدمات المالية بعقد دورات أزواج مدتها ساعتين ثلاث مرات في الأسبوع، وفي غضون شهر انخفض معدل عيوبها بنسبة 30 في المائة، ووصف أعضاء الفريق باستمرار رمزها بأنه " أكثر نظافة وسهولة " ، وكان السر أن الملاح الملاحة يركز باستمرار على تصميم انتهاكات في مرحلة مبكرة من مراحل التنمية.
بيد أن هناك تحديات، إذ يقاوم بعض المطورين برمجة الأزواج لأنهم يشعرون أنه يبطئهم في البداية، وقد يشعرون بالقلق أيضا من أن الفحص المستمر سيشعر بعدم الارتياح، ومن أجل التغلب على ذلك، يؤكدون أن الهدف هو التعلم وليس الحكم، واعتماد برنامج التنمية المستدامة في رحلة جماعية، والبدء في دورات صغيرة ومركزة (مثلا 30 دقيقة) والزيادة التدريجية في مدة راحة المطورين.
وهناك معوقات مشتركة أخرى هي أن الأزواج يمكن أن يعلقوا في " الإرهاق بالملاحة " ، ودور الملاحة هو متطلب عقليا، ولمنع الحرق، والجدول الزمني للعطلات الدورية، والأدوار البديلة كل ٣٠-٤٥ دقيقة، ويعود الأمر نفسه إلى التركيز على مبادئ SOLID: لا تحاول إنفاذ المبادئ الخمسة جميعها في كل دورة، وتختار واحدا أو اثنين في الأسبوع وتتناوب.
وأخيراً، ضمان أن يكون لدى الفريق فهم مشترك لما يعنيه كل مبدأ من مبادئ مبادرة شولد بلايد في سياقها المحدد، ويمكن أن تؤدي الأخطاء إلى زيادة هندسة المهندسين - مثلاً، مما يخلق العديد من الوصلات البينية الصغيرة فقط لتلبية برنامج المعلومات المتكامل عندما يكون هناك قدر كاف من الوصل بينة واحدة ومصممة جيداً، وينبغي ألا تصبح البرمجة الخاصة بالطرق البرية، وأن تشجع التطبيق العملي، إذا كان بوسع الزوجين أن يوضحا سبب الانحراف عن مبدأ ما، في ذلك، فإن ذلك منطقياً (مثلا).
قياس النجاح
ولتقييم ما إذا كانت البرمجة الثنائية تحسن فعلاً اعتماد مبادرة " سولد " ، يمكن للأفرقة أن تتعقب عدة مقاييس:
- Code quality metrics:] Cyclomatic complexity, class coupling, and depth of inheritance tree. Reductions in these after coupleing sessions indicate better adherence to design principles.
- Refactoring frequency:] Teams that refactor more frequently tend to have better SOLID compliance. Track how many classes are restructured per sprint.
- Pair feedback:] regular retrospects where developers share what SOLID concepts they felt they learned or applied during coupleing.
- Bug density:] A drop inmarks related to design - such as modules needing changes in multiple places for a single feature-signals improved SRP and OCP adoption.
خاتمة
فالبرمجة العادلة هي أكثر من مجرد أسلوب للصيد في الندوات والمنازعات الدمجية، وعندما تستخدم عمدا، تصبح محركا للتعلم المستمر من أجل التفوق في التصميم، وتوفر مبادئ SOLID إطارا واضحا وسهلا للمحادثات يمكن أن يستخدمه الأزواج لتقييم كل فئة وطريقة وعلاقة تنشأ، ومن خلال تحديد أهداف واضحة، ودور تناوبي، وإدماج نتائج متعمدة، والحفاظ على مناخ غير مؤات، يمكن أن تزرعه.
To dive deep into these topics, explore Robert C. Martin’s writings on SOLID’s relevance today, ]Martin Fowler’s refactoring techniques, and The Agile Alliance’s overview of couple programming[FL.]