مقالات عملية مرتبة حسب المجال والمستوى، اختر المجال المناسب واقرأ من مستوى مبتدئ إلى محترف.
لو الكود بتاعك بيمرر UserId مكان OrderId والـ TypeScript ساكت، السبب مش في الكومبايلر — انت بتعتمد على structural typing في حالة محتاجة nominal. Branded Types بـ 6 أسطر ترفض الخطأ compile-time بصفر تكلفة runtime. مقال للمحترف بمثال مفاتيح الفندق الملوّنة، تعريف من TypeScript Handbook، كود شغّال على TS 5.4، أرقام مقاسة من audit على 180K سطر (21 موقع غلط في 48 ساعة)، benchmark على Node 22 يثبت 0% overhead، 4 trade-offs، ومتى التطبيق مش مبرّر.
لو زرار filter على dashboard بتاعك بياخد 4 ثواني والمستخدم خلالها مش قادر يعمل scroll ولا يدوس على حاجة، المشكلة مش في حجم البيانات. المتصفح كله شغّال بـ thread واحد والـ JavaScript بياكله. Web Workers بـ 8 سطور بيشيلوا الحساب لـ thread جنبي والواجهة تفضل live. مقال للمتوسط بمثال المطعم للمبتدئ، تعريف علمي من WHATWG، كود شغّال على Chrome 122، أرقام مقاسة (4.1 ثانية تجمّد → 24ms INP)، 4 trade-offs، ومتى لا تستخدم Web Worker أصلاً.
لو محتاج تبني محرّر مستندات تعاوني زي Google Docs أو Figma، الـ Operational Transformation اللي بتشتغل في Google Docs محتاجة سيرفر مركزي يرتّب كل تعديل. CRDTs بـ Yjs بتدمج تعديلات 50 مستخدم محليًا بدون سيرفر مركزي، بـ convergence رياضية مضمونة وحجم state أصغر 8x من نسخة OT المماثلة. مقال للمحترف بمثال مفكرة الفريق للمبتدئ، تعريف علمي من ورقة Shapiro 2011 و Yjs CRDT spec، كود JavaScript شغّال على Yjs 13.6 مع y-websocket في 40 سطر، أرقام مقاسة من Linear وFigma وJupyterLab، 4 trade-offs حقيقية، وحالات OT لسه أفضل من CRDT.
لو console.log(x) قبل var x = 5 بيرجّع undefined بدون خطأ، ولو غيّرت var لـ let الكود بيقع بـ ReferenceError. الفرق ده اسمه Hoisting. مقال للمبتدئ بمثال حقيبة السفر، تعريف علمي من ECMA-262، كود JavaScript شغّال على Node 22 يوضّح الفرق بين var و let و const و Function Declaration vs Expression، أرقام من فريق حقيقي قلّل bugs الـ scope 41%، 4 trade-offs، ومتى لا تركّز على Hoisting أصلاً.
لو فاكر إن setTimeout(0) معناه "نفّذ دلوقتي"، فأنت بتحجز للكود تذكرة في طابور تاني خالص. شرح للمتوسط للـ Event Loop في Node.js 22 بمثال طابور المطار للمبتدئ، تعريف علمي من توثيق libuv، كود قابل للنسخ يقيس الفرق بين setTimeout و setImmediate و queueMicrotask، أرقام مقاسة (4.1ms vs 0.04ms)، 4 trade-offs، ومتى لا تستعمل setImmediate أصلاً.
لو كتبت 0.1 + 0.2 في JavaScript أو Python أو Java وطلعلك 0.30000000000000004، ده مش bug في اللغة. ده سلوك معتمد في معيار IEEE 754 من 1985 وموجود في كل المعالجات. مقال للمبتدئ بمثال قسمة الكيكة، شرح علمي للـ binary representation، ثلاث طرق عملية للتعامل (Decimal، tolerance، integer cents)، حالة إنتاج خسرت 120 جنيه شهرياً، 4 trade-offs حقيقية، ومتى تتجاهل الموضوع أصلاً.
لو شفت كود فيه دالة جوّاها بتنادي نفس الدالة، أول إحساس بييجيلك إن ده هيدخل في لوب أبدي. لكن دي تقنية اسمها Recursion، وبتحلّ مشاكل زي ترافيرس الشجرة وقراءة فولدرات متداخلة والتعامل مع JSON معقّد في 8 سطور بدل 50. مقال للمبتدئ بمثال دمى ماتريوشكا، تعريف علمي للـ call stack من توثيق ECMAScript و Python، كود JavaScript و Python شغّال، أرقام مقاسة من V8 (حد الـ stack 10,416 frame)، 4 trade-offs حقيقية، ومتى تستخدم لوب عادي بدلاً منها.
لو سكربت Node.js عندك بيقرأ ملف 200MB ويعالجه ويكتبه على S3 وبياكل 4.2GB ذاكرة قبل ما يقع، المشكلة مش في الحجم. الـ Readable بيقرأ بـ 480MB/s والـ Writable بيكتب بـ 22MB/s، الفرق بيتراكم في buffer. مقال للمحترف بمثال عامل المخزن للمبتدئ، تعريف علمي للـ highWaterMark والـ drain من توثيق Node.js، كود stream.pipeline() شغّال على Node 22، أرقام مقاسة (98% توفير ذاكرة)، 4 trade-offs، ومتى لا تستخدمه أصلاً.
لو dashboard بتاعك بيجيب 10 خدمات في نفس اللحظة وأول ما خدمة واحدة تفشل بتلاقي الـ 9 الباقيين راحوا في الهوا، المشكلة مش في الـ network — المشكلة إنك بتستخدم Promise.all في موقف كان لازم يبقى Promise.allSettled. مقال للمتوسط بمثال سعاة البريد للمبتدئ، تعريف علمي من ECMA-262، كود JavaScript شغّال على Node 22، أرقام إنتاج (نسبة الفشل اتغيرت من 4.2% لـ 0.08%)، 4 trade-offs، وحالات لا تستخدم Promise.allSettled فيها.