البرامج أو البرمجيات (Software) هي عبارة عن أدوات تم إنشاؤها لمساعدتنا في التعامل مع تعقيدات حياتنا الحديثة. هي مجرد وسيلة لغاية، وعادةً ما تكون هذه الغاية عملية وحقيقية. على سبيل المثال، تستخدم البنوك أنظمة وبرمجيات معقدة لإدارة الحسابات النقدية الخاصة بعملاءها وتنظيم تعاملات السحوبات والإيداعات اليومية التي تتم عليها. صاحب الحساب بإمكانه معرفة رصيده الحالي والحقيقي واستخدامه في أي وقت. تخيل للحظة، لو أن هنالك بنك لديه قاعدة عملاء بالملايين ولا يمتلك البرمجيات التي تساعده في إدارة هذه الحسابات. لذلك يجب أن يكون البرنامج عمليًا ومفيدًا للأعمال التي أنشئ من أجلها، وإلا فيفترض بألا نستثمر الكثير من الوقت والموارد في إنشائها.
تصميم البرمجيات هو فن!
في مقالة نشرتها صحيفة New York Times عام 2003 بعنوان (The Guts of a New Machine) للكاتب Rob Walker ، تحدث فيها عن شركة Apple عند طرح منتجها iPod ، نقل Walker مقولة عن Steve Jobs في ذلك الوقت:
“Most people make the mistake of thinking design is what it looks like. People think it’s this veneer – that the designers are handed this box and told, ‘Make it look good!’ That’s not what we think design is. It’s not just what it looks like and feels like. Design is how it works.“
حين نتكلم عن التصميم هنا، لا يُقصد بذلك تصميم واجهة وتجربة الاستخدام للبرنامج. نحن نتكلم عن التصميم للبرنامج ككل. تصميم البرمجيات هو فن بدرجة كبيرة، ولا يمكن تعليمه كعلم دقيق كالرياضيات والفيزياء باستخدام المعادلات والصيغ. بالطبع يوجد هناك مفاهيم – أكاديمية ومهنية – ومبادئ وممارسات تستند عليها عملية التصميم لكن في مجمله هو فن ومهارة. المنتج النهائي يشابه التصميم المعماري لمبنى أو رسمة فنية تحمل الصبغة واللمسة الشخصية لأولئك الذين عملوا عليها.
التصميم الموجه للمجال (Domain-Driven Design)
هناك طرق مختلفة وكثيرة يتم اتباعها عند العمل بتصميم البرمجيات والأنظمة. خلال العقود الأخيرة، عرفت صناعة البرمجيات العديد منها واستخدمتها في مشاريعها، وكل طريقة لها مزاياها ونواقصها. كمحاولة منه في تطوير وإثراء مجال تصميم البرمجيات، قام مبرمج يدعى Eric Evans بطرح كتابه (Domain-Driven Design: Tackling Complexity in the Heart of Software) في عام 2003.
حاول Eric من خلال كتابه التعرض لبعض المفاهيم والأفكار التي اتبعها خلال مسيرته المهنية كمبرمج والتي قد تساعد في التعامل مع المشاكل والتحديات التي تتعرض لها بعض مشاريع تطوير البرامج خاصةً إذا كانت المشكلة التي يحاول البرنامج حلها معقدة.
شخصياً لا أعرف أحد كتب عن موضوع الكتاب بإسهاب وباللغة العربية، أيضاً لم أجد الا صفحة واحدة وللأسف غير مكتملة في النسخة العربية من الويكيبيديا. في المقالات القادمة، سأتعرض لبعض المفاهيم والأفكار التي طرحها Eric من خلال كتابه والتي أتوقع بأنها ستكون مفيدة لأي شخص يعمل في صناعة البرمجيات لأني أؤمن بأن أي مبرمج محترف لا بد أن تكون ترسانته مليئة بالمعارف والأدوات لاختلاف طبيعة المشاريع والمشاكل التي يحاول إيجاد حلول لها من خلال البرمجيات!
نلقاكم بكل خير في مقالة قادمة بإذن الله.