اقتراح تحسينات على التمارين

ما ينبغي مراعاته قبل اقتراح تحسينات على التمارين


إذن، لقد وجدت شيئًا تودّ تحسينه في أحد التمارين. أولًا، شكرًا لاهتمامك، وشكرًا لأنك خصّصت وقتًا لإخبارنا! 💙

عند تغيير تمرين ما، هناك أمور قليلة ينبغي أخذها في الحسبان، وهي تختلف قليلًا بين تمارين التعلّم (التي تعلّم موضوعات في المنهج) والتمارين التدريبية (والبقية). ونستعرض هذه الفروق أدناه.

لكن أولًا، هناك أمران عامّان ينبغي التفكير فيهما.

تغيير تمرين له تبعات

لتغيير تمرين ما تبعات كثيرة:

  1. قد تؤدي إضافة اختبارات جديدة إلى إفساد الحلول الموجودة. ويترتب على ذلك أن يصبح عمل آلاف الأشخاص قديمًا، وهو أمر محبط لهم إن لم تكن الاختبارات الإضافية تكشف أي Bug موجود.
  2. علينا إعادة اختبار عمل الجميع، وهذا له تكلفة بيئية ومالية.
  3. على مشرف واحد أو أكثر أن يخصّص وقتًا لمراجعة التغييرات، ما يعني أنه لن يتمكن من إجراء تحسينات أخرى على المسار خلال ذلك الوقت.

ولهذه الأسباب جميعًا، نحرص على ألّا نغيّر التمارين إلا حين تكون هناك فائدة قوية واضحة.

تجنّب الانجراف نحو الفوضى

ليس هدف مجموعات اختبارات التمارين أن تكون شاملة لكل الحالات الممكنة. تماريننا ليست برمجيات إنتاجية، ولم تُصمّم لمحاكاة حالات الاستخدام الواقعية. إنها مصمّمة كمسائل تدريبية مبسطة تساعدك على اكتساب الطلاقة في لغة برمجة. لذلك نتجنّب عن قصد محاولة تغطية كل حالة حدية، أو فرض قدر كبير من التحقق من صحة المدخلات، أو غير ذلك من هموم الواقع. إذا كان تحسينك المقترح يهدف إلى التقاط حالة حدية أو التحقق من صحة المدخلات، فمن غير المرجّح أن يُقبل، إلا إذا أحدث فرقًا جوهريًا في التمرين.

تمارين التعلّم

صُمّمت تمارين التعلّم بهدف واحد: تعليم المفاهيم. يُنظر في كل تغيير على تمرين أولًا وقبل كل شيء بناءً على ما إذا كان يحسّن تعليم المفاهيم.

تمارين التعلّم ليست مصمّمة (بشكل خاص) لتكون شاملة في اختباراتها. وقد تكون أيضًا في كثير من الأحيان متكلّفة أو غامضة بعض الشيء لتجنّب استخدام مفاهيم لم يتعلّمها الطالب بعد، أو حتى لا نُثقل على الطالب.

إذا كان تغييرك المقترح قد يصرف الانتباه عن تعلّم المفهوم، فسيُرفض على الأرجح. وإذا كان التغيير يسهّل التعلّم، فسيُدرس بجدية. وإذا كان في مكان ما بين ذلك، فقد يُقبل، لكن من غير المرجّح أن يُعطى أولوية.

التمارين التدريبية

أهم ما ينبغي فهمه عن التمارين التدريبية هو أن جميعها تقريبًا تسكن في مستودع مركزي (المعروف بـ "Problem Specifications"). لذلك فإن إجراء تغيير على تمرين تكون له آثار متسلسلة على جميع المسارات. وهذا يعني أن التغيير الجيد يكون بالغ الأثر لأنه سيساعد جميع اللغات. لكنه يزيد أيضًا من عبء التغيير، إذ يلزم أن يوافق عليه عدة مشرفين من مختلف المسارات ليُقبل، ثم يلزم مشرفي كل لغة أن يجذبوا التغييرات إلى مساراتهم.

قد تعني التغييرات على التمارين أيضًا أن المفاهيم المرتبطة بها في المناهج تصبح أكثر ضبابية، أو أن التمارين تحتاج إلى خصائص إضافية لحلّها، وهذا يغيّر موضع فتحها. وينبغي أيضًا مراعاة ذلك عبر المسارات قبل قبول التغييرات.

ورغم أن لدينا آليات تتيح لبعض المسارات فقط امتلاك حالات اختبار معينة، فإننا نميل إلى تثبيط ذلك، لأن هذا التفرّع قد يسبب ارتباكًا للمشرفين والطلاب على حد سواء. لذا عند اقتراح تغييرات على التمارين التدريبية، فيرجى التفكير في الصورة الأكبر عبر المسارات.

كيف تُقبل تغييراتك

رغم وجود أسباب كثيرة لعدم قبولنا الاقتراحات، فإن الناس كثيرًا ما يأتون بأفكار رائعة نقبلها فعلًا!

ونحن أيضًا منفتحون دائمًا تقريبًا على التغييرات في الصياغة التي تضيف وضوحًا، خصوصًا في تمارين التعلّم.

لتمنح اقتراحاتك أفضل فرصة للموافقة عليها، فيرجى كتابتها بما يوضح أنك أخذت في الاعتبار ما يلي:

  • التحسين الملموس الذي يحققه هذا التغيير (ويُفضّل أن يكون مع أمثلة بالكود توضح ما يُمكّنه تغييرك أو يمنعه).
  • الأثر على الحلول الموجودة، ولماذا يستحق هذا الأمر.
  • أي تغييرات تطرأ على المفاهيم التي تُعلَّم أو تُستخدم.
  • فهم سبب كون الأمور على ما هي عليه. (يرجى قراءة منشورنا عن Chesterton's Fence.)

وتذكّر أن تعبّر عن الآراء كآراء والحقائق كحقائق. فهذا عادةً ما يؤدي إلى أكثر المحادثات إنتاجية.

شكرًا مرة أخرى لأنك خصّصت وقتًا لتقديم اقتراح، ولقراءتك هذه الوثيقة!