2.0

View in English

2. مقدمة إلى الجزء 2: برمجة البرمجيات

يتناول الجزء 2 الحرفة اليومية لكتابة برمجيات يستطيع الكثيرون قراءتها وتغييرها والوثوق بها طوال عمر طويل. حدد الجزء 1 أسس كيفية تنظيم الفرق واتخاذ قراراتها. يتحول هذا الجزء إلى الشيفرة نفسها: الاصطلاحات التي تتبعها، والطريقة التي تشكّل بها التصاميم والواجهات، وكيف تختبر عملك وتراجعه، وكيف تدير تاريخ المصدر، وكيف توثّق ما تفعله. هذه هي الممارسات التي تفصل بين قاعدة شيفرة تسرّع التسليم وأخرى تقاوم كل تغيير.

في فريق كبير، الحرفة ليست مسألة ذوق شخصي. إنها كيفية التنسيق. عندما يعمل مئات أو آلاف المهندسين والمتعاقدين والخلفاء على الأنظمة نفسها، فإن الاصطلاحات المشتركة والعقود الواضحة هي ما يتيح للجميع العمل بالتوازي دون تصادمات مستمرة. تذكّر أن الشيفرة تُقرأ أكثر بكثير مما تُكتب، وأن كثيرًا من تلك القراءة يحدث بعد سنوات، على يد أشخاص لن تقابلهم أبدًا.

في بيئات المؤسسات الكبرى والحكومة، ترتفع المخاطر أكثر. تعيش الأنظمة عادة أطول من مؤلفيها بعقد أو أكثر. يتطلب التنظيم والتدقيق أدلة موثقة على الضبط. يجب أن تنتقل المعرفة عبر دوران الموظفين وحدود العقود. لذلك تعامل الفصول هنا الجودة لا بوصفها بطولة فردية، بل بوصفها خاصية مُهندَسة وشبه آلية لطريقة عمل الفريق بأكمله.

