Python en cycle 3

mercredi 23 décembre 2020
par  Alain BUSSER

Voici un extrait du programme de cycle 3, sur la compétence « (Se) repérer et (se) déplacer dans l’espace en utilisant ou en élaborant des représentations » :

Programmer les déplacements d’un robot ou ceux d’un personnage sur un écran en utilisant un logiciel de programmation.

Vocabulaire permettant de définir des positions et des déplacements (tourner à gauche, à droite ; faire demi-tour, effectuer un quart de tour à droite, à gauche).

En 2020, trois classes de cycle 3 (CM2 puis CM1 et CM2 de l’école Aristide-Briand) sont venues au lycée Roland-Garros pour s’entraîner au concours algorea. La catégorie blanche de ce concours couvre largement les compétences citées ci-dessus. Les élèves de CM2 de l’année scolaire 2019-2020 ont fait le concours en Blockly mais les séances d’entraînement, plus propices à l’expérimentation, ont été l’occasion, pour les élèves les plus aventureux, de découvrir la programmation Python.

Castor d’abord

Avant de s’entraîner à algorea, les élèves de CM1 ont passé le concours Castor. Voici la synthèse de ce concours vu du côté labo de maths du lycée Roland-Garros :

Pourquoi pas Scratch ?

La programmation Scratch, au programme de cycle 3, offre des avantages connus par rapport à la programmation Python :

  • impossible de faire une faute d’orthographe, le mot étant orthographié de façon définitive (on ne fait que déplacer des mots pour former des phrases ou des programmes) ;
  • l’indentation est en quelque sorte matérialisée par les blocs en forme de « C » comme dans le « répéter 10 fois » :
  • le programme est écrit en français (pas de from, ni de import ni de for ni de if en Scratch).
  • Pas de notation fonctionnelle en Scratch (parenthèses vides à la fin des instructions) : Scratch est un langage de programmation impérative, ce qui convient aux activités avec un robot virtuel.
  • Pas besoin du clavier, tout se fait avec la souris.
  • Programmer en Scratch est, en apparence, plus facile puisqu’on joue au puzzle : il suffit d’attraper un bloc pour le placer au bon endroit du programme.

Cependant, on constate qu’en CM1 et CM2, plusieurs élèves (et même parfois les adultes qui les accompagnent) ont du mal à distinguer la zone de travail (à droite, où on écrit le programme) de la boîte à outils, et ne savent pas spontanément que le bloc retiré de la boîte à outils est seulement copié, pas réellement retiré [1]. Souvent d’ailleurs les élèves ont tendance à déplacer le programme dans la zone grisée et ont du mal à comprendre pourquoi certains blocs sont exécutés et d’autres non.

L’usage du clavier est quand même parfois nécessaire, comme pour transformer le « répéter 10 fois » en « répéter 8 fois » ci-dessus.

Mais surtout, placer correctement les blocs n’est pas si aisé que ça, du point de vue psychomoteur. Par exemple il faut une bonne synchronisation des gestes pour amener (verticalement vers le haut) le bloc « avancer vers la droite » sous le programme en cours de construction :

En fait, les élèves ont tendance séparer les mouvements horizontal et vertical comme sur un écran magique. Ils attrapent un bloc qu’ils déplacent d’abord vers la droite

et ensuite seulement vers le haut. Ce faisant, la main est crispée sur la souris :

La verbalisation est bien présente :

mais après cela, lorsqu’il s’agit de tester une hypothèse, la tâche se complexifie au risque de déconcentrer les élèves et leur faire oublier ce qu’ils voulaient faire, tant ils sont accaparés par le comment faire.

Syntaxe de Python en CM1

A contrario, la syntaxe étrange de Python ne dérange pas les élèves outre mesure. Par exemple, leur niveau en anglais (ou peut-être leur attitude face à cette langue étrangère) permet de leur traduire mot à mot la phrase

from robot import *

On leur explique rapidement que import est un verbe à l’impératif, que from veut dire « depuis » et que robot est un module depuis lequel est fait l’import. On aborde en passant la notation de Kleene, l’étoile signifiant « tout ».

