Saturday, 7 March 2020

Et si on codait avec des élèves

Depuis de nombreuses années Dr. Geo permet de programmer des figures. J'ai démarré ce développement vers 2001/2002 avec une présentation publique au FOSDEM de 2003, à Bruxelles. Mais cela me chatouillait depuis le début de Dr. Geo, vers 1996 ; le développement en dilettante est très lent...
Depuis lors, Dr. Geo a énormément évolué. En fait, à partir de 2005, il a été complètement réécrit avec Squeak puis Pharo tout en préservant son esprit d'ouverture et d'accès au code source. A vrai dire cet esprit a été renforcé, mais je m'égare ce n'est pas l'objet de cet article.
Jusqu'à présent, avec mes élèves je n'ai jamais enseigné la programmation de figure. J'utilisais Dr. Geo uniquement dans le cadre de la géométrie interactive classique à la souris, essentiellement pour découvrir les transformations géométriques. Ce manque a été corrigé, j'ai depuis lors enseigné quelques cours de programmation.

Ressource

Pour préparer le terrain, j'ai écrit un livre d'exercices, Programmer avec Dr. Geo. Son contenu est articulé autour d'exemples et d'exercices (avec solutions en annexe). Quatre chapitres contiennent l'essentiel d'un point de vue pédagogique. Le premier aborde La syntaxe par l'exemple du langage Pharo. Les trois chapitres suivants concernent les Nombres et opérations, l'Espace et les Fonctions.
Les premiers exemples sont souvent assez courts. De faible complexité car simplement déclaratif et linéaire sans boucle. D'ailleurs, ils ne produisent pas systématiquement une figure.
85214 \\ 24 = 0
   siVrai: ['C''est un multiple !']
   siFaux: ['Ce n''est pas un multiple.']
Exemple utilisant la division euclidienne et un test.
Le chapitre sur l'Espace, et plus particulièrement les transformations géométriques, propose une montée en complexité avec l'introduction des collections et des boucles.

Les collections sont au cœur du langage Pharo et se prêtent à merveille à la définition d'une figure géométrique à partir d'unités élémentaires. Par exemple, définir un carré à partir d'une collection de ses quatre côtés.
collection := {figure segmentDe: -2 @ 2 a: 2 @ 2 .
   figure segmentDe: 2 @ 2 a: 2 @ -2 .

   figure segmentDe: 2 @ -2 a: -2 @ -2 .

   figure segmentDe: -2 @ -2 a: -2 @ 2 .
 
   figure cercleCentre: 0 @ 0 rayon: 2}

Exemple d'un carré et un cercle inscrit.
Utilisées conjointement avec un itérateur, les collections permettent alors d'entrevoir les merveilles qu'offre la programmation. Ici nous appliquons une symétrie axiale à chacune des formes élémentaires constitutives de la figure :
collection faire: [:forme |
   figure symetriqueDe: forme selonAxe: d] 
Collection et boucle, application à la transformation d'un ensemble complexe.

Bon, et les élèves dans ceci ? Car là je commence à me perdre dans les énumérations du langage de programmation.

Le contexte 

J'enseigne les mathématiques et la bureautique/informatique en secondaire I, à des élèves entre 12 et 15 ans, de niveaux élémentaires, intermédiaires ou avancés.
Ce deuxième cours est très centré sur la bureautique et l'usage du web, mais cela reste ouvert à des domaines connexes comme la programmation. J'ai la chance d'enseigner les mathématiques et l'informatique aux mêmes élèves, cela facilite donc les enseignements trans-disciplinaires. Lors du cours d'informatique les élèves sont en demi-groupes, au plus 12, sur deux périodes consécutives de 45 min.

Une première approche

