J'ai commencé à enseigner l'informatique en 1999 ; il me semble assez légitime et nécessaire d'en faire un petit bilan.

Pendant dix ans, j'ai quasi exclusivement encadré des travaux dirigés et surtout pratiques de programmation et d'algorithmique, notamment de programmation pour débutants. On peut caricaturer cela par « rechercher où l'étudiant a oublié de mettre un point-virgule » ou, pour les cours plus avancés, déboguer le code des étudiants. J'ai trouvé cela intéressant non pas pour les aspects scientifiques ou techniques (assez répétitifs) mais pour l'observation des étudiants.

Je suis loin d'être le seul enseignant à déplorer que les étudiants ne lisent pas les messages d'erreur et n'indentent pas leurs programmes, quoi que disent les enseignants, qui pourtant ont l'expérience pour eux. Je serais curieux de savoir s'il y a une théorie psychologique qui expliquerait cela.

La principale difficulté du débogage pour les étudiants est la difficulté qu'il y a pour eux à s'imaginer que ce qu'ils ont écrit ne fait pas ce qu'ils voudraient. On entend parfois des étudiants invoquer un possible bug du compilateur, alors qu'évidemment pareil problème est bien plus improbable qu'une erreur de débutant. Bref, le débutant n'admet pas qu'il puisse se tromper. J'ignore également les théories psychologiques sur ce sujet, qui doit dépasser largement du cadre de l'informatique.

Le débutant (ou d'ailleurs le non débutant) a également du mal à ne pas confondre le nom, ou la fonction, qu'il donne à un objet, et son action effective. Par exemple. il va rechercher un bug dans une procédure A qui appelle une procédure minimum sans rechercher si le problème vient de la procédure minimum, en étant persuadé que parce qu'elle s'appelle minimum elle calcule effectivement le minimum. Là encore, il doit y avoir une théorie sur la confusion entre ce qu'un objet est censé faire et ce qu'il fait effectivement — confusion qui doit d'ailleurs régner dans d'autres champs.

Un correspondant me rappelle un phénomène que j'ai également constaté : l'étudiant a fait un programme presque correct, et au lieu de chercher à le corriger méthodiquement, procède à des changements hasardeux voire aléatoires qui le détruisent progressivement. Là encore, j'aimerais une explication psychologique. (Il est possible que cela soit lié à l'idée qu'« il faut bien faire quelque chose », même si l'on ne comprend pas ce que l'on fait.)

Je n'ai, hélas pour mon expérience personnelle, jamais enseigné les réseaux, les bases de données ou le système, les autres enseignements de masse typiques. J'ai enseigné des modules de spécialité proches de mes activités de recherche, mais je n'ai guère d'observation à en faire si ce n'est l'apathie d'une bonne partie des étudiants lorsqu'il s'agit d'un module obligatoire, que sans doute ils jugent éloigné de leurs besoins, peut-être d'ailleurs à raison.

L'enseignement que j'ai eu le plus de plaisir à assurer a sans doute été les « petites classes » du cours de logique, calculabilité et complexité. Tout d'abord, j'ai dû apprendre des mathématiques dont je ne me rappelais plus ou que je n'avais jamais apprises. J'ai appris début juillet que j'allais enseigner dans ce cours fin août, j'ai donc lu divers ouvrages sur la logique, les théorèmes d'incomplétude de Gödel, et la théorie de la complexité.

Disons-le franchement, ce cours était « culturel » et non destiné à donner des compétences industriellement applicables. Le seul point qui me semble avoir une utilité pratique est que reconnaître des problèmes indécidables (resp. de haute complexité) permet d'éviter de rechercher pour eux des algorithmes de décision (resp. des algorithmes de décision de faible complexité) : ce n'est donc pas un savoir-faire d'implication directe, plutôt une compréhension des enjeux. Quant à la logique mathématique, aux théorèmes de complétude, de compacité et d'incomplétude, je ne lui connais pas d'application pratique à part si l'on travaille sur des outils informatiques très spécifiques.

À l'exception de la partie complexité, un tel cours aurait d'ailleurs pu avoir lieu dans un département de mathématiques pures voire de philosophie.

Pour les étudiants, ce cours me semble intéressant en ce qu'il expose des limitations mathématiques fortes à ce qu'il est possible de faire. C'est je pense la première fois qu'ils ont affaire à des limites qui ne sont ni sociales, ni physiques (« on ne peut aller au-delà de la vitesse de la lumière »), ni dues à l'ignorance (« on n'en sait rien dans l'état de la science »). Par ailleurs, il permet de demystifier certains concepts galvaudés, notamment les théorèmes d'indécidabilité de Gödel. Enfin, il permet de toucher les limites de la science, puisqu'on touche directement la fameuse conjecture P≠NP.

Je suis content que nous soyons arrivés à attirer un quart d'une promotion sur un enseignement optionnel aussi décalé par rapport aux modes et à l'utilitarisme.