مقالات عملية مرتبة حسب المجال والمستوى، اختر المجال المناسب واقرأ من مستوى مبتدئ إلى محترف.
لو شغّلت 8 threads في Python على CPU بـ 16 core وفوجئت إن الكود ماتسرّعش بل بطئ، السبب اسمه Global Interpreter Lock. مقال للمحترف بمثال الميكروفون الواحد للمبتدئ، تعريف علمي دقيق لـ CPython وbytecode evaluation، كود Python 3.12 شغّال يقيس الفرق بين threading و multiprocessing، أرقام مقاسة فعلياً، نظرة على PEP 703 وفكرة free-threaded Python، trade-offs واضحة، وحالات يبقى فيها threading منطقي رغم الـ GIL.
لو دالة Python واحدة محتاجة logging و retry و cache كل مرة بتشتغل، ومش عايز تلمس جسم الدالة، Decorators بتضيف الثلاثة في 3 سطور فوق التعريف. شرح متوسط بمثال علبة الهدية، تعريف علمي لـ first-class functions و closure، 3 ديكوريترز شغّالين على Python 3.12، أرقام مقاسة، فخ functools.wraps، trade-offs، وحالات لا تستخدمها فيها، مع مصادر رسمية.
لو dict في Python بيلاقي عميل من 50 مليون مفتاح في 180 نانو ثانية، ده مش سحر. ده هيكل اسمه Hash Map مبني على open addressing وperturbation في CPython 3.12. مقال للمستوى المتوسط بمثال خزانة المفاتيح للمبتدئ، تعريف علمي دقيق، كود شغّال يقيس النانو ثانية، أرقام collisions على 50M مفتاح، trade-offs الذاكرة، وحالات لا تستخدم dict فيها.
لو endpoint التسجيل بيعمل SELECT على جدول 10 مليون صف لكل request، الـ DB بياكل 8ms في كل مرة. Bloom Filter بينزّل ده لـ 50 ميكروثانية في 1.2MB ذاكرة بدون lookup للـ DB، مقابل false positive 1%. شرح للمستوى المتوسط بمثال دفتر المدرسة للمبتدئ، تعريف علمي دقيق من ورقة Burton Bloom 1970، رياضة k_optimal، كود Python 3.12 شغّال على mmh3 و bitarray، أرقام مقاسة فعليًا، نمط Bloom-قبل-DB، trade-offs الحذف، وحالات لا تستخدمه فيها.
لو عندك Array فيها مليون رقم وبتدوّر على زوج مجموعهم يساوي قيمة محددة، الكود التقليدي بـ nested loops بياخد 47 ثانية. Two-Pointer بيخلّيها 83 مللي ثانية بدون أي مكتبة. شرح للمبتدئ بمثال رف الكتب، تعريف علمي دقيق، كود Python 3.12 شغّال على Array مليون عنصر، أرقام مقاسة بـ timeit، 3 استخدامات حقيقية (Palindrome، Remove Duplicates، Container With Most Water)، trade-offs، وحالات لا تستخدمها فيها.
لو search box عندك بيرسل request جديد لكل حرف بيكتبه المستخدم، فا الـ 8 أحرف بتولّد 8 طلبات، والسيرفر بيشتغل بنسبة 80% فاضي. الحل سطر واحد اسمه Debounce. مقال للمبتدئ بمثال المصعد، تعريف علمي لـ Debounce و Throttle، كود JavaScript شغّال على Node 22 ومتصفح Chrome، أرقام مقاسة بـ performance.now، الفرق بين الاتنين بمواقف حقيقية، trade-offs، وحالات لا تستخدمهم فيها.
لو الـ API بتاعك بيتعرّض لـ 50 ألف طلب في الثانية ومحتاج تمنع زبون واحد من ابتلاع الموارد، Redis SETEX بيكلّفك 1.2 مللي ثانية لكل طلب من round-trip للشبكة. Token Bucket في الذاكرة بينزّل الزمن ده لـ 78 ميكروثانية. مقال للمحترف بمثال ماكينة الكافيه للمبتدئ، تعريف علمي دقيق، كود Python 3.12 شغّال مع threading.Lock، أرقام مقاسة بـ wrk، الفرق بين Token Bucket و Leaky Bucket و Sliding Window، trade-offs، وحالات لا تستخدمه فيها.
لو خدمة واحدة من 6 microservices بطّأت وفجأة تطبيقك كله بيرد في 8 ثواني بدل 200ms، المشكلة مش الخدمة. المشكلة إن تطبيقك مش عارف يقول "ما تكلمنيش عنها". Circuit Breaker بيحل ده ببنية state machine بثلاث حالات. مقال للمستوى المتوسط بمثال علبة الكهرباء للمبتدئ، تعريف علمي دقيق، كود Python شغّال على pybreaker، أرقام مقاسة من إنتاج 800 req/s، trade-offs، وحالات لا تستخدمه فيها.
لو سيرفرك Python بيخزن ملايين الـ instances وبتدفع في AWS فاتورة RAM ضخمة، سطر واحد اسمه __slots__ ممكن يقلل الذاكرة 40-60%. مقال للمحترف بمثال درج المكتب للمبتدئ، تعريف علمي دقيق لـ PyDictObject في CPython، كود Python 3.12 شغّال مع أرقام مقاسة بـ pympler، شرح كسر الـ inheritance الكلاسيكي، trade-offs، وحالات لا تستخدمه فيها.