مقالات عملية مرتبة حسب المجال والمستوى، اختر المجال المناسب واقرأ من مستوى مبتدئ إلى محترف.
لو Redis cluster بتاعك بـ 4 سيرفرات وضفت سيرفر خامس بـ hash(key) % N، 80% من المفاتيح بتنتقل والـ cache بيبرد فجأة. Consistent Hashing بينزّل النسبة دي لأقل من 2%. مقال للمستوى المتوسط بمثال الفندق للمبتدئ، تعريف علمي من ورقة Karger 1997 (MIT)، كود Python في 50 سطر مع Virtual Nodes، أرقام مقاسة على 10 مليون مفتاح، 4 trade-offs حقيقية، وحالات لا تستخدمها فيها مع المصادر الرسمية.
لو الـ cache cluster بتاعك بيقع كل ما تضيف سيرفر جديد لأن hash(key) % N بيغيّر مكان كل المفاتيح، Consistent Hashing بيخلّي 2% بس من المفاتيح تتنقل بدل 98%. شرح للمحترف بمثال موزّع البريد للمبتدئ، تعريف علمي دقيق من ورقة Karger 1997، كود Python شغّال يقيس الفرق فعليًا، فكرة virtual nodes ومتى تحتاج 150 vnode لكل سيرفر، أرقام مقاسة، trade-offs، والحالات اللي ما تستخدمهوش فيها.
لو دالة recursive عندك في Node بتكسر السيرفر مع inputs كبيرة وبيرجع لك Maximum call stack size exceeded، المشكلة مش في الكود — المشكلة في حدود الـ Call Stack نفسه. شرح للمبتدئ بمثال طاقم الأطباق، تعريف علمي دقيق لـ V8 frames، كود JavaScript شغّال يقيس الحد الأقصى على Node 22، 3 حلول عملية (iteration، trampoline، --stack-size)، أرقام مقاسة فعلياً، trade-offs، وحالات لا تستخدم recursion فيها.
لو الكود بتاعك بيجيب بيانات من 50 API بـ requests في loop، هتقعد تستنى 18 ثانية مجموعها 99% انتظار شبكة. async/await بسطرين بينزّل الزمن لـ 0.7 ثانية على نفس الـ core. مقال للمحترف بمثال جارسون الكافيه للمبتدئ، تعريف علمي للـ event loop وعلاقته بالـ GIL، كود httpx + asyncio.gather شغّال على Python 3.12، أرقام مقاسة (35x تحسّن، استهلاك CPU أقل من 4%)، الفخ الكلاسيكي في خلط sync مع async، و 3 حالات لازم تستخدم فيها multiprocessing بدل asyncio.
لو كتبت console.log(x) قبل ما تعرّف x وفوجئت إن المتصفح طبع undefined بدل ما يكسر، ده مش غلط في Node ولا الـ browser. ده سلوك اسمه Hoisting. شرح للمبتدئ بمثال دفتر الفهرس، تعريف علمي دقيق لـ Execution Context و Variable Environment، الفرق العملي بين var و let و const، فخ function expression، سيناريو bug حقيقي وفّر 3 ساعات debugging، trade-offs، ومتى ما يهمكش الموضوع.
لو بتكتب prog في صندوق البحث وفي 0.4 ms بتظهرلك 10 اقتراحات بدأ كلهم بـ prog، ده مش لأن السيرفر بيمر على كل الكلمات. ده هيكل بيانات اسمه Trie. مقال للمبتدئ بمثال القاموس، تعريف علمي دقيق لـ Prefix Tree، كود Python 3.12 شغّال على 100 ألف كلمة من NLTK، أرقام مقاسة بـ timeit (78.40 ms مقابل 0.41 ms)، 3 استخدامات حقيقية (autocomplete, spell checker, IP routing)، الفخ الكلاسيكي، trade-offs الذاكرة، ومتى لا تستخدمه فيها.
لو حاولت تقرا ملف log حجمه 10 جيجا بـ readlines() السيرفر بياكل 10 جيجا رام في 4 ثواني وبيقع بـ MemoryError. Generators بكلمة واحدة yield بتخلّيك تقرا نفس الملف بـ 8 ميجا رام بس. مقال للمبتدئ بمثال المخبز، تعريف علمي من PEP 255، كود Python 3.12 شغّال يقرا ملف 10GB، أرقام مقاسة بـ tracemalloc، 3 استخدامات إنتاج (logs، API streaming، pipelines)، الفخ الكلاسيكي للاستهلاك مرتين، trade-offs، وحالات لا تستخدم generators فيها.
لو الـ API بتاعك بيرجّع 20 صف من جدول 5 ملايين باستخدام OFFSET 100000، الـ query بياخد 1.8 ثانية. Cursor pagination بينزّل ده لـ 12 مللي ثانية ثابتة. مقال للمستوى المتوسط بمثال الكتاب والـ bookmark للمبتدئ، تعريف علمي دقيق لـ keyset pagination، كود PostgreSQL 16 شغّال على index مركّب (created_at, id)، أرقام مقاسة فعلياً على 5 ملايين صف، trade-offs واضحة، وحالات لا تستخدمه فيها مع المصادر الرسمية.
لو سيرفر Python بتاعك بيقع OOM لمّا بتفتح ملف لوج 50GB، المشكلة مش في الـ RAM. سطر واحد اسمه yield بينزّل استهلاك الذاكرة من 50GB لـ 8MB بدون ما يمسّ السرعة. شرح للمبتدئ بمثال الشيف، تعريف علمي من PEP 255، كود Python 3.12 شغّال، أرقام مقاسة على ملف 52GB، أخطاء شائعة، trade-offs، وحالات لا تستخدمها فيها.