في الفترة الأخيرة زاد اهتمام الطلاب والموظفين والجامعيين باختبارات القدرات، ومع كثرة المصادر والأسئلة لاحظت مشكلة تتكرر عند كثير منهم:
نحل أسئلة كثيرة، لكن ما نعرف مستوانا الحقيقي ولا نحدد نقاط الضعف بشكل واضح.
من هنا بدأت فكرة برمجة اختبار بسيط يقيس المستوى بشكل مباشر، ويعطي نتيجة واضحة بعد الحل.

المشكلة التي دفعتني للفكرة
أثناء المراجعة والتدريب، لاحظت أن كثير من الاختبارات المتوفرة:
- إما طويلة وتستهلك وقتًا كبيرًا
- أو لا تعطي نتيجة واضحة ومفيدة
- أو تتطلب تسجيلًا معقّدًا وتجربة استخدام متعبة
وهذا يخلي الطالب يؤجل قياس مستواه، ويبدأ مذاكرة بدون ما يعرف نقطة البداية الصحيحة.
فكرة اختبار القدرات
الفكرة كانت واضحة:
اختبار قصير، واضح، ونتيجته فورية
بحيث الطالب خلال وقت بسيط يقدر:
- يقيس مستواه الحالي
- يعرف إذا يحتاج مراجعة الأساسيات
- أو ينتقل للتدريب المكثف بثقة
لماذا اخترت 25 سؤال؟
اخترت 25 سؤال لأنه عدد متوازن:
- ما يطوّل على الطالب
ونفس كميه أسئلة الاختبار الحقيقي
- وفي نفس الوقت يعطي مؤشر جيد عن المستوى
- ويسمح بتنوع مناسب في الأسئلة
الهدف من الاختبار هنا هو قياس عام للمستوى، وليس استبدال المذاكرة أو تقديم اختبار شامل طويل.
لماذا استخدمت لغة Python؟
تم تنفيذ فكرة الاختبار باستخدام لغة Python لأنها مناسبة جدًا لبناء منطق الاختبارات والتحليل، وتساعد على تطوير الفكرة بسرعة مع قابلية التوسّع لاحقًا.
التركيز كان على:
- دقة احتساب النتيجة
- وضوح التصنيف
- تجربة استخدام سلسة للطالب
آلية التنفيذ بشكل مبسّط
بشكل عام، طريقة العمل تعتمد على:
- استقبال إجابات الطالب
- مطابقتها مع الإجابات الصحيحة
- تحليل الأداء بشكل عام وبحسب الأقسام
- إخراج نتيجة واضحة + توصيات تساعد الطالب يعرف وش يركز عليه
عيّنة كود توضيحية
from dataclasses import dataclass
from typing import Dict, List, Tuple
from statistics import mean
@dataclass(frozen=True)
class QuestionMeta:
topic: str # verbal / quant / logic ...
difficulty: int # 1..5
@dataclass
class EvaluationResult:
total: int
correct: int
accuracy: float
level: str
topic_breakdown: Dict[str, Dict[str, float]]
recommendations: List[str]
LEVELS: List[Tuple[float, str]] = [
(0.85, "مستوى متقدم"),
(0.60, "مستوى متوسط"),
(0.00, "يحتاج مراجعة"),
]
def _pick_level(accuracy: float) -> str:
for threshold, label in LEVELS:
if accuracy >= threshold:
return label
return "يحتاج مراجعة"
def evaluate_attempt(
answers: Dict[int, str],
answer_key: Dict[int, str],
meta: Dict[int, QuestionMeta],
total_questions: int = 25,
) -> EvaluationResult:
# 1) احتساب الصح والخطأ
correct_ids = [qid for qid, a in answers.items() if answer_key.get(qid) == a]
correct = len(correct_ids)
total = total_questions
accuracy = (correct / total) if total else 0.0
# 2) تحليل أداء الأقسام (Topic) + متوسط الصعوبة
per_topic: Dict[str, List[bool]] = {}
per_topic_diff: Dict[str, List[int]] = {}
for qid, user_a in answers.items():
m = meta.get(qid, QuestionMeta(topic="general", difficulty=3))
is_correct = (answer_key.get(qid) == user_a)
per_topic.setdefault(m.topic, []).append(is_correct)
per_topic_diff.setdefault(m.topic, []).append(m.difficulty)
topic_breakdown: Dict[str, Dict[str, float]] = {}
for topic, results in per_topic.items():
acc = (sum(results) / len(results)) if results else 0.0
avg_diff = mean(per_topic_diff.get(topic, [3]))
topic_breakdown[topic] = {
"accuracy": round(acc, 3),
"avg_difficulty": round(avg_diff, 2),
}
# 3) توصيات مبنية على أضعف الأقسام
weakest = sorted(topic_breakdown.items(), key=lambda x: x[1]["accuracy"])[:2]
recommendations = []
for topic, stats in weakest:
if stats["accuracy"] < 0.5:
recommendations.append(
f"ركز على قسم ({topic}) بمراجعة الأساسيات ثم حل 30–50 سؤال تدريجيًا."
)
else:
recommendations.append(
f"قسم ({topic}) جيد، ارفع مستواه بالتدريب على أسئلة أصعب وقياس الوقت."
)
# 4) تحديد المستوى النهائي
level = _pick_level(accuracy)
return EvaluationResult(
total=total,
correct=correct,
accuracy=round(accuracy, 3),
level=level,
topic_breakdown=topic_breakdown,
recommendations=recommendations,
)
هذه العيّنة توضّح الفكرة العامة:
الاختبار لا يطلع “درجة فقط”، بل يحاول يعطي الطالب تصوّر أوضح عن الأداء حسب الأقسام، مع توصيات تساعده يحدد وش يراجع.
الهدف من الاختبار
هذا الاختبار:
- لا يضمن درجة معيّنة
- ولا يغني عن المذاكرة
لكنه يساعدك على:
- معرفة مستواك الحالي بسرعة
- تحديد نقطة البداية الصحيحة
- معرفة القسم اللي يحتاج تركيز أكبر
تطوير مستمر
بعد تجربة الاختبار بنفسي ومراجعته أكثر من مرة، بدأت تظهر أفكار لتطويره مثل:
- إضافة اختبارات أكثر تخصصًا
- تحسين التحليل والتوصيات
- توسيع تجربة المستخدم بشكل تدريجي
وأهم شيء: الاعتماد على ملاحظات الطلاب وتجاربهم لأنها الأكثر فائدة في التحسين.
جرّب اختبار القدرات
إذا تبي تقيس مستواك الحالي بشكل سريع، تقدر تدخل على صفحة الاختبار من هنا:
👇
وأي ملاحظة أو اقتراح منك بتكون مفيدة جدًا لتطوير التجربة.
ملاحظة أخيرة
حرصت أن يكون هذا المقال تعريفي بالفكرة والتجربة بشكل عام،
بدون الدخول في تفاصيل تقنية أو أمنية دقيقة،
لأن الهدف هو مشاركة التجربة والفائدة للجميع
تحياتي
💬 التعليقات
لا توجد تعليقات بعد.
🚫 يجب تسجيل الدخول لإضافة تعليق. دخول / تسجيل