PROJET AUTOBLOG


le hollandais volant

Site original : le hollandais volant

⇐ retour index

Pourquoi j’ai peur de voir le code être enseigné à l’école

samedi 5 janvier 2019 à 17:30

schémas d’un PCB
Ceci est une réflexion inspirée de cet article (avec lequel je suis assez d’accord) :

Je suis totalement pour permettre aux jeunes de découvrir le monde du code : ils utilisent déjà pour la plupart des logiciels et des « choses » qui existent grâce au code. Je ne vois donc pas de raison pour leur fermer la voie. Autant pour la pyrotechnie, l’aviation ou l’armurerie, je comprends, autant pour le code, non.

D’un autre côté, s’ils veulent laisser des profs enseigner le code, il va falloir faire évoluer le système en profondeur. On ne peut pas apprendre à quelqu’un à devenir un codeur, comme on n’apprend pas à quelqu’un à devenir un peintre ou un musicien.

Le code, c’est une machine à erreurs

Premièrement, je vois mal des profs (actuels et en France, je ne saurais le dire pour ailleurs) enseigner aux élèves à coder. Pour la simple raison que l’enseignement actuel est basé sur le par-cœur et sur « l’interdiction » de faire des erreurs.

Pour l’instant, que ce soit en math, en français ou en physique, si tu fais une erreur, on te retire un point : l’erreur c’est mal.

ÉDIT : Arnaud me signale un point de vu intéressant au sujet de la pression faite au niveau des erreurs, en particulier sur le rôle des parents là-dedans plus que celui des enseignants.
(Voyez aussi le premier commentaire sous cet article pour plus de détails sur tout ça ; je ne souhaite pas trop éditer cet article davantage)

Or, la prog, c’est tout le contraire justement.
Personne, même après 30 ans, n’écrit un code qui fonctionne du premier coup. On fait des milliers d’erreurs avant d’avoir une seule fonction qui fonctionne, et on en fera mille autres pour la fonction suivantes, et ainsi de suite.

Dans la plupart des langages, si on fait un code faux, le compilateur indique où se trouve l’erreur, comment la corriger et pourquoi elle est là, mais elle laisse toujours le soin à celui qui code de corriger l’erreur. C’est une sacrée différence avec l’enseignement d’une autre langue comme l’anglais, par exemple, où l’on donne d’abord la bonne réponse (la bonne prononciation, la bonne conjugaison, etc.) puis on dit « répète après moi ».

Je ne connais aucune autre discipline où l’apprentissage est autant basée sur l’erreur que le code.

La musique ? Non : on te dit comment faire un "la", tu fais un "la". Si tu fais un "do" tu es puni, car tu ne fais pas exactement ce qui est demandé.
L’art ? Non. Les math, la grammaire, l’anglais ? Pareil.
Le sport ? Non : c’est pas basé sur l’erreur, mais sur le progrès permanent. C’est important, mais c’est pas pareil. Et puis dans les sports de duel, l’erreur de l’un est le contraire d’une erreur pour l’autre, donc il est impossible de ne pas voir d’erreurs en sport.

En code, il n’y a pas de bonne réponse

Deuxièmement, parce que le code c’est de l’art : il y a 10 000 façons d’arriver au même résultat. Certains auront des avantages que d’autres n’ont pas, mais ça ne veut pas dire qu’il y a des codes "faux" et des codes "justes".

Or, combien de fois, en math par exemple, des points sont retirés sur une copie non pas parce que le résultat est faux, mais parce que la méthode pour parvenir au résultat n’est pas celle vue avec le professeur ? Ça arrive très souvent.

Parfois c’est justifié : dans un cours sur la trigonométrie, si on demande de calculer la longueur d’un côté d’un triangle, il faut utiliser la trigo et pas Pythagore.
Mais la « vraie vie » ne marche pas comme ça, et la prog non plus.

Aussi, qui dit « plusieurs façons de faire », dit « un choix à faire ».

Là encore, vous avez déjà vu la tête d’un gamin à qui on dit « tu choisis la méthode que tu veux » ? Ils sont perdus : ils ne savent pas choisir !
Trop habitués aux consignes du style « En utilisant le cosinus, calculer x. » ou « En vous servant de Pythagore, trouvez x. ». Alors qu’une consigne du style « Déterminez x. » serait tellement mieux, ne serait-ce que pour l’élève déterre lui-même les outils adéquats à la résolution du problème.

Généralement, les examens finaux (brevet, bac) sont fait comme ça : il s’agit de trouver la réponse qu’importe l’outil utilisé. Mais c’est souvent la première fois que l’élève se trouve face à ce genre de question et il panique.

Le code, c’est des tas de choix à faire : quel langage ? quel framework ? quelle fonction ? quelle API ?
Et je ne parle pas des versions, de l’IDE ou du nom des variables… Quand on voit le nombre de gens qui râlent sur la diversité des distributions Linux et sur l’impossibilité de faire un choix, c’est mal barré…

