يحتوي مسار Exercism المكتمل على نوعين من التمارين: تمارين المفاهيم والتمارين التدريبية. وهما نوعان مختلفان اختلافًا جوهريًا ويكمّل أحدهما الآخر بشكل جيد.
تمارين المفاهيم في أي مسار هي تمارين مصممة لتعليم مفاهيم محددة تشكّل أساس لغة برمجة معينة. وتشكّل هذه المفاهيم مقررًا.
يحتوي هذا التوثيق على إشارات ونصائح حول كيفية تصميم مقرر لمسارك بنجاح.
الهدف النهائي للمقرر هو أن يصل الطلاب إلى الارتياح في قراءة وكتابة كود اصطلاحي في اللغة الهدف.
كل تمرين من تمارين المفاهيم مركّز تركيزًا شديدًا. إنه خطوة صغيرة وموجّهة بدقة تنقل الطالب نحو فهم جانب من اللغة. وهو لا يبني إلا على مفاهيم قُدّمت سابقًا.
بحل التمرين، يبدأ الطالب عملية التعرّف على المفهوم. والفهم يأتي أساسًا من الممارسة، وبدرجة أقل بكثير من الشروح. المحتوى الشرحي موجود ليقدّم للطالب الأفكار التي يحتاجها لحل التمرين (ومن هنا اختيار اسم الملف "introduction.md").
نريد أن نتيح للطلاب البدء في كتابة الكود فورًا، دون الحاجة إلى فهم كل شيء مقدمًا. ولتحقيق ذلك نتغاضى عن التفاصيل ونترك أشياء كثيرة دون شرح. نبسّط الأمور ونوفّر هياكل كود جاهزة حيثما أمكن. وهذا يقلّل العبء المعرفي للبداية ويمنح الوقت والمساحة ليترسّخ الفهم. وباتّباع هذا النهج لا نقول إن الطالب لا يحتاج إلى معرفة هذه الأمور، بل نقول إنه لا يحتاج إلى معرفتها بعد.
غالبًا ما تحتاج التمارين الأولى إلى احتواء كود غير اصطلاحي. وذلك لأن معظم اللغة يكون لا يزال مجهولًا للطالب في البداية، ولم تُقدَّم معظم المفاهيم بعد. وبإتاحة كود غير اصطلاحي في التمارين الأولى، يستطيع الطلاب اتخاذ خطوات صغيرة كثيرة في أرض مألوفة بدلًا من خطوات كبيرة قليلة في أرض غير مألوفة. والنتيجة أنهم يصلون إلى مرحلة الكود الاصطلاحي بسرعة أكبر وبعقبات أقل.
تُنظَّم التمارين على هيئة شجرة، في قمتها تمرين تمهيدي يكون نقطة البداية. وتعلّم التمارين اللاحقة مفاهيم تعتمد على فهم مفاهيم دُرست قبلها.
قد يستحق الأمر النظر في كيفية بناء مسارات لغات أخرى لتمارين مفاهيمها. يمكنك أن تجد أمثلة على تمارين المفاهيم من مسارات لغات أخرى هنا.
ومع ذلك، إذا قررت استخدام تمارين أخرى كنقطة انطلاق لتمارينك، فاحرص على أن يكون التمرين الناتج عن المفهوم كما هو موجود في لغتك. فأحيانًا تختلف المفاهيم اختلافًا طفيفًا، وأحيانًا اختلافًا جذريًا. وأحيانًا لا توجد المفاهيم في لغات أخرى أصلًا.
ينبغي أن يمثّل المقرر، وبالتالي شجرة المفاهيم، المفاهيم الموجودة في هذه اللغة بعينها.
لا تُدرج مفاهيم لمجرد أن مسارات أخرى تُدرجها.
في بعض الحالات قد يغريك إدراج مفهوم لأن الناس كثيرًا ما يضطرون إلى الالتفاف حوله باستخدام مفاهيم موجودة بالفعل. بدلًا من ذلك، قدّم المفهوم الذي تستعمله اللغة فعلًا، وفكّر في إضافة تمرين يشرح كيفية استخدامه في هذا النوع من الحالات.
مثال: لا توجد تعدادات في Go. وبدلًا من ذلك، تُدخل شجرة مفاهيم Go الثوابت، وتعلّم كيفية استخدام الثوابت في نوع الحالات التي قد تستخدم فيها التعدادات في لغات أخرى.
لا تتردّد في طلب المساعدة. من الأفضل أن تسأل منذ البداية أو أثناء العمل على تمرين، بدلًا من أن تناقش الأمر أثناء مراجعة الكود.
على GitHub يمكنك الإشارة إلى الفريق @exercism/learning-mode. وفي منتدى Exercism افتح مشكلة في فئة Exercism Support.
علّمتنا خبرتنا أن أكثر الطرق عمليةً لتطوير مقرر هي تنمية شجرة المفاهيم على نحو عضوي، بدءًا من أبسط المفاهيم. لا يلزمنا تصميم كل شيء مقدمًا، بل من المفيد عمومًا ألا نفكر بعيدًا في المستقبل.
نبدأ بالحد الأدنى من المفاهيم، تلك الأكثر أساسية لكتابة أي شيء في اللغة. ونحاول أيضًا أن نبدأ بالمفاهيم الأكثر ألفة للمطوّر العادي. الألفة أمر جيد. الألفة لا تربك.
تذكّر أنه مع أن الهدف النهائي هو كتابة كود اصطلاحي، فإن حجارة العبور إليه ليست دائمًا اصطلاحية. واستخدام ما هو مألوف، حتى إن لم يكن مثالًا جيدًا على الكود في تلك اللغة، يساعد على نقل الطالب بسرعة أكبر نحو هدف الكود الأكثر شيوعًا في اللغة.
بدلًا من محاولة رسم شجرة المفاهيم بأكملها مقدمًا، ابدأ بالتمرين الأول فقط. هدف التمرين الأول هو أن يتيح للطالب بدء التعلّم بأقل قدر ممكن من العقبات. فهو يخطو الخطوة الأولى نحو التعرّف على شكل الكود في هذه اللغة. قد يكتب قطعة صغيرة من الكود، أو ربما يضيف بضعة أسطر إلى هيكل جاهز لإكمال التمرين. لقد حلّ الطلاب بالفعل تمرين "Hello, World!" للوصول إلى هذا التمرين. لكنهم في "Hello, World!" يغيّرون الصياغة فحسب. فقد تكون كل تراكيب اللغة لا تزال غير مألوفة لهم. حاول أن تُحسّن من أجل إنجاز سريع وأن تجعل الطلاب على ألفة كافية بأساسيات التركيب حتى يواصلوا بثقة.
اقرأ المزيد عن تطوير التمرين الأول.
ينبغي أن يفتح التمرين الأول مجموعة من التمارين التي تقدّم مفاهيم أساسية. وستكون هذه أشياء مثل الأنواع الأولية أو الأساسية وعمليات بسيطة على تلك الأنواع.
اقرأ المزيد عن تطوير التمارين التالية.
هنا غالبًا ما يبدأ الأمر يصبح مثيرًا للاهتمام. فهناك الكثير مما يمكنك تقديمه في هذه المرحلة. فكيف تقرر المفاهيم التي تتناولها بعد ذلك؟
لا يهم الأمر كثيرًا. فما دمت تبدأ من نقطة تبدو معقولة، فسيكون كل شيء على ما يرام.
اقرأ المزيد عما نعنيه بـ"معقول" في سياق توسيع شجرة المفاهيم.
تمرين المفاهيم الجيد مركّز للغاية، ويعلّم مفهومًا واحدًا فقط في الحالة المثالية. ويكون عادةً هناك أسلوب واحد متوقع لحله. وهذا على النقيض من التمارين التدريبية، فهي مفتوحة النهاية وتدعو إلى الاستكشاف.
تمرين المفاهيم الجيد يكون عادةً تمرينًا تدريبيًا سيئًا، والعكس صحيح. ولأن أهداف التمارين التدريبية وتمارين المفاهيم مختلفة تمامًا، فإننا لا نأخذ تمارين تدريبية ونحوّلها إلى تمارين مفاهيم. نكتب جميع تمارين المفاهيم من الصفر أو نبنيها على قصص صُمّمت صراحةً لغرض تعليم مفاهيم بسيطة.
أحيانًا ستشعر أنك في طريق مسدود: المفهوم أ يتطلب فهم المفهوم ب، والمفهوم ب يتطلب فهم المفهوم أ.
في هذه الحالة بسّط الأمر. تغاضَ عن بعض التعقيد في أحدهما حتى تجعل الطلاب على ألفة بالآخر. لا بأس إطلاقًا في أن تقول إن شيئًا ما سيُقدَّم بعمق أكبر لاحقًا، وإن الطالب يحتاج الآن إلى فهم هذه الجزئية وحدها.
تُفهم المفاهيم بعمق أكبر على مراحل ومع الوقت.
دائمًا ما يكون لتمرين المفهوم قصة.
إذا كنت تنسخ تمرينًا من مسار آخر، فسيكون للتمرين قصة بالفعل. وفي هذه الحالة، فأنت جاهز تمامًا.
لمعرفة ما إذا كانت هناك قصص جاهزة يمكنك استخدامها أو تمارين يمكنك نسخها، اطّلع على قائمة القصص.
إذا كان لديك مفهوم بلا قصة، فنوصي بكتابة مثال كود صغير وبسيط يستخدم المفهوم الذي تقدّمه. ثم استنبط قصة تناسب الكود بالهندسة العكسية. واجعل القصة بسيطة إلى أبعد حد. لا يلزم أن تكون قصة أدبية جيدة. ولا تحتاج إلى حبكة قوية أو تطوّر شخصيات. وقد لا تتجاوز بضعة أسطر.
تبادل الأفكار للقصص مع فريق Exercism. فلدينا خبرة كبيرة في ابتكار قصص مناسبة.
وبعد أن تحصل على قصة، ستحتاج على الأرجح إلى تعديل الكود قليلًا ليناسب القصة.
يتضمن العمل على المقرر نشاطين منفصلين لكن متشابكين:
وجدنا أن إشراك المجتمع الأوسع في تنفيذ التمارين ممتع ومثرٍ في آن واحد. أما تصميم المقرر نفسه، فمن الأسهل التعامل معه بفريق صغير من المساهمين المنخرطين جميعًا في بناء فهم للمقرر الكامل بكل تفاصيله الدقيقة.
ومع ذلك، نوصي بأن ينفّذ فريق تصميم المقرر المفاهيم الخمسة أو الستة الأولى أولًا، قبل فتح الباب لمساهمات المجتمع. وهذا يساعد على ضمان أن يفهم أعضاء الفريق الأساسي لمصممي المقرر العملية بأنفسهم قبل أن يضطروا إلى مراجعة طلبات السحب من أفراد المجتمع الأوسع.
كما أن إنشاء المشكلات لهذه المفاهيم الأعلى مستوى أسهل، ويكون العمل عليها أكثر متعة لأفراد المجتمع، لأن القيود التي تقلقهم أقل.
لم نكتشف بعد أفضل طريقة لإنشاء المشكلات الخاصة بإنشاء تمارين المفاهيم.
في بعض المسارات جرّبنا إنشاء تمارين منفصلة للمفهوم نفسه وللتمرين. وفي مسارات أخرى جرّبنا إنشاء مشكلات تتضمن قائمة تحقق للعمل عليها. وعمومًا، نرى أن هذا لا يزال مرهبًا أكثر من اللازم، ونودّ إيجاد طريقة أفضل.
رجاءً تحدّث معنا عن العملية حين تبدأ في إنشاء المشكلات، وسنبذل قصارى جهدنا للمساعدة في تحديد كيفية المضي قدمًا.
سنحدّث التوثيق كلما تعلّمنا طرقًا أفضل للتعامل مع هذا.