Cette phrase qui ouvre la page Python est un peu l’équivalent du « quand le drapeau vert est cliqué » de Scratch : une obligation typographique dont il n’est pas nécessaire de connaître le sens pour programmer.

Il en est de même pour les expressions Python qui font bouger le robot :

  1. tournerGauche()
  2. tournerDroite()
  3. avancer()
  4. ramasserObjet()

Télécharger

Pour faire avancer le robot, on lui envoie l’ordre d’avancer, c’est logique, et cet ordre s’écrit avec des parenthèses vides :

avancer()

Python est alors vu comme une langue qui a ses bizarreries mais que l’on comprend. De la même façon qu’on comprend que

tournerGauche()

est un ordre de rotation (de 90° en l’occurrence) même s’il y a les parenthèses et que les mots « tourner » et « gauche » ne sont pas séparés par une espace comme en français.

Écrire la phrase « tourner à gauche » en un seul mot, nécessite l’utilisation d’une lettre majuscule, ce qui à son tour nécessite l’apprentissage du clavier de l’ordinateur [2]. Comme on le verra plus bas, cet apprentissage n’est pas plus difficile que celui de la souris.

Python sans clavier

algorea permet de programmer en Python sans trop utiliser le clavier. La technique, aujourd’hui très présente sur les calculatrices programmables en Python, a été pratiquée depuis des années avec les CarScripts, Algobox et Xcas, entre autres. En fait, il suffit de cliquer sur un mot (en bleu en haut de l’écran) pour l’insérer là où se trouve le curseur. Mais il faut quand même utiliser un peu le clavier, sous la forme du bouton return qui permet d’aller à la ligne :

Alors pour obtenir l’écran suivant, il a suffi de cliquer sur avancer() puis aller à la ligne, et cliquer à nouveau sur avancer() :

Le robot est initialement tourné vers la droite de l’écran, en bas à gauche. Après avoir avancé deux fois, il se trouve juste en-dessous de la fusée mais pas tourné vers elle.

Pas très adroit d’aller à droite

En cliquant sur tournerDroite(), le robot tourne le dos à la fusée :

Ceci mène à une correction de la tentative, faite au clavier puisqu’il suffit de transformer Droite() en Gauche() :

ce qui a bien l’effet escompté :

Après cela ça va vite : il suffit d’aller à la ligne puis cliquer sur avancer() :

puis encore

et encore une fois :

Ce script Python, juste, a été produit moins d’un quart d’heure après le début de la séance, par deux élèves de CM1.

Usage du clavier

Ici, les élèves se sont mis à utiliser exclusivement le clavier (sauf pour les tests qui se font en cliquant sur un bouton). On voit le respect rigoureux de la syntaxe avec les parenthèses et le G majuscule :

Après avoir tapé la lettre a, il faut chercher la lettre suivante qui est u. Ce qui occasionne un problème de repérage bidimensionnel sur le clavier :

et ça continue assez rapidement :

Un essai ultérieur montre que le script est, jusqu’à présent, correct :

ramassage

Ici il y a une nouvelle fonction Python (en bleu tout à droite) :

Il s’agit de

ramasserObjet()

qui a pour effet de faire ramasser par le robot, l’objet au-dessus duquel il se trouve (s’il y a un tel objet).

Faute de lire la liste des fonctions et l’énoncé, les élèves sont étonnés que, bien que le robot aille jusqu’à l’objet, il ne se passe rien :

Il faut là une explication supplémentaire sur cette nouvelle tâche à accomplir. Après les élèves arrivent à trouver le bon script

Ils arrivent même rapidement à accomplir d’autres missions similaires :

Le sens de l’orientation

Les lignes 3 et 6 ont pour effet combiné que le robot est à nouveau dans son orientation d’origine, et la ligne 7 ne peut s’exécuter parce que le robot est face à un obstacle (un astéroïde) qui lui bloque le passage :

