Les nouvelles technologies pour l’enseignement des mathématiques
Intégration des TICE dans l’enseignement des mathématiques

MathémaTICE, première revue en ligne destinée à promouvoir les TICE à travers l’enseignement des mathématiques.

Genèse didactique d’un jeu sérieux : le site PyRates

Cet article apporte une contribution importante à celles et ceux qui s’interrogent sur l’enseignement de l’algorithmique et de la programmation (notamment en classe de Seconde) dans le cadre du cours de mathématiques. Il présente aussi le travail de thèse de Matthieu Branthôme [1].

Article mis en ligne le 25 février 2024

par Cyrille Guieu

Ce article a pour but de présenter le travail de thèse de Matthieu Branthôme, publié récemment [1]. Même si ce travail semble ne pas concerner directement l’enseignement des Mathématiques, il apporte une contribution importante pour celles et ceux qui s’interrogent sur l’enseignement de l’algorithmique et de la programmation (notamment en classe de Seconde) dans le cadre du cours de mathématiques. En effet il faut bien admettre que les aides disponibles pour les enseignants en vue de mettre en œuvre cet enseignement, sont rarement fondées scientifiquement et que les propositions des documents ressources proposés depuis 2017 demandent une didactisation importante afin d’être mis en place dans les classes. Bien que ce travail soit très axé « informatique » [2], il présente l’avantage de s’appuyer sur une analyse didactique précise de la programmation informatique au début du lycée et propose une mise en œuvre concrète à travers un jeu sérieux très abouti et présenté avec de nombreux retours d’expériences.

Qu’est-ce que la programmation informatique ?

Une entrée didactique pour un problème d’enseignement exige de caractériser les savoirs visés ; il s’agit de donner un sens à ce que le terme de « programmation » désigne dans les programmes.

Pour répondre à cette question il faut se plonger dans un domaine plus vaste qui est celui de l’informatique qui est à la fois une science (descriptive, explicative) et une technique (productrice d’objets). Cette dimension technique est assez étrangère aux mathématiques et peut expliquer certaines incompréhensions entre les acteurs des deux disciplines. Elle est cependant essentielle pour distinguer la notion d’algorithme (modélisable mathématiquement) de celle de programme (qui ne l’est pas) :

AlgorithmeLangage de programmation
Procédure de résolution de problème, s’appliquant à une famille d’instances du problème et produisant, en un nombre fini d’étapes constructives, effectives, non-ambigües et organisées, la réponse au problème pour toute instance de cette famille. Modeste, 2012  [3] Un langage de programmation est un média qui permet de décrire des algorithmes calculables par des machines et compréhensibles par des humains par le biais de programmes constitués d’instructions suivant une certaine syntaxe et ayant une certaine sémantique définies de façon formelle. Branthôme, 2023

La notion de média permet d’englober les langages Scratch et Python dans la même définition, tandis que la notion de sémantique désigne le sens des instructions. Ces instructions permettent de manipuler les concepts fondamentaux suivants : variable, types primitifs (nombres, caractères et booléens), structure conditionnelle, structures de boucle (for et while), entrées-sorties des programmes, fonctions et paramètres, récursivité, types composites simples (chaînes de caractères, tableaux et enregistrements) et types composites complexes (listes) [4].

Une distinction importante est aussi faite entre un paradigme de programmation orienté-objet et procédural. Dans le paradigme orienté-objet, les instructions sont liées à un objet et plusieurs scripts (morceaux de programmes) peuvent s’exécuter en parallèle tandis que dans le paradigme procédural les instructions s’exécutent les unes après les autres dans un seul et même « fil » d’exécution.

Comment ces notions sont-elles transposées au collège et au lycée ?

Les notions exposées dans la partie précédente ne sont pas enseignables telles quelles et les programmes d’enseignement en proposent une « transposition didactique » [5] élaborée pour être accessibles aux élèves dans le cadre d’une initiation à la programmation informatique.

La distinction algorithme/programme n’est par exemple pas transposée au cycle 4 où l’accent est mis sur la résolution de problèmes à l’aide de Scratch, alors qu’elle devient centrale en Seconde puisque les programmes demandent de traduire des algorithmes exprimés en langage naturel dans le langage Python. Une spécification des découvertes de Branthôme aux enseignements des programmes de mathématiques permet de mettre en lumière les transpositions suivantes :

Concepts fondamentauxCycle 4SecondePremière
Variables
Types primitifs : nombres, caractères et booléens
Structure conditionnelle
Structures de boucle : for et while
Entrées-sorties des programmes
Fonction et paramètres (par effet de bord)
Récursivité
Types composites simples
Types composites complexes : listes
Paradigme de programmation Orienté objet Procédural Procédural

Les blocs personnalisés (bouton « Mes blocs ») de Scratch ne sont pas vraiment des fonctions au sens académique du terme car ils ne renvoient pas de valeur. En revanche, ces blocs lorsqu’ils sont exécutés, peuvent agir sur des objets existants : on dit qu’ils agissent par « effet de bord ».

On notera que les notions de récursivité et d’entrées-sorties ne sont pas transposées ce qui pose des problèmes pour l’implémentation de certains algorithmes mentionnés dans les programmes de mathématiques du lycée [6].

Comment anticiper les difficultés pratiques des élèves en programmation à la transition collège/lycée ?

