Lorsque l'on propose de réintroduire l'enseignement de l'informatique au lycée, les critiques fusent : l'informatique serait une technique et non une science, elle serait donc indigne de figurer au programme d'une formation générale ; l'informatique ne développe pas la Pensée ; les connaissances acquises seront de toute façon caduques dans deux ans etc. Il semble que ces critiques sont largement dues à la polysémie du terme « informatique » et que les points de vue des uns et des autres au sujet de l'enseignement ne sont pas aussi irréconciliables qu'il n'y paraît.
On peut attribuer quatre sens au terme « informatique » dans un contexte scolaire ou universitaire :
- C'est la science qui étudie la notion de calcul, science d'ailleurs développée comme une branche de la logique mathématique d'une part (travaux de Gödel, de Turing, etc.) et de l'analyse d'autre part (p.ex. les méthodes de Runge-Kutta) avant même l'apparition des ordinateurs.
- C'est la programmation des ordinateurs, qui suppose la connaissance d'un certain nombre d'éléments techniques (particularités de tel ou tel langage de programmation).
- C'est l'utilisation de telle ou telle application, par exemple les forums en ligne, de tel ou tel logiciel ou matériel, par exemple du navigateur Internet Explorer ou du traitement de textes Microsoft Office.
- C'est l'utilisation à des fins pédagogiques de tel ou tel logiciel, par exemple un didacticiel d'apprentissage à l'orthographe, ou de « supports numériques ».
La raison des querelles au sujet de l'enseignement de l'informatique me paraît être que ceux qui le soutiennent défendent l'enseignement des points 1 et 2, lesquels donnent un cadre conceptuel pour 3, tandis que les opposants ne voient que les points 3 et 4 (sans doute souvent par ignorance des points 1 et 2).
Si l'on prend en compte cette différence de points de vue, les objections à l'encontre de l'enseignement de l'informatique deviennent compréhensibles. Ainsi, en effet, les particularités de fonctionnement de tel ou tel logiciel, par exemple le fameux Microsoft Word, peuvent changer tous les deux ans, de sorte qu'un apprentissage très tourné vers des « automatismes d'utilisation » n'a que peu d'intérêt pratique et aucun contenu conceptuel.
Le cliché de l'informatique qui changerait constamment, où tout serait en mouvement, où l'on serait lancé dans une course à l'échalote à six mois de délai de lancement de produits, n'est en revanche absolument pas vrai des points 1 et 2. On ne peut qu'inviter les gens qui répètent de pareilles sornettes à s'informer sur la réalité de l'informatique, au lieu de s'en remettre à la frénésie des effets d'annonce des constructeurs et des rubriques « high tech » des médias.
En ce qui concerne le point 1, les problèmes de l'algorithmique ou de la théorie des langages de programmation demandent souvent des années, voire des décennies, avant d'être résolus ; il existe d'ailleurs des problèmes vieux de 30, voire 70 ans pour lesquels on n'a pas de solution vraiment satisfaisante. Par exemple, depuis les travaux de théorie de la complexité du début des années 1970 on sait qu'il serait important théoriquement de séparer les classes P et NP, mais on n'a pas encore obtenu de résultat mathématique concluant dans ce domaine. Depuis les travaux de Presburger avant la seconde guerre mondiale, on sait que l'arithmétique linéaire sur les entiers admet un algorithmique d'élimination des quantificateurs, mais on essaye encore aujourd'hui de proposer des algorithmes moins coûteux.
Quant au point 2, il faut savoir que le logiciel a une inertie considérable. Les logiciels sont des objets d'une très grande complexité, très coûteux à créer et qui le sont donc le plus souvent au terme d'un développement itératif avec un lourd historique. Il y a une énorme différence entre le logiciel et, par exemple, des travaux de terrassement : on peut généralement accélérer les travaux en augmentant la quantité de personnel qui y sont affectés, alors qu'augmenter la quantité de personnel affectée à un développement logiciel peut augmenter son temps de développement. (1) Cela impose donc des délais longs et une certaine résistance au changement. De fait, on programme encore beaucoup avec des langages hérités des années 1950 (FORTRAN) ou 1970 (C). Par certains côtés, l'informatique est, contrairement aux apparences, un domaine très conservateur, selon le principe qu'on garde ce qui fonctionne même s'il serait peut-être souhaitable de tout casser pour le recréer en mieux.
Cette remarque au sujet de l'impossibilité d'enseigner un sujet qui se renouvelle pourrait d'ailleurs être appliquée à d'autres domaines. Personne pourtant n'objecte à l'enseignement de la littérature au motif que de nouveaux romans sortent chaque année, qu'il y a des modes, que de nombreux auteurs jadis connus sont maintenant bien oubliés. Ainsi, qui se souvient de Paul Bourget ?
On dit souvent que l'informatique n'apporte aucun concept nouveau et ne forme pas l'esprit. Je suis de l'avis contraire. L'informatique, et notamment la programmation, est un excellent outil d'apprentissage de la rigueur intellectuelle.
Année après année, j'ai affaire à des étudiants qui ne comprennent pas pourquoi le programme qu'ils conçu ne fonctionne pas comme ils le désireraient. Ils s'en étonnent, et blâment la machine et (excusez le terme technique) le compilateur, malgré l'implausibilité d'une pareille hypothèse. Pourquoi ? Ces étudiants confondent d'une part ce qu'ils ont voulu écrire, d'autre part ce qu'ils ont effectivement écrit. N'admettant pas qu'ils aient pu commettre une faute de pur raisonnement, ils cherchent à renvoyer la responsabilité à d'autres.
Quel rapport entre la programmation et la vie de la Cité ? On entend parfois des parlementaires s'étonner de l'application de lois qu'ils ont votées, voire écrites. Ainsi, le député Jean-Luc Warsmann a été rapporteur d'une loi qui modifiait très largement le droit français et a eu comme effet secondaire indésirable et indésiré de limiter les peines applicables à l'Église de scientologie. Il a cru que son texte n'aurait pas de conséquences sur la répression de nombreux crimes et délits, dont ceux commis par les sectes, mais ce n'est pas cela que dit le texte qu'il a écrit.
Je pousserais même l'analogie plus loin. Les programmeurs expérimentés savent qu'il faut limiter les modifications dans les systèmes déjà complexes, car on ne maîtrise pas forcémement les conséquences d'un changement apparemment purement anodin et administratif. Ils savent bien que sous prétexte de « simplification », on peut introduire des bugs subtils. Le législateur jouit d'un privilège comparé au programmeur : s'il introduit des erreurs, des incohérences, des imprécisions, il peut espérer que les services administratifs ou les juges feront une application intelligente. En revanche, un ordinateur mal programmé et commandant une machine de radiothérapie est tout à fait capable d'administrer une dose excessive à un patient. Outre la rigueur, la programmation apprend donc la prudence et l'humilité, car elle met celui qui la pratique en face des limitations de son propre esprit et de sa capacité à appréhender la complexité.
On nous dit qu'il est vain d'enseigner la programmation vu que, de toute façon, personne ou presque n'a à programmer, que cette tâche est habituellement confiée à des techniciens. Tout d'abord, c'est assez inexact, car de nos jours de nombreux logiciels sont « scriptables » et que la simple installation d'un « blog » ou l'usage d'un logiciel de bureautique peut amener à, de fait, programmer. Ensuite, la majeure partie de exercices scolaires ne correspondent à rien dans le monde hors de l'école. En éducation physique, on pratique le triple saut, le saut à la perche, les barres asymétriques — est-il courant que les gestes techniques adaptés à ces activités servent à la vie d'autres personnes que les sportifs professionnels ? En français, on apprend à faire des « commentaires composés » d'œuvres littéraires, qui en fait hors du système scolaire ? Qui rédige des dissertations avec un plan thèse-antithèse-synthèse, sans séparation en sections ni encarts ni bibliographie ? Ainsi, la grande majorité des exercices scolaires n'ont pas vocation à être immédiatement appliqués dans la vie personnelle ou professionnelle, mais à exercices des mécanismes physique ou mentaux qui pourront être utiles. La programmation développe la capacité à décomposer un problème et à raisonner sur les causes des dysfonctionnements.
Enfin, la programmation peut servir à démystifier la chose informatique. J'entends parfois des sottises concernant l'informatique, sottises qu'il est parfois assez difficile à combattre car les personnes qui les énoncent n'ont absolument aucune compréhension des mécanismes fondamentaux qui sous-tendent le fonctionnement des dispositifs informatisés. Comment, par exemple, discuter des enjeux citoyens et culturels autour des ordinateurs de vote, du vote électronique, ou des moteurs de recherche sur Internet avec des gens qui ignorent même les généralités du fonctionnement informatique, les notions de codage, de mémoire et d'algorithme ?
Enfin, je n'admets guère cette théorie selon laquelle on ne devrait pas enseigner de techniques dans l'enseignement général... tout simplement parce que de nombreuses techniques sont déjà enseignées. Le dessin et la musique, c'est essentiellement de la technique tant qu'on n'a pas un niveau suffisant pour pouvoir vraiment s'exprimer artistiquement. L'orthographe et la grammaire, c'est de la technique, une application d'un certain nombre de règles plus ou moins arbitraires, répercutant un historique, parfois contre-intuitives. Les travaux pratiques de physique et de chimie supposent l'apprentissage du fonctionnement de nombreux dispositifs techniques.
Là où je rejoins les critiques de l'introduction d'un enseignement de l'informatique à l'école, c'est au niveau des dispositifs pédagogiques (le point 4). J'ai entendu plusieurs fois parler de systèmes de « bureaux virtuels » peu fiables ; un tableau noir ne tombe pas en panne. J'ai peur des « gadgets », de ces dispositifs qu'on intègre car c'est beau, ça fait joli... mais au final qui apportent peu.
On a parfois entendu que l'apprentissage de telle ou telle technique, de tel ou tel savoir traditionnellement enseigné serait moins nécessaire de part l'utilisation de l'informatique. Le correcteur orthographique intégré des traitements de texte limiterait la nécessité de pratiquer l'écriture ; mais ce correcteur ne distingue pas les homophones, n'applique pas les règles de grammaire, et parfois suggère des modifications incorrectes ; les correcteurs grammaticaux sont encore loin d'être fiables. Bref, il s'agit d'outils très utiles pour limiter le côté fastidieux de la relecture et des corrections, mais qui ne se substituent pas à l'apprentissage de la langue.
Il en est de même des outils informatiques de calcul. Certes, l'informatique a permis d'oublier certains aspects particulièrement techniques et pénibles, comme les calculs numériques manuels avec usage de la règle à calcul. Cependant, le calcul informatisé, qu'il soit algébrique ou numérique, souffre de limitations qu'il est bon de connaître ; et on connaît ces limitations en comprenant comment fonctionne le calcul informatique, ce qui implique en général de savoir mener les calculs à la main.
Au final, il me semble raisonnable de prévoir qu'au collège et lycée, on ait à la fois un enseignement à la fois des techniques utiles dans la vie courante et professionnelle (Web, traitement de textes), et un enseignement de programmation, cette dernière servant notamment à inculquer de la rigueur et à démystifier le fonctionnement des dispositifs informatisés auxquels le citoyen est confronté. On décide bien mieux quand on comprend un minimum à quoi on a affaire.
(1) Voir par exemple Le Mythe du Mois-Homme, de Fred Brooks