Aller au contenu

Directives pour la Création d'Exercices

Vue d'ensemble

Ce document établit les standards et bonnes pratiques pour créer des fiches d'exercices cohérentes et de qualité dans le système NSI.

Structure Standardisée

1. Métadonnées Requises

Chaque fiche d'exercices doit inclure :

{
  "metadata": {
    "title": "Titre de la fiche",
    "subtitle": "Sous-titre optionnel",
    "subject": "python|algorithms|data-structures|networks|databases|web|other",
    "level": "seconde|premiere|terminale",
    "chapter": "Identifiant du chapitre",
    "version": "1.0.0",
    "author": "Nom de l'auteur",
    "created_date": "YYYY-MM-DD",
    "tags": ["tag1", "tag2"]
  }
}

2. Structure HTML Obligatoire

<div class="section-tabs">
    <button class="tab-button active" data-section="intro">Introduction</button>
    <button class="tab-button" data-section="easy">Facile</button>
    <button class="tab-button" data-section="medium">Intermédiaire</button>
    <button class="tab-button" data-section="hard">Difficile</button>
</div>

Sections Requises

  • section-intro : Introduction et concepts clés
  • section-easy : Exercices de niveau facile
  • section-medium : Exercices de niveau intermédiaire
  • section-hard : Exercices de niveau difficile

Structure des Cartes d'Exercices

<div class="exercise-card [difficulty]">
    <h3>Exercice [numéro] : [titre]</h3>
    <div class="exercise-content">
        <!-- Énoncé de l'exercice -->
    </div>
    <button class="toggle-solution" onclick="toggleSolution(this)">→ Voir la correction</button>
    <div class="solution-wrapper">
        <div class="solution">
            <h4>💡 Solution :</h4>
            <!-- Solution détaillée -->
        </div>
    </div>
</div>

Niveaux de Difficulté

Introduction

  • Objectif : Présenter les concepts clés
  • Contenu : Définitions, exemples, conseils
  • Format : Pas d'exercices, uniquement informatif

Facile

  • Objectif : Application directe des concepts
  • Caractéristiques :
  • Énoncés courts et clairs
  • Une seule notion par exercice
  • Solutions en 5-10 lignes de code maximum
  • Exemples : Création de variables, boucles simples, fonctions basiques

Intermédiaire

  • Objectif : Combinaison de plusieurs concepts
  • Caractéristiques :
  • Énoncés plus complexes
  • Contraintes supplémentaires
  • Solutions en 10-30 lignes de code
  • Indices optionnels
  • Exemples : Algorithmes de tri simples, manipulation de structures

Difficile

  • Objectif : Résolution de problèmes complexes
  • Caractéristiques :
  • Énoncés ouverts nécessitant réflexion
  • Plusieurs approches possibles
  • Analyse de complexité
  • Solutions alternatives
  • Exemples : Algorithmes optimisés, structures de données avancées

Standards de Qualité

Énoncés d'Exercices

  1. Clarté :
  2. Utiliser un langage simple et précis
  3. Éviter les ambiguïtés
  4. Fournir des exemples concrets

  5. Progressivité :

  6. Commencer par des cas simples
  7. Augmenter graduellement la complexité
  8. Réutiliser les concepts précédents

  9. Contexte :

  10. Donner des exemples d'utilisation réelle
  11. Expliquer l'intérêt pratique
  12. Lier aux concepts théoriques

Solutions

  1. Complétude :
  2. Code fonctionnel et testé
  3. Gestion des cas particuliers
  4. Commentaires explicatifs

  5. Pédagogie :

  6. Explication du raisonnement
  7. Justification des choix techniques
  8. Alternatives possibles

  9. Bonnes Pratiques :

  10. Code lisible et bien structuré
  11. Noms de variables explicites
  12. Respect des conventions Python

Processus de Création

1. Planification

  1. Définir les objectifs pédagogiques
  2. Quels concepts enseigner ?
  3. Quel niveau de maîtrise atteindre ?
  4. Comment évaluer la compréhension ?

  5. Analyser le public cible

  6. Niveau des étudiants
  7. Prérequis nécessaires
  8. Temps disponible

  9. Structurer la progression

  10. Ordre logique des exercices
  11. Liens entre les concepts
  12. Points de difficulté

2. Rédaction

  1. Utiliser le format JSON standardisé

    # Créer un nouveau fichier d'exercices
    cp examples/example_exercise_data.json new_exercise.json
    # Éditer le contenu
    # Générer le HTML
    python3 scripts/generate_exercise_html.py new_exercise.json output.html
    

  2. Respecter la structure des templates

  3. Utiliser les templates existants
  4. Maintenir la cohérence visuelle
  5. Tester sur différents navigateurs

  6. Valider le contenu

    # Valider la structure
    python3 scripts/validate_exercise_sheets.py output.html
    

3. Révision et Test

  1. Révision par les pairs
  2. Vérification de la clarté
  3. Test des solutions
  4. Validation pédagogique

  5. Test utilisateur

  6. Faire tester par des étudiants
  7. Mesurer le temps de résolution
  8. Identifier les points de blocage

  9. Itération

  10. Corriger les problèmes identifiés
  11. Améliorer la clarté
  12. Optimiser la difficulté

Outils et Ressources

Scripts Disponibles

  • generate_exercise_html.py : Génération HTML depuis JSON
  • validate_exercise_sheets.py : Validation de structure
  • fix_exercise_sheets.py : Correction automatique

Templates

  • base_exercise_template.html : Template de base
  • exercise_card_template.html : Templates de cartes

Validation Automatique

  • CI/CD intégré via GitHub Actions
  • Vérification de structure HTML
  • Détection de sections vides
  • Validation des ressources CSS/JS

Exemples de Bonnes Pratiques

Énoncé Bien Structuré

<div class="exercise-content">
    <p>Écrivez une fonction <code>fibonacci(n)</code> qui calcule le n-ième terme de la suite de Fibonacci.</p>

    <div class="constraints">
        <p><strong>Contraintes :</strong></p>
        <ul>
            <li>n ≥ 0</li>
            <li>Utiliser une approche itérative</li>
        </ul>
    </div>

    <p><em>Exemple :</em> <code>fibonacci(5)</code> retourne <code>5</code></p>

    <div class="hints">
        <p><strong>💡 Indice :</strong> F(0) = 0, F(1) = 1, F(n) = F(n-1) + F(n-2)</p>
    </div>
</div>

Solution Complète

<div class="solution">
    <h4>💡 Solution :</h4>
    <pre><code>def fibonacci(n):
    if n <= 1:
        return n

    a, b = 0, 1
    for i in range(2, n + 1):
        a, b = b, a + b

    return b</code></pre>

    <p><strong>Explication :</strong> Cette solution utilise une approche itérative avec deux variables pour éviter la récursion coûteuse.</p>

    <p><strong>Complexité :</strong> O(n) en temps, O(1) en espace</p>
</div>

Maintenance et Évolution

Versioning

  • Utiliser le versioning sémantique (MAJOR.MINOR.PATCH)
  • Documenter les changements dans les métadonnées
  • Maintenir la compatibilité ascendante

Feedback et Amélioration

  • Collecter les retours des enseignants
  • Analyser les difficultés des étudiants
  • Mettre à jour régulièrement le contenu

Archivage

  • Conserver les anciennes versions
  • Documenter les raisons des changements
  • Maintenir un historique des modifications

Ce document est un guide vivant qui évolue avec les besoins pédagogiques et les retours d'expérience.