Le remède (lignes 7 à 10) est hésitant mais fonctionne :

On constate au passage la disparition de la ligne 1. Mais aussi les lignes 7 et 8 sont inutiles puisqu’elles n’ont aucun effet global. Mais cette expérience est l’occasion d’apprendre que deux quarts de tour équivalent à un demi-tour, ce qui était le but.

Pour rétablir la première ligne commençant par from, rien de tel que la retaper au clavier, d’abord avec la lettre F :

rapidement les lettres R et O ont été trouvées :

Seymour Papert conseillait régulièrement de se mettre dans la peau du robot (think turtle) ce qui aurait permis, si les élèves avaient pensé à se lever et bouger, de comprendre plus rapidement cette addition 90°+90°=180°. La place ne manquait pas vraiment dans la salle d’informatique, mais c’est surtout le manque d’habitude qui a empêché les élèves de se lever pour raisonner de façon kinesthésique comme cela leur avait été demandé.

Lors du concours 2020, une élève de CM2 avait trouvé un moyen de raisonner de manière kinesthésique sans quitter sa chaise :

Cette activité de Marie Duflot-Kremer est entièrement basée sur l’apprentissage kinesthésique. Elle ne nécessite pas d’ordinateur et favorise la cohésion sociale.

L’activité sur l’automate est aussi basée sur l’apprentissage kinesthésique, mais elle non plus n’est pas en Python (les programmes sont des textes binaires du genre ♥✽✽✽♥♥♥✽✽♥♥♥♥✽♥✽♥♥✽♥♥♥♥✽♥♥♥♥♥✽ et l’objectif est de décoder le texte, pas de faire le ménage dans un espace pollué de débris de satellites).

Le programme que voici, tapé (et corrigé) au clavier, comporte quand même un bug, lié à l’orientation initiale du robot :

planification

En effet si le robot commence d’abord (ligne 2) par tourner à gauche, il se retrouve face à l’obstacle et ne peut plus avancer :

En fait cette ligne 2 est de trop. Mais la longueur du programme fait qu’il est difficile de trouver où apparaît le problème.

Après d’autres essais, la verbalisation entre en lice, pour préciser quelle est la ligne encore fautive :

Malgré cela, il subsiste des problèmes :

En fait, dans

  1. from robot import *
  2. avancer()
  3. tournerGauche()
  4. tournerGauche()
  5. avancer()
  6. tournerGauche()
  7. avancer()
  8. avancer()

Télécharger

les lignes 2 à 6 sont inutiles car elles font revenir le robot à son point de départ. En fait les lignes

  1. avancer()
  2. tournerGauche()
  3. tournerGauche()
  4. avancer()
  5. tournerGauche()

Télécharger

reviennent au même que

tournerDroite()

et du coup le robot essaye d’aller deux fois vers la droite, ce qui le bloque sur le côté droit comme on le voit sur l’écran ci-dessus.

Après une telle intensité intellectuelle, les élèves de cycle 3 adorent se détendre en jouant sur le graphe :

perspective cavalière

On voit sur les exemples ci-dessus, que lorsque le robot est vu de profil droit, et qu’on lui demande de tourner vers sa gauche, après cette rotation, on le voit de dos. Avec Scratch ce n’est pas la même chose : si le chat est de profil droit

et qu’on lui demande de tourner de 90° vers sa gauche, on le voit toujours de profil :

Il est difficile d’identifier les mouvements du robot et ceux de l’élève avec ce genre de comportement. Une solution serait de montrer toute la scène, y compris le robot, du dessus. Par exemple la tortue de Sofus Primaire est vue de dessus :

et si on lui demande de tourner vers sa gauche elle est toujours vue de dessus :

Il est plus facile de s’identifier à un robot qui tourne vraiment vers sa gauche si on le lui demande, qu’à un robot qui effectue un salto arrière à la place.

La solution choisie par France-IOI pour algorea est mixte : le robot est vu de côté avec un aspect cohérent avec ce qu’on lui demande, mais évoluant sur un terrain vu de dessus. On peut considérer qu’il s’agit d’une perspective cavalière avec position un peu étrange du cavalier.

