هناك الكثير من التساؤلات عن أيا من أشكال عيوب تصميم البرنامج يمكننا تصنيفها على أنها “ديون تقنية” وأيها لا يجب تصنيفه كذلك.
خير مثال على ذلك هو مقالة “العم بوب” Uncle Bob الذي يقول إن الفوضى ليست دينا تقنيا. حجته هي أن الكود الفوضوى، الذى ينتجه أناس يجهلون أساليب التصميم الجيدة، لا ينبغي أن تكون دينًا. يجب أن تكون فكرة الديون التقنية مقصورة على الحالات التي يتخذ فيها الأشخاص قرارًا مدروسًا باعتماد استراتيجية تصميم ليست مستدامة على المدى الطويل، ولكنها تحقق فائدة ملموسة على المدى القصير، مثل إصدار نسخة من البرنامج فى وقت قريب. والنقطة هى أن القيمة العائدة من الدين ملموسة فى وقت قريب، ولكن يجب أن يتم سداد هذا الدين فى أقرب وقت ممكن.
في رأىى، فإن السؤال حول ما إذا كان عيب التصميم دينًا أم لا هو سؤال خاطئ. الدين التقنى هو استعارة (تشبيه)، لذا فإن السؤال الحقيقى هو ما إذا كانت الاستعارة مفيدة في التفكير في كيفية التعامل مع مشكلات التصميم، ومفيدة فى كيفية مناقشة الفكرة أم لا. هناك فائدة خاصة من تشبيه “الديون المالية” وهي أنها مفيدة جدًا للتواصل مع الأشخاص غير التقنيين.
أعتقد أن استعارة الديون تعمل بشكل جيد في كلتا الحالتين – يكمن الفرق في طبيعة تلك الديون. الفوضى عبارة عن ديون متهورة تضطر الشخص إلى دفع فوائد معوقة أو فترة طويلة لدفع أصل الدين. كان لدينا (فى شركة ثووتوركس) عدد من المشاريع حيث ورثنا كود البرامج مع ديون مرتفعة ووجدنا أن تشبيه “الديون المالية” مفيد جدًا فى مناقشة إدارة توقعات العملاء حول كيفية التعامل معها.
يذكرنا استعارة الديون بالخيارات التى يمكننا اتخاذها حيال عيوب التصميم. قد لا يستحق الدين الرشيد (الذى تم اتخاذه بحكمة) الدفع للوصول إلى إصدار نسخة من البرنامج بسرعة – إذا كانت مدفوعات الفائدة عليه ضئيلة بما فيه الكفاية – على سبيل المثال لو كانت في جزء من الكود نادرًا ما سوف يتم تغييره فى المستقبل.
لذا فإن الفرق المفيد ليس فى التسائل إذا كان شيئاً ما دين تقنى أم لا، ولكن بين الدين الرشيدً والمستهتر.
هناك تمييز آخر مثير للاهتمام في المثال الذي أوضحته للتو. ليس فقط هناك فرق بين الديون الرشيدة وتلك المستهترة، بل هناك أيضًا فرق بين الديون المتعمدة والمهملة.
فى مثال الديون (1)الرشيدة هو أيضا متعمد لان فريق العمل يعرف أنهم يتحملون دينًا، وبالتالي يفكرون فيما إذا كانت مردود إصدار سريع أكبر من تكاليف سداده الدين.
فريق العمل الجاهل بممارسات التصميم يأخذ ديونها (2) مستهترة (ومهمل) دون أن يدركوا حتى مقدار التورط الذى يضعون أنفسهم فيه.
فريق العمل الجاهل بممارسات التصميم يأخذ ديونها (2) مستهترة (ومهمل) دون أن يدركوا حتى مقدار التورط الذى يضعون أنفسهم فيه.
قد لا يكون الدين (3) المستهتر مهملا (أن يكون متعمد و مستهتر). قد يعرف الفريق عن ممارسات التصميم الجيدة، حتى يكون قادرًا على فعلها ولكن قرر أن يتحرك “بسرعة ولا يهم تكسير الأشياء” لأنهم يعتقدون أنهم لا يستطيعون تحمل الوقت المطلوب لكتابة كود نظيف. أتفق مع العم بوب على أن هذا عادة ما يكون دينا مستهترًا، لأن الناس يقللون من شأن قيمة “العائد علي التصميم الجيد” من فرضية Design Stamina Hypothesis (عدد أو كم الخصائص الذي تحته يمكن مقايضة قلة جودة تصميم الكود/البرنامج مقابل السرعة في التنفيذ). الهدف من التصميم الجيد والكود النظيف هو جعلك تسير بشكل أسرع – إذا لم يحقق الكود النظيف ذلك فإن أمثال العم بوب و كينت بيك و وارد كننغهام لن يقضوا الوقت في الحديث عنه.
إن تقسيم الدين إلى مستهتر/رشيد — متعمد/مهمل يعطينا أربعة حالات، وقد ناقشنا ثلاثاً منها فقط. فهل هناك شيء مثل الدين (4) الرشيد المهمل على الرغم من أن مثل هذا الشيء يبدو غريباً، إلا أنني أعتقد أنه – وهو ليس شائعاً فقط ولكنه لا مفر منه للفرق التي تتميز بمصممين ممتازين.
كنت أتحدث مع زميل حول مشروع كام قد فرغ للتو منه. المشروع الذي قدم برمجيات قيمة، وكان العميل سعيدًا، وكان الكود نظيفًا. ومع ذلك لم يكن سعيدًا بالكود. شعر أن الفريق قام بعمل جيد، لكنهم الآن يدركون ما يجب أن يكون عليه التصميم.
أسمع هذا طوال الوقت من أفضل المطورين. النقطة هي أنه أثناء البرمجة وكتابة الكود، أنت تتعلم. غالبًا ما قد يستغرق الأمرعامًا من البرمجة في المشروع قبل أن تفهم ما يجب أن يكون أفضل نهج للتصميم.
ربما يجب على الشخص أن يخطط للمشروع لقضاء عام في تطوير البرنامج ثم تتخلص منه وتعيد كتابته من جديد، كما اقترح فريد بروكس ساخراً، لكن هذه خطة من الصعب إقناع أي شخص بها. بدلاً من ذلك، تجد أنه في اللحظة التي تدرك فيها ما يجب أن يكون عليه التصميم، فإنك تدرك أيضًا أن لديك دينًا مهملًا. هذا هو نوع الدين الذي تحدث عنه وارد كننغهام في مقطع الفيديو هنا.
قرار دفع الفائدة مقابل دفع رأس المال لا يزال ساريًا، لذا فإن الاستعارة لا تزال مفيدة في هذه الحالة. ومع ذلك، فإن المشكلة في استخدام تشبيه الديون لذلك هي أنني لا أستطيع تصور موازاة تحمل دين مالي رشيد ومهمل. ونتيجة لذلك، أعتقد أنه سيكون من الصعب شرح للمديرين لماذا ظهر هذا الدين. في رأيي أن هذا النوع من الديون أمر لا مفر منه، وبالتالي يجب توقعه. حتى أفضل الفرق سيكون لديها ديون للتعامل معها مع استمرار المشروع – وهذا سبب مهم لعدم تحميل البرنامج باستهتار بكود قليل الجودة.
Leave a Reply