VOL26: Deep Dive Into Code Quality
أهلًا وسهلا بكم في العدد السادس والعشرين من النشرة الأسبوعية لاقرأ-تِك 🎉
لا تنسوا أهلنا من صالح الدعاء,اللهم إنّا استودعناك اياهم، اللهم كُن عوناً لهم، اللهم انصرهم واحفظهم. 🇵🇸
أهلًا وسهلا بكم في العدد السادس والعشرين من النشرة الأسبوعية لاقرأ-تِك 🚀
سواء كنت مهندس برمجيات مبتدئ أو محترف، فنشرتنا هدفها انها تثري المحتوى التقني العربي سعيا للتطوير من جودة المحتوى باللغة العربية, من خلال تقديم أحدث المستجدات والتطورات في عالم البرمجيات، بالإضافة إلى أفضل الممارسات والنصائح القيمة, ونشر أحدث المقالات وترشيحات الكتب ومحتوى ورقة وقلم اللي بينزلوا بشكل مستمر في موقع اقرأ-تِك.
في الإصدار ده الفهرس هيكون كالآتي:
Deep Dive Into Code Quality : Beyond Bugs
Json Web Token - JWT
Records in Flutter
Package Managers
Docker Series Part 4: Volumes and Docker Compose
ستجدون أيضًا في هذه النشرة:
الشراكات - Sponsorship
قناة التليجرام مجانية للجميع حتى يصلك كل مقال جديد
كيفية كتابة مقالات معنا في اقرأ-تِك: والمقالات تكون متاحة ومجانية للجميع ومحفوظة باسم الكاتب بكل تأكيد
كيفية الاشتراك في اقرأ-تِك من خلال InstaPay و VodafoneCash
Deep Dive Into Code Quality : Beyond Bugs
احيانا ممكن يقابلنا مشاكل او bugs و احنا بنعدل او بنضيف Feature جديدة للكود علي عكس المتوقع و دا لأن معظمنا ك software engineers بنركز دايما اننا عايزين نطلع منتج كويس و شغال عند العميل ، بس هل فكرنا قبل كدا في quality بتاعته ك code ؟
تخيل انك بتبني عمارة علي اساس ضعيف و حبيت تضيف دور جديد للمبني هتلاقي ان المبني كله بدأ ينهار و دا بسبب الاساس الضعيف من الاول ، ف زي ما بنقول الاهم من الشغل تظبيط الشغل ، هنتعرف النهاردة عن ازاي نخلي السوفتوير بتاعنا الكواليتي بتاعته كويسة و ايه هو Code Quality و ازاي بنقيسه.
ايه هو الـ Code Quality؟
في قاعدة Lehaman’s بتقول:
Any system that’s used will need to change
يعني ايه الكلام دا بقي؟
معناه ان اي سيستم او برودكت بنعمله هنحتاج نعدل فيه سواء اننا نضيف Feature جديدة او نعدل عليها. تخيل كدا لو انت مهتمتش بجودة الكود بتاعك مش هتعرف تغير اي حاجة في السيستم من غير ما تقابل مشاكل فيه و bugs جديدة هتزود من وقت تحسينك ليه.
يبقي الCode Quality ببساطة هو انك تعمل كود يكون سهل القراءة و الفهم لما ترجعله في اي وقت.
نقدر نقول انها طريقة علشان تقيس كفاءة و مدي سهولة فهم و التعديل علي كود موجود. ونقدر نقيسه عن طريق قد ايه هو قابل للقراءة و ممكن نعيد استخدامه في اي بروجكت تاني و مدي سهولته لاي developer تاني انه يقدر يقرأه و يعدل عليه في وقت قصير.
أهمية الـ Code Quality
طيب بعد ما عرفنا يعني ايه ، ليه هو ممكن يكون مهم او ايه مدي تأثيره ؟ خلينا نشوف ..
خليك عارف ان فيه حاجتين مينفعش تثق فيهم :
انك تكون متاح في المستقبل
الذاكرة المستقبلية بتاعتك.
خلينا نفهم اكتر عن طريق السيناريو دا: انت بدات بروجكت كان الكود مش احسن حاجة و قلت انك هتعدله بعدين جالك Offer شغل تاني او انشغلت في بروجكت تاني معرفتش ترجع تعدل عليه و كان في تيم تاني هيشتغل فيه ممكن تسأل نفسك وقتها ، هل التيم هيكون قادر انه يعدل عليه او يفهمه بسهولة ؟
ايه اللي هيحصل اما يضيفوا تعديل جديد ؟ و ازاي هيأثر علي ال performance and bugs ؟ من هنا نقدر نستنج اهمية الـ Code Quality.
أول حاجة بيساعد الdeveloper انه يعيد قراءة الكود ببساطة و بسهولة.
بنقدر نتاكد ان العميل هياخد experience جيدة ومش هيشتكي من وجود اخطاء غير متوقعة.
بيقلل الاخطاء المستقبلية و بيحسن الاداء و بيكون سهل التعديل عليه و اكتشاف الاخطاء بدري و كمان بيكون فيه security عالية.
طول ما السوفتوير بتاعك مبيطلعش اخطاء لمدة طويلة دا هيوفر فلوس للشركة و هيوفر وقت لما يحتاج تعديل او اضافة اي Feature جديدة.
ايه هي الـ Code Quality Standards
في عوامل كتير بتأثر علي جودة الكود ف عملوا معاير من خلالها بنقدر نشوف الكود بتاعنا كويس قد ايه و ايه الجوانب اللي محتاجة تتحسن فيه. ومن ضمن المعايير دي: readability, clarity, reliability, security, modularity, etc...
انك تقدم كود جودته عالية دا شىء اساسي لكل developer وعلشان تقدر تعمل دا في قواعد او معايير بنمشي عليها علشان نقدر نحقق اعلي جودة والمعايير دي بتخلي الكود أكثر سهولة ويكون قابل للتعديل واكتشاف الاخطاء بدري فخلونا نكتشف ايه هما
JSON Web Token - JWT
الـ JWT عبارة عن Secure Tokens بيتبعت مع كل Request أو Response عشان نتأكد ان البيانات بين الطرفين متغيرتش، كونها طريقة سهلة وفعالة بيخليها واحدة من أكثر الطرق المستخدمة في الـ User Authentication and Authorization (التحقق من هوية المستخدم و تحديد صلاحياته).
أجزاء الـ JWT
ال JWT بيتكون من 3 أجزاء:
١- الـ Headers
ودي بيتكتب فيها نوع الـ Token و كذلك الـ Algorithm المستخدم.
2- الـ Payload
ودا بيحتوي على معلومات المستخدم زي الـ Email و ممكن بعض صلاحياته وتاريخ اصدار وانتهاء الـ Token.
والجزئين دول بيكونوا Base64 Encoded وتقدر تاخدهم و وتستعملهم في أي Base64 Decoder علي الانترنت و وهيظهرلك القيمة بداخلهم، وعشان كدا مينفعش نحط فيهم أي معلومات سرية زي الـ Passwords.
3- الـ Signature
والجزء دا بيكون عبارة عن Hashing للجزئين ( 1 + 2 + Secret )
💡
والـ Secret ده الـ Server بس اللي يعرفه وكل لما كان أصعب كان قوة الـ JWT Token أكبر. وعادة ما بيتخزن في الـ Environment Variables في الـ Server ده.
طيب بنستفاد منه ازاي في الـ Authentication والـ Authorization؟
زمان عشان نعمل User Authentication كان بيتم بالخطوات دي:
المستخدم بيعمل Login من خلال الـ Email والـ Password
الـ Server بيتحقق منهم ويقوم بتحديد Session ID للمستخدم ويخزنها في الـ Database
بعد كده الـ Server بيبعتها للمستخدم والمتصفح بيخزنها
وفي كل Request المستخدم بيبعته للـ Server بيكون معاه الـ Session ID
وهنا بنقابل مشكلتين ..
الشراكات - Sponsorship
بفضل الله أصبح متاح حاليا دعمنا من خلال الرعاة والشراكات وفعلنا الـ Sponsorship وتقدروا تشوفوا التفاصيل كاملة من هنا والـ Analytics بتاعتنا من خلال اقرأ-تِك والنشرة الأسبوعية 🚀
لا تدع شيء يفوتك!
بفضل الله قمنا بإطلاق قناة اقرأ-تِك على التليجرام مجانًا للجميع 🚀
آملين بده اننا نفتح باب تاني لتحقيق رؤيتنا نحو إثراء المحتوى التقني باللغة العربية ، ومساعدة لكل متابعينا في انهم يوصلوا لجميع أخبار اقرأ-تِك من حيث المقالات ومحتوى ورقة وقلم والنشرة الأسبوعية وكل جديد بطريقة سريعة وسهلة
مستنينكوا تنورونا , وده رابط القناة 👇
Records in Flutter
واحدة من المزايا الجديدة اللي نزلت في لغة Dart 3 هي الـ Records، والـ Record واحدة من الـ Data Structure اللي بتتميز انها بتقدر تخزن عدد ثابت من القيم من أنواع مختلفة.
الميزة دي بتسهل حاجات كتير، خصوصًا في الحالات اللي بيكون استخدام الـ Class فيها مبالغ فيه. بمعنى إنك مش لازم تروح وتعمل Class كامل مخصص لكل حاجة، ممكن تستخدم الـ Records عشان توفر وقتك وجهدك.
Record in Flutter
عندنا نوعين اتنين من الـ Records ألا وهم الـ Positional Records والـ Named Records.
النوع الأول : Positional Records
في المثال ده، عملنا record من خلال قوسين وأدخلنا القيم بشكل مفصول. الـ record هنا بيحتوي على متغيرين مختلفين. بنستدعي القيم باستخدام $ وأول قيمة بيكون رقمها 1، بعكس باقي الـ data structures اللي بتبدأ من الصفر.
النوع الثاني : Named Records
هنا ممكن نستدعيهم من خلال أسمائهم مباشرة.
وكمان لو عايز تخليهم يمثلوا الـ return بتاع الدالة، بيكون شكلهم كالتالي:
الـ Positional:
الـ Named:
مثال أكبر:
تعالوا ناخد مثال أكبر لاستخدام الـ Records في تطبيق حقيقي
قارن الكود ده بالكود اللي جاي واستنتج ازاي ممكن تكون الـ Record أداة قيمة لكتابة كود أنضف وأبسط، خاصة لما تستخدمها في المكان المناسب.
Package Managers
الـ Package manager هو مساعد المبرمج المخلص في كل مشاريعه، فلو شغال Frontend هتلاقيك بتستخدم npm ولو شغال Backend فلكل لغة package manager بردو زي composer في PHP ولو شغال مع الذكاء الاصطناعي أو هندسة البيانات أو لغة python عامة فهتلاقيك بتستخدم pip
فخلونا نسأل سؤال وجودي ونقول ايه هي ال package ؟
ال package - الحزمة البرمجية - مصطلح عام بيشير لقطعة من الكود أو برنامج ممكن يكون كبير بحجم framework أو library زي Angular or React بستفيد منها في مهام متعددة وممكن يكون بيعمل مهمة واحدة بسيطة أنا محتاجها زي ال Date format مثلاً.
الشاهد إنه برنامج جاهز بستفيد بيه بدل ما نعيد اختراع العجلة واستخدامها بيسرع عملية تطوير التطبيقات المختلفة.
طيب ليه استخدم package manager ؟
ما ممكن أنزلهم بنفسي وخلاص زي البرامج العادية
في الواقع لو عملت كدا هتقابلك مشاكل كتير زي:
Installation : تنزيل الـ packages مش زي بعضها, وكتير منها بيحتاج configuration معينة عشان تشتغل على الـ OS System بتاعك, فال package manager بيقولك متشغلش بالك بحوارات ال OS دي وقولي أنت عاوز تنزل برامج إيه وانا هنزلها من Repository معين من الانترنت وهعملها Configuration على نظام التشغيل بتاعك
Dependency Resolution: عدد الpackages اللي بتحتاجها غالبًا بيكون كبير وإدارة كل واحدة على حدة مهمة رخمة ومكلفة في الوقت, فتخيل محتاج تنزل أو تعمل update ل 50 برنامج مثلاً عشان تطبيقك يشتغل!!
Configuration Management and Uninstallation وضع الـ packages دي في المكان المناسب في نظام التشغيل وكذلك مسحها أو تحديثها
فال package manager بيحل كل المشاكل دي بسهولة وبيسرع شغلك بل وبيقدم لك مميزات تانية زي:
User Permissions: فيسمح لمستخدمين محددين بتنزيل وتعديل ال packages
Digital Signatures: يتأكد من كون ال package دي من مصدر مأمون ومفيهاش أي malicious code
Package Version Management: يحرص على استخدام النسخ المناسبة من ال dependencies لتشغيل البرنامج
فكرة ال Package manager أثبتت إنتاجيتها ومع الوقت المبرمجين أضافوا ميزات تكميلية ليها عشان تحسن تجربة تطوير البرامج.
Docker Series Part 4
لو بتدور على طريقة سهلة وفعّالة عشان تدير بيها التطبيقات بتاعتك، فمفيش شك إن Docker هيكون من أهم الأدوات اللي هتساعدك لتحقيق ده. Docker هو أداة قوية جدًا تقدر تعملها بيها حاويات Containers، ودي زي بيئة معزولة بتشغل فيها التطبيقات بتاعتك.
وفي السلسلة دي، هنغطي أهم المفاهيم والأدوات والـ Commands اللي ليها علاقة بـ Docker بشكل بسيط وسهل عشان تقدر تستفيد منها بسرعة وتطبّقها في شغلك.
Docker Volumes
هي Storage بخزن عليها ال Data الخاصة بال docker فلما بعمل container الداتا بتاعته بتتخزن فين ؟ في حاجه اسمها docker area داخل ال file system الخاص بال docker
مسار الـ Volumes هو : /var/lib/docker/volumes
وطريقه ال volume افضل طريقه لتخزين الداتا الخاصة بال docker ليه ؟ لانك لو حذفت ال container مثلا عن طريق الخطا الداتا بتتحذف معه وبالتالي لو كانت الداتا متخزنه داخل volume الداتا هتفضل موجوده داخل ال volume دا
[root@mostata ~ ] docker volume create first-volume
بعمل create ل volume جديد اسمه first-volume
[root@mostata ~ ] docker volume ls
بعمل list بكل ال volume ال عندي
[root@mostata ~ ] docker run -it -d –name con1 -v first-volume:/con1 ubuntu
بعمل container جديد اسمه cont1 من ال image ال اسمها ubuntu و -v بحددله ال volume بتاعه وهو ال اسمه first-volume وداخل ال volume بعمل folder خاص بال container دا اسمه con1 ب اسم ال container
[root@mostata ~ ] docker inspect con1
بعرض معلومات عن ال container ال اسمه cont1
من ضمن المعلومات دي ال mount ودي بيكون فيها المعلومات المتعلقة بال volume الخاصة بال container دا وهنا بيقولي ان ال container بيستخدم ال volume ال اسمه first-volume وال destination بتاعه ال هو ال folder الخاص بال container دا داخل ال volume دا اسمه cont1
طيب وليكن دلوقت عاوز اخزن داتا معينه داخل ال volume دا هعمل أي ؟
مشاركة من أحمد عطية في مجتمع اقرأ-تِك 😂
تقدروا دلوقتي تشتركوا في اقرأ-تِك بخصم الـ 20% وتنضموا لمجتمع مهتم بالقراءة في هندسة البرمجيات بـ 50 جنيه بس 🎉
وتستمتعوا بحرية كاملة في قراءة المقالات في مواضيع مختلفة بجودة عالية زي:
Data Structure & Algorithms , System Design , Distributed Systems , Micro-Services, Clean Code, Refactoring, Databases , Web Development, DevOps وغيرهم كتير باللغة العربية!
بالاضافة لمحتوى ورقة وقلم اللي بنشرح فيه مفاهيم برمجية بطريقة سهلة وباستعمال صور توضيحية 🚀
ولو فيه مشاكل في الدفع الأونلاين فمتاح دلوقتي الاشتراك من خلال InstaPay و VodafoneCash 💪
تقدروا تتواصلوا معانا من خلال الـ WhatsApp Business أو من خلال الرسايل على مواقع التواصل الاجتماعي أو من خلال البريد الالكتروني contact@eqraatech.com 😍
رؤيتنا هي إثراء المحتوى التقني العربي وجعل التعلم من خلال القراءة أمتع، وذلك من خلال إثراء المحتوى التقني باللغة العربية وتشجيع المبرمجين على القراءة بلغتهم الأم والتفكير أيضًا بها.
لذلك اتحنا الفرصة أمام الجميع للمساهمة ومساعدتنا في نشر واثراء المحتوى التقني باللغة العربية, من خلال كتابة المقالات التقنية في مختلف مجالات هندسة البرمجيات.
وجب التنويه أنه لن يتم نشر كافة الأعمال التي تصل إلينا، وإنما سيتم الانتقاء منها ما يحقق هدفنا بإثراء المحتوى التقني العربي، ولذلك قد تُطلب بعض التعديلات من الكاتب قبل النشر.
لمعرفة المزيد بخصوص :
💬 المعايير العامة لكتابة ونشر المقالات
⚡️ كيفية الإرسال
🔥 التزامات اقرأ-تِك تجاه الكتاب
يمكنكم قراءة كافة التفاصيل من هنا 👇