البرمجة بالعربي
مقالات عملية مرتبة حسب المجال والمستوى، اختر المجال المناسب واقرأ من مستوى مبتدئ إلى محترف.
Struct Padding: ليه بنيتك بتاكل ذاكرة أكتر من مجموع حقولها
struct من 14 بايت بيانات بياخد 24 بايت فعليًا بسبب الحشو (padding). المقال للمحترفين يشرح المحاذاة بمثال رف الكتب، كود C يطبع sizeof وoffsetof، وإزاي إعادة ترتيب الحقول تنازليًا توفّر 33% ذاكرة و800 ميجا في مصفوفة 100 مليون عنصر، مع أثر الكاش، trade-offs، ومتى متشغلش بالك، ومصادر.
ReDoS: ليه تعبير نمطي واحد وقّف Cloudflare 27 دقيقة
نوع معين من التعابير النمطية بيتحول من بحث خطي إلى انفجار أُسّي، فمدخل 30 حرف بياكل المعالج ثواني أو دقائق. اتفرّج بنفسك بسكربت قياس، واعرف تصلحه بإعادة الصياغة و RE2 قبل ما يوقّع سيرفرك.
Struct Padding للمحترف: ليه الـ struct بتاخد 24 بايت وانت حاطط 17 بايت بس
لو عندك مصفوفة من 10 مليون struct بتاكل 240 ميجا، إعادة ترتيب الحقول بتنزّلها لـ 160 ميجا من غير ما تشيل ولا حقل. مقال للمحترف يشرح Struct Padding بمثال صناديق الرف للمبتدئ، قاعدة المحاذاة علميًا، كود Go شغّال بـ unsafe.Sizeof (24 بايت → 16 بايت، توفير 33%)، أداة fieldalignment، trade-offs، ومتى متشغلش بالك. مصادر من توثيق Go وEric Raymond وWikipedia.
Deadlock و Lock Ordering للمحترف: ليه تحويل فلوس بين حسابين بيجمّد خدمتك للأبد
خيطان ينفّذان تحويلين متعاكسين بين نفس الحسابين فيتجمّد كلاهما للأبد. السبب حلقة انتظار دائرية، والحل سطر ترتيب واحد. مقال للمحترف بشروط Coffman الأربعة، كود Go و PostgreSQL شغّال، أرقام مقاسة (p99 من 4,200ms لـ 38ms)، trade-offs، ومتى Lock Ordering مش الحل.
Escape Analysis في Go للمحترف: ليه المتغير بيهرب للـ Heap ويبطّئ كودك
لو خدمة Go عندك بتعمل allocations أكتر من اللازم والـ GC بياكل CPU، المشكلة غالبًا إن متغيرات بتهرب للـ Heap من غير ما تقصد. مقال للمحترف يشرح Escape Analysis بمثال المكتب للمبتدئ، تعريف من توثيق Go الرسمي، أمر go build -gcflags=-m لكشف الهروب، benchmark مقاس (1.2ns/0 allocs على الـ Stack مقابل ~25ns/1 alloc على الـ Heap، فرق ~20×)، 4 أسباب شائعة للهروب، trade-offs، ومتى متشغلش بالك.
Consistent Hashing للمحترف: ليه إضافة سيرفر واحد بيوقّع 80% من الكاش
لو عندك Cache موزّع على 4 سيرفرات بـ hash(key) % N، إضافة سيرفر خامس بتعيد توزيع ~80% من المفاتيح وتولّد cache miss storm. Consistent Hashing بينزّل النسبة لـ 1/N (حوالي 20%) بكود Python شغّال، أرقام مقاسة، Virtual Nodes، trade-offs، ومتى متستخدمهوش.
Goroutines Pipelines في Go للمحترف: عالج 1.4 مليون Event/ثانية بدون Leaks
لو خدمة log ingestion بتاعتك بـ goroutines بتاكل 92% CPU وذاكرتها بتنمو 280MB كل ساعة لحد ما تقع، المشكلة مش في Go runtime — فيه goroutines مش بتموت أبداً. Pipeline Pattern بـ context cancellation و buffered channels بيخلّيك تعالج 1.4 مليون event/ثانية على 8 cores، بدون leaks، مع graceful shutdown في 200ms. مقال للمحترف بتعريف من ورقة Hoare 1978 (CSP)، 3 patterns شغّالة على Go 1.23، أرقام مقاسة من ingestion service بـ 14 مليار event/شهر، و4 trade-offs خفية.
JavaScript Proxy للمحترف: راقب أي قراءة أو كتابة على object بـ 12 سطر
لو dashboard React عندك بيرجّع state غلط بعد 4 تعديلات ومحدّش عارف مين عدّله، Proxy في JavaScript بيخلّيك تمسك أي قراءة أو كتابة على object بدون لمس الكود الأصلي. مقال للمحترف بمثال السكرتير للمبتدئ، تعريف من ECMAScript 2024 Spec قسم 10.5، كود شغّال على Node.js 22 و Chrome 131، 4 استخدامات إنتاجية بأرقام مقاسة، 4 trade-offs خفية، ومتى Proxy يبقى اختيار غلط.
Event Loop في JavaScript للمحترف: ليه setTimeout(0) بيتأخر و Promise بتسبقه
كتبت setTimeout(fn, 0) ولقيت Promise.resolve().then() بتنفذ قبله؟ ده مش bug، ده Microtask Queue شغّال صح. مقال للمحترف بمثال طابور الكاشير للمبتدئ، تعريف من HTML Living Standard قسم 8.1.7، كود JavaScript شغّال على V8، أرقام مقاسة (Microtask 0.3ms vs setTimeout 4ms minimum)، 4 trade-offs خفية، ومتى الاعتماد على ترتيب الـ Event Loop يبقى اختيار غلط.