الأحد، 21 يناير 2018

٥ كتب أي مبرمج لازم يقراها

مساء الخير
ازيكم

لو فاكرين في الفيديو اللي فات, اتكلمنا عن انك محتاج تستثمر في نفسك, و واحد من أفضل الوسائل للاستثمار في نفسك هي انك تقرا كثير
فحبيت اتكلم معاكم النهاردة عن 5 كتب مفيدة لأي مبرمج, الكتب دي تحديداً مش مرتبطة بلغة برمجة أو تقنية بعينها, و ده يمكن واحد من أهم الأسباب اللي خلتني آختارها, حتى لو الكتاب بيستخدم لغة برمجة لتوصيل المعلومة, لغة البرمجة مش هدف, بل وسيلة للايضاح, و المبادئ المطروحة في الكتب دي مبادئ مفيدة لأي حد عاوز يطور من مستواه التقني.

الكتاب الأول معانا هو كتاب يعتبر علامة في الكتب اللي بتتكلم في ال Software Engineering من واحد من أفضل الكتاب و الخبراء في المجال, الكتاب هو Code Complete 2nd Edition للكاتب Steve McConnell
الكتاب بيتعرض لمجموعة من المبادئ المهمة لأي مبرمج, زي التعامل مع ال Complexity و ازاي تهزمها, بوسائل كثير زي ال Modularization و ال Abstraction و ال Discipline
بيتعرض بالتفصيل لعملية بناء السوفتوير و المراحل المختلفة فيها, مع التركيز على مراحل ال Construction اللي هي ال Requirements, Design, Coding
الكتاب حيعلمك يعني ايه Software Engineering بالمعنى الحقيقي, و ازاي انت تبقى Software Engineer, واحد من أفضل الفصول في الكتاب هو الفصل 33 و اللي بيتكلم عن Personal Character و ازاي تبني شخصيتك و مبادءك كمهندس برمجيات.
https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670

الكتاب التاني معانا هو كتاب بيتكلم في يعني ايه كود نظيف, زي ما اسم الكتاب بيقول Clean Code, بيناقش مواضيع كثيرة تصب كلها في جودة الكود كمنتج لعملية السوفتوير من أول المبادئ الأولية زي البساطة و البعد عن الكلاكيع و اتباع الأساليب القياسية, مروراً بازاي تصمم بشكل يقلل ال Complexity و يعزلها اذا لزم الأمر,  و ازاي تبقى Consistent أو متسق مع نفسك طول الوقت, يعني لو عملت حاجة باسلوب معين مرة, و جيت تعمل حاجة شبها بعدين, اعملها بنفس الطريقة, مش بطريقة مختلفة تماماً, علشان تسهل على غيرك انه يستغل الخبرات اللي اكتسبها من تعامله مع الكود, ازاي تسمي الحاجات, و ده شئ يبان عبيط لكنه في الحقيقة من اول ابواب التعقيد, هو ازاي تسمي حاجة اسم معبر و في نفس الوقت تبقى متوقعة و مفهومة, و فيه مثل مشهور في ال Computer Science هو The two hardest things in computer science are Cache invalidation and Naming Things, طبعاً الكتاب فيه تفاصيل كثير عن كل حاحة في الكود زي ازاي تكتب functions, comments, tests ازاي تقسم الكود و قدم مفهوم Code Smell  و هي الحاجات اللي لو شفتها في أي كود بتبقى علامة انه كود مش Clean
الكتاب جزء من سلسلة كتب, منها Clean Coder و مؤخراً صدر Clean Architecture و اللي ان شاء الله حعمل عنه فيديو لما أقراه بالكامل.
https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882