الفصول في هذا الجزء

  • 2.1 معايير الترميز والأسلوب: اصطلاحات مشتركة تُفرض تلقائيًا للتسمية والتنسيق والأنماط الاصطلاحية تتيح لمؤلفين كثيرين الكتابة وكأن مؤلفًا واحدًا حريصًا كتب كل شيء، بحيث يوجّه المراجعون انتباههم إلى التصميم لا إلى الأسلوب.

  • 2.2 مبادئ تصميم البرمجيات: إرشادات مثل SOLID (خمسة مبادئ لتصميم البرمجيات الكائنية التوجه)، وDRY (لا تكرر نفسك)، والاقتران والتماسك، والتصميم الموجه بالمجال (نمذجة البرمجيات بلغة مجال العمل)، تُعامَل بوصفها أدوات لها نطاق تطبيق وأنماط فشل معروفة لا قوانين يجب طاعتها.

  • 2.3 واجهات البرمجة وتصميم الواجهات: تصميم العقود التي تلتقي عندها الأنظمة والفرق، بحيث تستطيع الفرق المستقلة تغيير داخلياتها دون كسر المستهلكين أو فرض نشر متزامن.

  • 2.4 استراتيجية الاختبار: خيارات متعمدة بشأن ما يُختبر، وعلى أي مستوى، وبأي درجة ثقة، لبناء شبكة أمان سريعة وموثوقة تتيح لمؤسسة كبيرة النشر بتكرار وأمان.

  • 2.5 مراجعة الشيفرة والتعاون: فحص التغييرات قبل دمجها لالتقاط العيوب، ونشر المعرفة، وفرض المعايير، وتلبية ضوابط الامتثال، مع إبقاء المراجعة سريعة وبناءة لا شكلية.

  • 2.6 ضبط الإصدارات وإدارة المصدر: سجل كل تغيير، وانضباط التفرع والمستودع والالتزامات (commits) الذي يبقي الفرع الرئيسي قابلًا للإصدار، والتاريخ مقروءًا، ومسار التدقيق سليمًا.

  • 2.7 التوثيق: المعرفة المكتوبة، من أدلة البدء السريع إلى أدلة التشغيل (إجراءات تشغيلية خطوة بخطوة) وسجلات القرار، التي تحمي من مخاطر الاعتماد على شخص واحد، وتسرّع الإلحاق، وتنقل الفهم عبر السنين وحدود العقود.

  • 2.8 متطلبات البرمجيات: استخلاص وتحديد والتحقق من صحة وإدارة ما يجب أن تفعله البرمجيات وبأي جودة، مع إمكانية التتبع التي يتطلبها العمل المنظم والحكومي.

  • 2.9 بناء البرمجيات: حرفة بناء برمجيات عاملة: تقليل التعقيد، والبناء من أجل التحقق والتغيير، والبرمجة الدفاعية، وإعادة الاستخدام المنضبطة.

  • 2.10 إدارة تهيئة البرمجيات: تحديد وضبط وتدقيق كل عنصر تهيئة (أي مُصنَّف يجب تتبع إصداراته وضبطها) وكل تغيير، بحيث تكون الإصدارات قابلة لإعادة الإنتاج ومسار التدقيق سليمًا.

  • 2.11 جودة البرمجيات: الجودة بوصفها خاصية مُدارة أوسع من الاختبار: نماذج الجودة، وضمان الجودة مقابل ضبطها، والقياس، وإدارة العيوب، وتكلفة الجودة.

  • 2.12 نماذج البرمجيات وأساليبها: متى وكيف تُنمذج، ويشمل ذلك النماذج البنيوية والسلوكية، والأساليب الشكلية (التحديد والتحقق القائمان على الرياضيات)، والنمذجة الأولية، والأساليب الرشيقة، ومتى تكون النمذجة هدرًا.

  • 2.13 أسس الحوسبة والرياضيات والهندسة: الأساسيات الدائمة تحت الممارسة: الخوارزميات وهياكل البيانات، والمنطق والاحتمالات، والمنهج الهندسي التجريبي.

  • 2.14 بنية المشروع والمستودع: اصطلاحات متسقة لتنظيم الحل ومستودعه، وتشمل مجلدات معيارية، ونقطة دخول README، وتهيئة مشتركة، بحيث يستطيع أي مهندس التنقل في أي قاعدة شيفرة.

  • 2.15 تصحيح الأخطاء واستكشاف المشكلات: إيجاد العيوب وإصلاحها بوصفها ممارسة منضبطة وقابلة للتعلّم قوامها إعادة الإنتاج، والعزل بالبحث الثنائي، وصياغة الفرضيات واختبارها، وتسجيل كل إصلاح كاختبار ارتداد، بدل التخمين والتغييرات العشوائية.

  • 2.16 هندسة الأداء: جعل البرمجيات سريعة بما يكفي عن قصد بوضع ميزانيات أداء، والقياس والتنميط قبل التحسين، وفهم التكلفة الخوارزمية وزمن الاستجابة الذيلي، والحماية من الانتكاسات، كل ذلك على مستوى الشيفرة والمكوّن.

  • 2.17 التزامن والتوازي: كتابة شيفرة متزامنة صحيحة بالاعتماد الافتراضي على الثبات وتمرير الرسائل، وفهم حالات السباق والجمود ورؤية الذاكرة، واختيار المزامنة والنماذج الأعلى مستوى المناسبة، واختبار السلوك اللاحتمي عمدًا.

  • 2.18 إدارة التبعيات وسلسلة التوريد: إدارة شيفرة الطرف الثالث التي تشكّل معظم أي نظام حديث عبر انضباط الإصدارات وملفات القفل (lockfiles)، ووتيرة تحديث ثابتة، وبصمة تبعيات صغيرة ومفحوصة، وإثبات المنشأ وقائمة مواد برمجية (SBOM) لسلسلة توريد جديرة بالثقة.

  • 2.19 إعادة الهيكلة والدَّين التقني: تحسين التصميم الداخلي للشيفرة العاملة خلف مجموعة اختبارات جديرة بالثقة، والتعرف على روائح الشيفرة وتطبيق إعادة هيكلة صغيرة مسماة، واستخدام نمط التين الخانق (strangler fig) للتغيير الأكبر، وإدارة الدَّين التقني كمحفظة مرئية وممولة لا كإخفاق أخلاقي.

  • 2.20 معالجة الأخطاء وأنماط المرونة: تقرير عمدًا كيف تفشل الشيفرة وتتعافى، عبر عقود أخطاء واضحة، وخيارات الفشل السريع مقابل الفشل الآمن، وإعادة المحاولة مع التراجع الأسّي (backoff) والاتّسام بعدم التأثر بالتكرار (idempotence)، وقواطع الدائرة والتدهور التدريجي، وعدم ابتلاع أي خطأ بصمت أبدًا.

  • 2.21 أنظمة الأنواع والتحليل الساكن: التقاط فئات كاملة من العيوب قبل تشغيل الشيفرة، عبر التنميط الساكن والتدريجي الذي يجعل الحالات غير الجائزة غير قابلة للتمثيل، وأدوات التدقيق اللغوي ومدققات الأنواع والمحللات المدمجة في المحرر وخط الأنابيب.

كيف ترتبط هذه الفصول ببعضها

الخيط الناظم للجزء 2 هو القابلية للتغيير على نطاق واسع. كل ممارسة هنا موجودة لتتيح لكثير من الأشخاص تغيير نظام مشترك طويل العمر بثقة. تشكّل معايير الترميز (2.1) ومبادئ التصميم (2.2) الشيفرة بحيث تستطيع فهمها وتعديلها. يرسم تصميم الواجهات (2.3) الحدود التي تتيح للفرق تغيير داخلياتها باستقلالية. يوفّر الاختبار (2.4) شبكة الأمان التي تجعل التغيير آمنًا. مراجعة الشيفرة (2.5) هي حيث يلتقي العمل الفردي بالملكية الجماعية، وحيث تُفرض المعايير فعليًا. ضبط الإصدارات (2.6) هو الأساس الذي تستند إليه المراجعة والتكامل والتدقيق جميعًا. والتوثيق (2.7) يحفظ القصد الكامن وراء كل ذلك من أجل من يأتون لاحقًا.

تغذي هذه الفصول أيضًا بقية الدليل. تصبح الواجهات ومبادئ التصميم هنا لبنات بناء الأنظمة في الجزء 3، وخصوصًا أساسيات العمارة (الفصل 3.1). تُعد استراتيجية الاختبار (2.4) وضبط الإصدارات (2.6) المادة الخام لخطوط أنابيب التسليم الآلي في الفصل 8.1. وترتبط ممارسات التوثيق (2.7) مباشرة بأدلة التشغيل والمراقبة في العمليات، كما في الفصل 9.2. ويبني الجزء بأكمله على أسس القيم واتخاذ القرار الموضوعة في الجزء 1، محوّلًا المبادئ المشتركة إلى حرفة يومية ملموسة.