La prog, c’est sans cesse faire des choix, des choix, des choix…

… et bien-sûr, forcément, parfois on fait le mauvais choix : utiliser du C pour faire un formulaire de renseignement pour un contact, c’est une mauvaise idée.
Du coup on a encore un choix : rester sur son erreur pour ne pas perdre 15h de travail ? Ou tout balancer et recommencer avec un autre langage plus adapté ?

Il suffit de voir comment les élèves font de l’art plastique ou font leur exercice de rédaction : c’est rare qu’ils choisissent de recommencer de zéro quand ils ont passé 2h à faire un truc qui n’avance plus…

Programmer, c’est en fait revenir à ce qu’on faisait à l’école maternelle : si je tombe, je me relève. 1 fois, 5 fois, 20 fois : peu importe. Les jeunes enfants n’ont pas peur de détruire leur sculpture en pâte à modeler ou en Lego, s’ils voient que ce qu’ils ont fait ne tient pas debout. Ils cassent tout et ils recommencent.

Demandez maintenant à un ingénieur à jeter un projet mort-né sur lequel il a balancé 100 k€ : il refusera.
Tout ça parce qu’il ne verra que les coûts passé, et non le gain à venir de laisser tomber ça : revenir sur des dépenses passées est impossible, donc autant cesser les dépenses inutiles maintenant plutôt que plus tard, non ?
En toute logique, oui.
Économiquement parlant, aussi.
En pratique, aucun cadre d’entreprise ne fera ça, et c’est psychologique (et cette éternelle « interdiction de faire des erreurs » en est probablement la cause).

Or en prog, justement il faut être logique. Oui, on a le droit de préférer le C au PHP, mais s’il s’agit de faire dans le web, le C est aussi adapté que prendre une voiture F1 pour labourer son jardin.

Faut pas avoir peur de casser des trucs : c’est comme ça qu’on apprend.
Et il ne faut pas non plus avoir peur de faire à sa façon, de faire différemment du prof. En code (contrairement à l’orthographe), la différence est une force.

En code, il n’y a pas d’études puis le travail.

(l’emphase est bien sur le « puis »).

Programmer c’est apprendre tout sa vie, constamment.
Que ce soit une nouvelle API, un nouveau langage, ou tout simplement de nouvelles choses à faire qu’on ne pensait pas possible avant, l’apprentissage est constant.

L’école nous dresse pourtant au contraire à apprendre des choses durant 5 ans, recracher ça en 4 heures lors d’un examen, et après c’est bon, on a le droit d’avoir les clés d’un métier pour mettre en pratique tout ce qu’on a appris. Apprentissage, validation, mise en pratique. De temps en temps on a droit à une formation de mise à niveau.

La prog, encore une fois, c’est différent : on apprend et on met en pratique tout en même temps ; et la validation est-elle instantanée : c’est le compilateur qui nous valide ça à la volée : ton code est faux, ça marche pas, tu t’arrêtes. Ton code est valide, il marche, tu peux continuer.

Si l’on n’est pas prêt à apprendre de nouvelles choses tous les jours, il ne faut pas coder.
Peut-être que dans 5 ans le langage que vous maîtrisez aujourd’hui sera oublié : il faudra vous recycler. C’est pas grave, c’est normal. Mais faudra passer par là.

Ceci est valable pour l’élève qui apprend un langage aujourd’hui, mais aussi pour le prof.

Pour conclure

Pour résumer, si j’ai peur d’une chose, c’est que l’enseignement n’évolue pas assez pour permettre d’apprendre la programmation.

Le code ce n’est pas écrire des choses justes tout le temps. C’est écrire des choses, fausses et justes, puis corriger peu à peu ce qui est faux.
Le code ce n’est pas reproduire les mêmes gestes que l’enseignant. C’est faire le choix de ses propres gestes, du moment que le résultat est celui qui est demandé.
Le code ce n’est pas apprendre 5 ans, valider en 4 heures et travailler durant 40 ans. C’est apprendre en travaillant et valider à la volée tout en même temps.

Enfin, le code est pour l’instant la seule discipline (avec le sport et éventuellement la musique) que la plupart des codeurs ont commencés par eux-mêmes bien avant que l’école ne les mette sur cette voie.

Tous les informaticiens jusqu’à maintenant sont surtout des passionnés qui ont débuté dans leur chambre. Personne, ou alors vraiment très peu de gens, ont tapé leur première ligne de code dans une salle de classe (contrairement à une équation, un poème, un paragraphe en anglais, une réaction chimique ou une carte de l’Europe).

Donc faire découvrir le code à l’école, je suis totalement pour, histoire de révéler des talents cachés chez des jeunes qui adorent ça sans le savoir, mais l’enseigner comme on enseigne les math ou le français, ça promet un échec monumental, qui ne viendra pas de l’élève, ni du prof, ni du langage de programmation enseigné.

image de Dilshan Jayakody