الكتاب الثالث معانا هو كتاب بيتكلم في مشكلة بتقابل اي مبرمج في الدنيا و هي التعامل مع ال Legacy Code و اسم الكتاب واضح Working Effectively with legacy Code, و الكتاب طبعاً بيبتدي بتعريف يعني ايه Legacy Code و ليه بيحصل, و ليه الناس كلها بتعاني منه, و ايه الاخطاء اللي اغلب المبرمجين بيعملوها لما بيقعوا في الموقف ده, زي انهم اول فكرة تيجي في بالهم هو Rewrite, و طبعاً ده بيبقى 90% من الوقت اقتصادياً مستحيل, و لو بشكل ما اقنعت الناس انها تعمله, بنسبه كبيرة الموضوع بينتج عنه حاجة أسوأ من اللي كان موجود بالفعل قبل كده زائد طبعاً وقت ضايع من غير اضافة أي شئ جديد. فالكتاب مبدئياً بيعرف ال Legacy Code  بانه ال Code  اللي مالوش Unit Tests و مش مبني من الأول انه يبقى Testable و ده طبعاً موضوع كبير, ممكن نبقى نفردله فيديو بحاله, لكن عموماً المشكلة في ان الكود علشان مش Testable فده بيخليه عرضة للمشاكل بمجرد انك تعمل اي تغيير, اللي هو نظام جيت اضبط البنطلون الجاكتة ضربت, و الكتاب تقريباً كله بيتكلم في نصائح و وسائل في ازاي تبتدي تبني Unit Tests لكود من النوع ده, بطريقة آمنة من غير ما تحتاج تعمل أي تغييرات جذرية في الأول, علشان تكسر ال Catch 22 اللي هو You need uni tests to refactor, and you need to refactor to unit tests.
https://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052


الكتاب الرابع معانا هو كتاب Writing Secure Code 2nd Edition و ده برضه من أهم الكتب اللي لازم أي مبرمج يقراها, لأنها بتفتح عينه على أهمية التفكير في ال Security في كل مراحل بناء النظام, و الكتاب ده تحديداً كان كتاب رائد في المجال, و قصته جت من Microsoft للناس الكبيرة اللي زينا فاكرة مشاكل الأمن اللي كانت في منتجات مايكروسوفت زمان في التسعينات و اللي تسببت في مشاكل كثير في العالم, و كان جزء من المشكلة طبعاً ان عملية بناء سوفتوير آمن ما كانتش اتطورت, و كان ده الدافع الأساسي ل Bill Gates انه يكتب ال Memo الشهيرة بتاعة Trustworthy Computing سنة 2002 و اللي على أساسها تم انشاء فريق بنفس الاسم في الشركة, بهدف البحث و التطوير في مجال أمن البرمجيات, و الكتاب ده كان واحد من نتائج ابحاثهم.
الكتاب ده بيجمع حاجات كثير مهمة لأي مبرمج علشان يفكر و يكتب كود آمن, لكن في رأيي أفضل اسهامات الكتاب ده هو تقديمه لفكرة ال Threat Modeling و صدر بعد كده كتاب منفصل عن ال Threat Modeling ممكن تلاقوه في الروابط تحت, ال Threat Modeling يمكن هو من أهم الحاجات اللي ممكن أي فريق أو شركة تستخدمها في تحليل النظام أثناء عملية التصميم و تستخدمه في ايجاد المشاكل الأمنية و متابعة ال mitigations او طرق تفاديها.
https://www.amazon.com/Writing-Secure-Second-Developer-Practices/dp/0735617228

الكتاب الخامس معانا هو كتاب Head First Design Patterns, و ده يمكن الكتاب الأخف و الأمتع في قراءته, و اللي يمكن أفضل كتاب في سلسلة Head First من وجهة نظري, الكتاب طبعاً واضح من اسمه انه بيتكلم عن ال Design Patterns و بيقسمها لأنواع و بيتكلم عن كل Pattern بالكود و الأمثلة, أنا عن نفسي بستمتع جداً بقراءة الكتاب ده, و ساعات بقلب فيه حتى من باب اني اتفرج على الصور لأنه شبه كتب الحضانة كده, بس ده لا يمنع من انه بيشرح المادة العلمية بشكل كاف جداً.
https://www.amazon.com/Head-First-Design-Patterns-Brain-Friendly/dp/0596007124


دي كانت 5 كتب حبيت اشاركها معاكم النهاردة, لو فيه كتب كنت تحب تشوفها في القائمة دي, يا ريت تكتبها في التعليقات, الكتب دي طبعاً مش أفضل كتب في الدنيا, لكن دي الكتب اللي من رأيي لازم أي مبرمج يقراها أو على الأقل يقرا عن المواضيع اللي بتتكلم فيها الكتب دي.

شكراً جزيلاً لمتابعتكم و نشوفكم المرة الجاية.

سلام