Dans ma toujours trop grande naïveté d'enseignant, j'ai pensé que le text book, le livre Programmer avec Dr. Geo, constituerait un excellent fil conducteur pour les élèves. Qu'il suffirait d'égrainer les sections et les chapitres les uns après les autres, et je serais alors simplement une personne ressource. Cela n'a pas été aussi simple...
En premier lieu, les élèves devaient se familiariser avec Dr. Geo, comprendre le concept de figure interactive. Donc, après une courte démonstration de l'interface du logiciel, je leur ai demandé de construire un triangle et son cercle circonscrit. Cette partie a été très satisfaisante, les élèves s'en sont donnés à cœur joie.
Dans un deuxième temps, je leur ai montré l'interface de programmation : l'espace de travail pour écrire le code et l'exécution pour obtenir la figure programmée. Pour être précis, nous avons fait cela en lisant ensemble le début du chapitre La syntaxe par l'exemple. C'était un moment plutôt agréable, même si, rétrospectivement, je pense qu'il y avait déjà beaucoup trop d'information pour les élèves.
Ceci fait, les élèves devaient avancer à leur rythme et suivre le fil conducteur que constitue le livre. Outre le livre, ils avaient à leur disposition une fiche de suivi où ils notaient en fin de cours la page et l'exercice/exemple sur lequel ils travaillaient alors.
La durée d'une séance de programmation était limitée à 45 min, parfois 2x45min lorsque la dynamique était propice à poursuivre le travail. Mais ma préférence a toujours été de varier le contenu des deux périodes : programmation puis bureautique ou tout autre projet en cours sans lien avec la programmation. Les élèves appréciaient aussi cette variété.

Qu'est-ce que cela a donné ?

A ma grande surprise, les élèves appréciaient l'idée d'écrire du code, du moins certains se sont exclamés, se voyant bidouilleurs informatiques. C'est sans doute lié à la représentation culturelle qui y est attaché, celle que nous voyons dans les films où le héros va saisir des codes informatiques pour sauver le monde. Les garçons ont semblé plus sensibles à cet aspect.
L'idée d'écrire un code qui exécuté produit une figure était aussi une source de satisfaction. Je pense que la perception des élèves était de l'ordre de la résolution d'une énigme.
Saisir le code d'un exemple est déjà une épreuve pour les élèves. Les erreurs de saisie apparaissaient rapidement : l'oubli d'un point, un espace de trop dans un message à mot clé, une majuscule de trop ou manquante, une mauvaise orthographe d'un message, etc. Heureusement l'environnement colorie en rouge les caractères fautifs. Les autres erreurs comme la perte du code étaient fréquentes mais pas insurmontables.
Pour revenir à la ressource, à savoir le livre, un exercice est toujours un prolongement d'un exemple précédent dont il requiert des modifications légères associées à une compréhension du code. L'apprentissage se fait donc graduellement par l'exemple et ses modifications ; un peu à l'image de l'eau qui vainc la gravité par capillarité.
Du point de vue de l'apprentissage transversal, les élèves ont remobilisé les notions mathématiques de coordonnées, lecture dans un repère cartésien, construction de segment, de droite et de cercle à partir de valeurs numériques. Ce fut une plus-value remarquable.

Mon objectif d'être uniquement une personne ressource a été globalement un fiasco. En effet j'ai du intervenir à de nombreuses reprises pour soutenir le groupe classe dans la compréhension des concepts abordés dans le livre et je m'y suis épuisé. Pour les élèves, la ressource proposée étaient bien trop riche en information, leur esprit était saturé et j'ai donc du les aider très souvent à faire le tri. C'était une perte de temps qui auraient pu être évité. Bien sûr quelques élèves, filles et garçons en égale proportion, se sont régalés et ils ont progressé à un rythme soutenu, mais ce n'était pas mon objectif.
Stéphane Ducasse m'avait prévenu, une approche trop académique avec Pharo épuisera les apprenants ! Le livre Programmer avec Dr. Geo, n'est donc pas une ressource adaptée pour une utilisation direct avec les élèves. Pour des enseignants s'initiant à Dr. Geo, elle peut s'utiliser comme ressource de référence voire ressource première.

J'étais donc prêt à laisser complètement tomber la programmation, du moins avec Dr. Geo, lorsqu'un événement inattendu m'a permis de rebondir. Je vous en parlerai dans un prochain article.

No comments:

Post a comment