نمذجة تقدّم المتعلّم: لماذا يفشل عمود «مكتمل» دائماً
كيف تبني نموذج بيانات يجيب عن «أين توقّف؟» و«ما نسبة إكماله؟» و«أين يتسرّب الناس؟» دون إعادة كتابة كل مرة.
يبدأ الجميع بحقل منطقي واحد: `completed`. ثم يُطلب استئناف المشاهدة من نفس الثانية، ونسبة إكمال دقيقة، وتقرير عن الدرس الذي يتوقّف عنده الناس. الحقل الواحد لا يجيب عن أي منها، ولا يمكن استرجاع ما لم تسجّله.
سجّل الأحداث، واشتقّ الحالة
بدل تخزين النتيجة، خزّن ما حدث: بدأ الدرس، وصل إلى الثانية ١٤٠، أنهى الدرس، أعاد المشاهدة. الحالة الحالية تُشتقّ من الأحداث، لكن التحليل والأسئلة المستقبلية تحتاج الأحداث نفسها. لا يمكنك اشتقاق حدث من حالة، والعكس ممكن دائماً.
ثلاثة مستويات لا مستوى واحد
- حدث خام: نقطة زمنية بتفاصيلها، يُكتب كثيراً ويُقرأ نادراً.
- حالة مجمّعة لكل متدرّب ودرس: تُقرأ في كل تحميل صفحة، فيجب أن تكون سريعة.
- ملخّص لكل متدرّب ودورة: نسبة الإكمال وآخر نشاط، لواجهات القوائم والتقارير.
حاول أن تخدم الثلاثة من جدول واحد وستدفع الثمن مرتين: استعلامات بطيئة في الواجهة، وتحليلات مستحيلة.
الاستئناف يحتاج دقة مختلفة
تسجيل موضع المشاهدة كل ثانية يغرق قاعدتك بلا فائدة. سجّل كل خمس إلى عشر ثوانٍ، وعند الإيقاف والخروج، واكتب آخر موضع فقط. الفرق بين الاستئناف عند الثانية ١٤٠ و١٤٥ لا يلاحظه أحد؛ الفرق في حجم الكتابة هائل.
دقّة أعلى مما يلاحظه المستخدم هي تكلفة صافية.
عرّف «الإكمال» صراحةً
هل يكتمل الدرس بمشاهدة ٩٠٪ من الفيديو؟ بالضغط على «إنهاء»؟ باجتياز اختبار؟ هذا قرار منتج لا قرار تقني، ويجب أن يكون قابلاً للضبط لكل دورة، لأنه يحدّد متى تُصدر الشهادة — وهذا ما سيُختلف عليه مع أول عميل.
التقدّم مصدر التحليلات
النموذج الصحيح يعطيك مجاناً ما يحتاجه صاحب المحتوى: أين يتوقّف الناس، وأي درس يُعاد أكثر من غيره، ومتوسط الزمن حتى الإكمال. هذه أسئلة منتج تُجاب من بيانات موجودة أصلاً إن صمّمتها بشكل صحيح.
الأساس النظري لتخزين الأحداث واشتقاق الحالة منها شرحه مارتن فاولر في Event Sourcing. وإن كنت تريد مفردات جاهزة لأحداث التعلّم بدل اختراع أسماء، فمواصفة xAPI عرّفت هذا المجال بالتحديد.
وهذا النموذج من أصعب ما يُعاد تصميمه لاحقاً لأن البيانات التي لم تُسجَّل لا تُستعاد. راجعه معنا مبكراً.
أسئلة شائعة
ألا يكبر جدول الأحداث بسرعة؟
نعم، فاجعل له سياسة عمر: احتفظ بالخام لأشهر، وبالمجمّع دائماً. التجميع يحفظ القيمة التحليلية بجزء من الحجم.
هل أستخدم event sourcing كاملاً؟
غالباً لا. سجّل الأحداث واحتفظ بالحالة المشتقة مادّياً؛ إعادة البناء الكامل من الأحداث في كل قراءة تعقيد لا تحتاجه.
كيف أتعامل مع تغيير محتوى الدورة؟
اربط التقدّم بمعرّف ثابت للدرس لا بترتيبه، وقرّر صراحةً هل إضافة درس تُنقص نسبة الإكمال أم لا.