Quand je parle de mon travail sur ce blog, j'insiste souvent sur mes petites réussites, comme des présentations qui se passent bien ou des TD qui marche tellement bien que je fais une photo du tableau pour l'immortaliser. Aujourd'hui, je voudrais vous parler des ratés de parcours. C'est bien plus instructifs, voire un peu plus amusant.

La première anecdote vient de mon travail d'enseignant en école d'ingé. Je fais traditionnellement les cours d'initiation à la programmation, j'adore ça, j'en fais des tonnes. J'ai même fait la PLM pour cela, un environnement complet pour apprendre à programmer.

Et cette année, on a décidé de reprendre en profondeur notre façon de faire. Avant, on faisait la programmation objet puis l'algorithmique, et les élèves nous faisaient remarquer à juste titre que ça revient à apprendre à assembler des pièces d'un puzzle qu'on ne comprend pas, puis ensuite apprendre comment sont faites ces pièces. Ça n'est pas très naturel quand on y pense. Mais on faisait ainsi car notre langage support étant le Java, on était bien obligés de commencer par l'objet.

Qu'à cela ne tienne, cet été, j'ai tout changé pour passer du Java au Scala. J'ai modifié la PLM, pour y ajouter le Scala. J'ai rajouté presque 40 exos pour diminuer certaines marches conceptuelles quand les étudiants font leurs premiers pas en programmation. J'ai enfin retravaillé mes supports d'amphi pour m'adapter au fait qu'on commence maintenant par l'algo-prog.

À la rentrée, les élèves ont fait les quelque 160 exos de la PLM comme prévu. Cela leur a pris au moins 40 heures en moyenne, mais je pense que ça les a bien lancés dans la vie de programmeur. Pour le cours, je n'ai pas trop baissé le niveau : on a étudier les tris, la récursivité, le backtracking, la dérécursivation et un peu de preuve de programmes. Le truc un peu solide. Mais au bout de 8 séances sur table et 9 séances sur machine, on en venait à bout.

J'étais plutôt content. Les élèves appréciaient et semblaient même avoir un peu compris. La syntaxe du Scala est un pur bonheur pour ce qu'on fait : on l'oublie pour se concentrer sur l'algorithme. Au QCM intermédiaire, personne n'était trop à la ramasse. Bref tout allait bien, j'étais le roi du pétrole. J'étais prêt à expliquer au monde entier ma méthode kelmarchtrobien pour démarrer la programmation et l'algorithmique en seulement un mois et demi. Like a boss!

Et puis la dernière heure de la dernière séance, une étudiante m'a appelé car son code ne marchait pas. J'avais bien repéré qu'elle avait des difficultés, mais rien de méchant : elle posait des questions, avançait un peu (même si pas très vite), était toujours présente. Rien à redire.

Ce sujet porte sur une histoire de récipients, qu'il faut remplir, vider et transvaser. On a regardé ensemble, et j'ai fini par trouver que pour remplir, elle avait écrit "capacité = contenu". Il était donc normal que non seulement sa bouteille ne se remplisse pas, mais qu'en plus la capacité de sa bouteille passe à zéro.

Quand j'ai vu ça, je me suis relevé en disant «ah t'as vu, là? T'as fait une typo idiote donc c'est normal. Rien de grave, tu corriges et ça va aller». Mais tandis que je cherchais déjà du regard la prochaine personne à aider, une petite voix timide m'a rappelé : «Mais Monsieur, c'est un symbole égal, non? donc a=b c'est pareil que b=a, non?»

Et là, mes rêves et mes illusions ont volé en éclat.

Elle a étudié l'algorithmique et la programmation avec moi pendant une soixantaine d'heures au moins. Je lui ai raconté des trucs assez balèzes comme les tris récursifs et le backtracking, et elle découvre l'affectation le 18 novembre. D'un seul coup, j'étais moins persuadé de l'infaillibilité de ma méthode...

Certes, elle a fini par comprendre, diront certain. Mais j'ai quand même l'impression d'avoir mis la charrue avant les bœufs. Peut-être vont-ils comprendre en relisant leur cours avant le partiel, mais j'aurais le détecter plus tôt. Ils auraient mieux profité du cours sans ce point de blocage idiot. Et puis, combien d'autres points de blocage ai-je laissé passer sans les voir?

Cette douche froide m'a donné une bonne leçon d'humilité pédagogique, mais je ne me suis pas laissé abattre pour autant. Sur un autre front avec un autre public, nous avons organisé le 16 novembre un Coding Gouter, où on invite des enfants de 4 à 14 ans dans les bâtiments de l'école d'ingé à venir découvrir la programmation. On fait des petits jeux en Scratch, on programme des robots Lego Mindstorm, et fait un goûter au milieu de l'après-midi pour se remettre. On a en gros un animateur (des élèves, des anciens et moi) pour deux ou trois enfants, qui sont tous venus avec leurs parents.