Passer d’un langage ludique, conçu spécialement pour des enfants, à un langage conçu pour des professionnels de l’informatique comme le langage Python, est forcément source de difficultés. Branthôme en identifie les principales en se fondant sur la littérature scientifique à propos de l’enseignement des bases des langages de programmation :
 La disponibilité d’aides
 La difficulté à recopier des fragments de code
 La gestion des messages d’erreur [7]

Ces trois éléments sont largement pris en compte dans Scratch puisque les aides sont intégrées au logiciel, qu’il n’y a pas de code à écrire et qu’il n’y pas d’erreur de syntaxe possible. A l’inverse la programmation en langage Python induit des difficultés sur ces trois thèmes, quel que soit le support matériel et logiciels utilisés pour programmer.

Grâce à un sondage impliquant des centaines de professeurs de mathématiques enseignant en Seconde, Matthieu Branthôme met en évidence deux usages majoritaires relatifs au langage Python au lycée : les professeurs utilisent largement la calculatrice lorsqu’ils sont en classe standard et l’environnement de programmation EduPython lorsqu’ils sont en salle informatique. Dans ces deux environnements, les aides sont difficilement accessibles, il peut être fastidieux de copier du code et les messages d’erreurs ont été conçus à destination d’informaticiens et sont en langue anglaise. C’est pour ces raisons qu’une ingénierie didactique a été conçue sous la forme d’un jeu sérieux.

Principaux choix de conception du site PyRates

PyRates a été conçu à partir de l’analyse didactique que nous avons ébauchée dans les parties précédentes. Il a été pensé pour permettre à des élèves de Seconde de découvrir les notions de base de la programmation en langage Python (boucles, variables, conditionnelles, fonctions) en 2 séances d’environ une heure en autonomie. Il se présente sous la forme d’un jeu de plates-formes (à la manière de Mario Bross) dans lequel le (ou la) pirate doit aller chercher une clé pour ouvrir un trésor en surmontant quelques obstacles. Les déplacements sont codés en Python avec quelques fonctions supplémentaires permettant d’agir sur le personnage exprimées en français. L’ergonomie de la fenêtre et la logique de jeu (le game play) ont été conçus en référence à celle Scratch : action sur un objet, présence de menu de commandes sur la gauche, possibilité de copier des fragments de code (au lieu de déplacer des blocs), aide intégrée.

Correspondances entre les éléments de Scratch et de PyRates

Les erreurs éventuelles rapportées par l’interpréteur Python sont exprimées en français :
Exemple de message d’erreur généré par l’interpréteur Python de Pyrates :

Intérêt et limite du site PyRates

Dans le cadre de sa thèse, Branthôme a expérimenté le jeu dans 9 classes de Seconde pendant deux séances distantes d’environ deux semaines. Les 240 élèves concernés n’avaient pas encore travaillé sur Python pendant l’année en cours.

Les retours d’expérience qualitatifs et quantitatifs sur le jeu sont bons en ce qui concerne l’engagement des élèves. Les aides sont jugées pertinentes et sont utilisées par les élèves. Les concepts de programmation visés sont également mobilisés par la plupart des élèves qui réussissent.
Voici par exemple le premier niveau et sa correction [8] :

Les deux premiers niveaux permettent à l’élève de découvrir le fonctionnement du jeu et d’introduire la boucle (sans variable de comptage, grâce au symbole « underscore »). A partir du niveau 3 des variables sont introduites sous la forme de message à lire dans des bouteilles et à réutiliser pour réaliser des actions pertinentes. L’utilisation des variables est rendue nécessaire par des éléments aléatoires dans la conception des niveaux.

Le niveau 3 et sa correction : la hauteur des piles de caisses est aléatoire et change avant chaque exécution, les messages dans les bouteilles indiquent leur hauteur (1 à 5)

A partir du niveau 3, on relève quelques contournements didactiques consistant à faire un programme déterministe (sans utiliser les messages) et à rejouer le programme jusqu’à avoir de la chance (obtenir les bonnes hauteurs de piles de caisses). Ce niveau est d’ailleurs celui sur lequel les élèves passent le plus de temps comme l’indique la figure ci-dessous :

Temps moyen et écart-type du temps passé par élève par niveau terminé

Ces durées indiquent également que la réussite du jeu prendra plus de deux séances pour la plupart des élèves débutants en Python mais d’autres expérimentations ont montré que des élèves connaissant déjà le langage Python pouvaient terminer le jeu en un peu plus d’une heure.

Conclusion

Bien que cette forme d’activité ne corresponde pas explicitement aux recommandations concernant le cours de mathématiques de la classe de Seconde qui est plus tourné vers des programmes implémentant des algorithmes mathématiques, il répond à une préoccupation légitime sur le plan didactique de transition entre le collège et le lycée. Son format est bien pensé et il peut permettre de faire progresser rapidement les élèves vers une certaine autonomie dans l’apprentissage du langage Python en vue de réussir les objectifs plus formels du programme [9]. L’auteur envisage de proposer ses sources en accès libre, ce qui pourrait permettre de l’implémenter derrière un ENT et donc d’accéder aux traces d’activités des élèves [10], mais aussi de créer de nouveaux niveaux. Ce serait une opportunité de se rapprocher davantage des objectifs algorithmiques fixés par le programme de mathématiques de la classe de Seconde.