كتاب الكود النظيف
السلام عليكم،
مشاغل الجامعة والعمل والعديد من الأمور شغلتني عن المدونة لمدة لا بأس بها، ولكن إن شاء الله سأحاول الالتزام أكثر.
قرأت كتاب Clean Code من العم بوب كما يسمي نفسه، العم بوب أو Robert C.Martin من أشهر المبرمجين على مستوى العالم ومن مؤسسي الآجايل (Agile)، لذلك كلما تجد كتاباً له فحاول أن تقرأه.

الكتاب أسلوبه جميل حيث يأتيك بمثال (كود أو نص مصدري) ويحاول تطبيق مبادىء “الكود النظيف” عليه فيحسنه ويتكلم عن الفرق قبل وبعد التعديلات سواء في الأداء أو سهولة الكود، أيضاً يسرد عليك العديد من القصص الواقعية التي مرت على رأس هذا المبرمج العجوز لتبقى عالقة في ذهنك.
أمثلة النص المصدري في الكتاب مكتوبة بالجافا ولكن اعتقد كل مبرمج سيفهم هذه الأمثلة فهي تشبه كثيراً الـ #C وحتى ++C.
الفائدة في الكتاب كبيرة ويجب أن يقرأه كل مبرمج، سأسرد أبرز النقاط التي شدتني:
- التابع دوماً يجب أن يؤدي مهمة واحدة، مثلاً تابع (دالة) لإضافة مقال جديد، ينشأ اتصال بقاعدة البيانات ويدخل المعلومات إليها ويظهر رسالة بأن المقال تم حفظه، هذا التابع يؤدي أكثر من مهمة لذلك جزء هذه المهمات على عدة توابع بحيث كل تابع يؤدي مهمة واحدة فقط، بهذه الحالة يصبح نصك المصدري أفضل للفهم بشكل كبير.
- اكتب للمتحولات والتوابع والأصناف (الكلاسات) أسماء مفهومة للمهمة التي تقوم بها حتى لو كان الاسم طويلاً، طبعاً حاول أن يكون قصيراً ولكن عندما يقرأ الاسم أي مبرمج يفهم ماذا يؤدي هذا المتحول أو التابع.
- اهتم بالتعليقات بشكل كبير ولا تكتب تعليقات سخيفة أو تعليقات تحتاج لتعليقات كي تفهمها!
- Unit Testing من الأهمية بدرجة كبيرة، حاول أن تختبر كل شيء كي تحصل على تطبيق خالٍ من الأخطاء وقابل للتعديل دون الخوف من حدوث أخطاء نتيجة التعديلات
- الصنف (الكلاس) أيضاً يجب أن يؤدي مهمة واحدة وأن تكون جميع توابعه في نفس المستوى، مثلاً صنف طباعة الرسائل يأتي في أقرب طبقة للمستخدم أما صنف التعامل مع قاعدة البيانات فيأتي في طبقة منخفضة من النظام وهكذا فكل صنف يجب أن يكون في طبقة واحدة.
كتاب لا يجب أن تتركه يفلت من بين يديك وبإذن الله ستفيد منه كثيراً ولكن يوجد لي ملاحظة على الكتاب في عالم PHP ولغات السكربتنغ، المشكلة أنه عند كتابتك (كما يشدد على ذلك العم بوب) للعديد من الأصناف وكل صنف يؤدي مهمة واحدة ستحصل على عشرات الملفات وكل ملف يسبب حمل زائد على السيرفر (request) لأن هذه الأصناف الموجودة في الملفات تترجم في كل مرة يطلب أي زائر موقعك بعكس لغات الترجمة التي تترجم التطبيق مرة واحدة، لذلك حاول كتابة الأصناف ولكن لاتكثر منها لدرجة كبيرة ولاتكثر من الملفات.












أولا شكرا لك على التعريف بهذا الكتاب وتلخيص بعض النقاط الهامة التي تختص بالدوال والكلاسيس والتى تقريبا أتفق مع معظمها
لكن سؤالي الأول حول ما المشكلة فى انشاء ملف واحد يسمى functions يحتوي جميع الدوال التي يحتاجها النظام ولتكن هذه الدوال 500 دالة أو أكثر
نفس الشيئ بالنسبة للكلاسيس ننشئ ملف class يحتوي جميع الكلاسيس التي نحتاجها فى البرنامج
أتمنى اذا كان هناك عيوب لهذا الطريقة أن تخبرني بها
أخيرا.. كثيرا ما أسمع وأقراء عن الUnit Testing لكني فى واقع الأمر لا أعرف كيف أستخدمه أو استفيد منه.. فياليتك توضح لنا ما هية هذا الشيئ
ولك جزيل الشكر
يا أهلاً بالأستاذ عمرو، عيب هذه الطريقة:
1- كبر حجم الملف.
2-لالو حدث خطأ في أحد التوابع فيستوقف الملف كله عن العمل.
أما عن Unit Testing فقد حضرت تدوينة أقوم بوضع النقاط الأخيرة عليها وإن شاء الله غداً ستنشر
أخى خالد لفت نظرى فى تدوينة نصائح ال php موضوع (طبقة التعامل مع قاعدة البيانات ) وفى هذه التدوينة نقطة (وضع صنف قاعدة البيانات قريبا من النظام)… ممكن مزيدا من التوضيح وكيف يمكن عمل طبقة للتعامل مع قاعدة البيانات .
أنا أقوم بجلب البيانات عن طريق مجموعة من الدوال مخزنة عندى فى ملف … وحينما جربت وضع هذه الدوال فى كلاس وجدت العملية صارت أطول
حيث أقوم فى كل مرة بعمل object جديد ثم إستدعاء الدالة عن طريقة فهل هناك أسلوب برمجى أفضل.
اهه تقصد فوائد البرمجة الغرضية التوجه!
أهم الفوائد:
1- يمكنك استخدام متحولات الصنف لاستخدامها بين التوابع
2- الوراثة مهمة جداً، فمثلاً لو صنعت طبقة للتعامل مع mysql ربما فيما بعد تكتب صنف مجرد وترث منه للتعامل مع الأوراكل مثلاً!
3- الترتيب، حيث كل صنف يوجد بداخله مجموعة توابع خاصة به، أما في الملفات فلن تعرف هذا التابع ماوظيفته.
بالفعل اخي خالد كما ذكرت …… الكتاب جدا رائع
ويستحق العرض والتنويه ……
في شركتي اقنعت مديري السابق ان يقرأ وأن يتم عرض الامثلة بشكل جماعي
مع الموظفين
لا تتخيل مدى استفادتي من الكتاب
شكرا لك …. على هذا العرض الجميل
ماشاء الله خطوة أحسدك عليها!
إقناع المدير ليس بالأمر السهل!