Pour cette première fois, Claire Calestroupat avait préparé une activité très guidée où les enfants fabriquent un petit jeu pas à pas tandis que je m'occupais des robots. J'ai été surpris de voir que lancer l'imagination des enfants est assez difficile. Ils sont très sujet à la page blanche, et faut leur donner des idées pour qu'ils avancent. Je les aurais cru plus imaginatifs. Mais à la fin, les enfants ont adoré, ils ont passé un bon moment.

À tel point que mon ptit dernier m'a demandé un «Coding Anniversaire» pour ses 7 ans. J'ai d'abord refusé, mais il sait être persuasif, l'animal. On a donc invité quatre de ses copains (de 7 à 8 ans) à venir «fabriquer leur jeu sur ordinateur». Avec les deux grands frères, ça fait 7 petits garçons (ce défaut de mixité m'énerve mais il n'avait que des garçons sur sa short list, et je n'ai pas de fille en stock, moi). Ils étaient chauds bouillants pour apprendre en jouant à l'ordinateur.

De notre coté, nous nous sommes démenés avec JC. Nous avons trouvé 7 ordinateurs (!). Nous avons créé 4 activités différentes complètes (!!), pour qu'ils puissent choisir (elles sont ici). L'idée est de donner aux enfants un jeu jouable assez rapidement, puis de lancer leur imagination avec des tas d'idées d'extensions sympas. Pendant les derniers préparatifs, nous étions un peu stressés (surtout moi), mais assez enthousiastes : au fond, c'est une LAN party intelligente que nous avons préparé pour Tim. Cette fois, nous étions les rois du pétrole.

Et puis les enfants sont arrivés, se sont installés sur les ordis. Ils ont écouté les quelques explications initiales. Mais c'est un peu parti en sucette : l'heure qui a suivi, les gamins désœuvrés tentaient des trucs sur l'ordi (principalement des dessins), bloquaient, et montaient en pression. On a pas mal transpiré, mais au bout d'une heure, on a réussi à les remettre sur les rails : ils ont commencé à transcrire sur machine le programme du premier petit jeu. Ce fut un peu long, un peu laborieux, mais 2 d'entre eux (sur 7) ont réussi à finir. Ils ont joué 2 minutes avec, puis ils sont allés faire du lego dans la chambre. Quand les autres ont entendu parler de lego, ils ont (presque) tous changé d'idée et sont allés jouer IRL, plutôt.

Au fond, c'est une bonne chose : il vaut mieux se planter en environnement contrôlé avec peu d'enfants (et des caisses de lego et du gâteau pour rattraper le coup) qu'avec une classe entière, mais quand même. Je comprend mieux pourquoi tout le monde hésite un peu à se jeter à l'eau sur des activités d'éveil à la programmation... elle est fraîche la première fois...

Je sais déjà certains éléments que je vais changer la prochaine fois. Je vais commencer par un moment où j'explique les bases avant d'aller sur ordinateur. L'expérience montre qu'avoir une souris entre les doigts empêche d'écouter. Peut-être qu'un ordi pour deux enfants, en Peer Programming, ça peut aider, aussi. Je vais faire des fiches un peu cartonnées A4 pour présenter (et personnifier) les éléments du langage: Départs de script, le "si" avec sa forme de crocodile avec un œil, la boucle, les déplacements de base, etc.

Ensuite, j'aurais soit une activité guidée comme celle de Claire, soit des fiches beaucoup plus simple comme celles du site de ScratchFR, soit les étapes intermédiaires pour mes jeux un peu comme un plan de montage Lego. Soit tout ça à la fois, ça dépendra du temps de procrastination disponible pour cela.

Mais en tout cas à ce rythme, le pic pétrole sera passé et oublié avant que je n'en sois le roi...

Commentaire de Lucas Nussbaum (1/12/13)

Dans le même genre que l'affectation, en DUT S1, en système, l'an passé, après une longue explication sur cp, mv, etc un étudiant m'a demandé «OK, cp, ça copie, mais comment on colle ?».

J'ai l'impression que ce qui est particulièrement dur, c'est d'être capable de détecter que quelque chose a un autre sens dans l'esprit de l'étudiant que celui qui est standard pour nous, et que du coup, il faut particulièrement insister sur le fait qu'on lui donne un sens différent. D'une certaine manière, c'est proche du discours de Berry sur les inversions mentales causées par les nouvelles technologies: copier, maintenant, c'est Ctrl+C, pas "recopier".