L’approche de RUR-PLE aussi était intéressante avec son labyrinthe vu de dessus. Son descendant Reeborg montre le même aspect : labyrinthe vu de dessus et aspect du robot variable au cours des rotations :

Le jeu lightbot offre une perspective plus intéressante (et c’est vraiment une perspective isométrique). La scène paraît plus réaliste. Mais

  • le langage de programmation n’a rien à voir avec Python, chaque mot dans le langage étant un dessin (flèches, ressorts, lumières)
  • lightbot se programme comme Scratch, avec déplacement des mots sur écran tactile.

La programmation en Scratch, qui est au programme sur tout le cycle 3, nécessite une maîtrise psychomotrice de la souris qui n’est pas toujours acquise en cours moyen. Elle semble donc plus à sa place sur écran tactile, que sur ordinateur. Ce dernier est muni d’un clavier que certains élèves trouvent plus facile à utiliser que la souris :

  • le cliquer-glisser nécessite une synchronisation entre le mouvement de la souris sur la table, et l’effet obtenu sur l’écran. L’apprentissage de cette synchronisation est long.
  • Le simple clic sur un mot à insérer est plus simple, du point de vue psychomoteur.
  • Le clavier réel de l’ordinateur est en relief et on peut s’y orienter par le toucher (il existe d’ailleurs des claviers en braille).
  • Même avec Scratch, il peut être nécessaire d’entrer des données numériques au clavier. Dans ce cas les élèves tendent à préférer le pavé numérique, que la version virtuelle qui apparaît à l’écran.

On constate qu’en une demi-heure environ, même s’ils ne sont pas encore des champions de la résolution de problèmes par algorithme, des élèves de CM1 ont appris à écrire (et corriger) au clavier, dans une langue qu’ils ne connaissaient pas (Python), et savent déplacer le curseur sans nécessairement effacer en arrière, écrire en majuscules occasionnellement, aller à la ligne et écrire les parenthèses. Ils ont travaillé le repérage dans l’espace non seulement en programmant le robot, mais en se repérant (via le doigt) sur le clavier de l’ordinateur [3]. Et accessoirement ils ont eu un avant-goût de ce qu’ils feront plus tard au lycée.

Conseil aux parents

Pour expérimenter à la maison, il suffit de démarrer un navigateur internet (Firefox recommandé) puis d’aller sur le site d’algorea, et là,

  • cliquer (en haut de la page) sur « se préparer »,
  • cliquer (en bas de la page) sur commencer une préparation
  • cliquer sur catégorie blanche
  • cliquer sur Python

puis choisir une séquence (45 minutes).

La première séquence (catégorie blanche Python Espace) est celle qui a été illustrée ici. Elle fait appel à des rotations qui sont au programme de cycle 3 et est donc un bon choix de départ.

Conseiller aux enfants de se lever de temps en temps pour mimer les mouvements du robot.

Voir aussi ce document sur éduscol. Et une expérience similaire a été menée dès 1984 (en Basic).


[1Il faudrait changer le look des blocs de la zone grisée, pour leur donner l’aspect d’une pile de cartes, dont on ne ferait que retirer une carte. Les élèves sont surpris qu’une fois le bloc extrait de la zone grisée, il est toujours là.

[2Pour écrire la lettre « G » en majuscule, il faut, ou bien actionner le verrouillage des majuscules avant d’appuyer sur la touche G puis la désactiver, ou alors appuyer sur la touche shift et, sans relâcher celle-ci, effectuer un bref appui sur la touche G, puis enfin, relâcher la touche shift. Les deux manœuvres sont complexes, mais la seconde est souvent plus pratique. L’ignorance des élèves de CM1 leur confère une souplesse intellectuelle qui leur permet d’apprendre les deux méthodes, et de choisir la plus adaptée.

[3La programmation en Logo se faisait au clavier, et Papert a expérimenté cette programmation même à l’école maternelle...


Commentaires