Algorithmique au collège
Voici le point de vue de David Monniaux sur l’enseignement de l’informatique (je le trouve intéressant et on peut l’appliquer à l’algorithmique au collège et au lycée) :
« Il existe au sujet de l’enseignement de l’informatique un grand flou, suivant ce que les gens mettent sous ce terme.
Pour certains, il s’agit d’enseigner des usages de certaines technologies : naguère bureautique (traitement de texte, tableur), puis « Internet » (navigation, envoi et réception de courriers électroniques, consignes moralisantes sur la copie illicite et sur la sécurité en ligne). De fait, de nombreux jeunes, notamment ceux qui disposent chez eux du matériel nécessaire, sont plus au fait de certaines manipulations de tablettes ou d’ordinateur Windows que certains enseignants.
Pour d’autres, il s’agit d’enseigner des techniques permettant de réaliser des applications informatiques telles que des applications Web, des logiciels pour tablette, etc., dans le but de former des développeurs industriels. Certains voient donc dans un apprentissage précoce la clef de la compétitivité française. Personnellement, je suis très sceptique envers ce genre de propositions, pour de multiples raisons. Tout d’abord, j’estime que ce n’est pas le travail de l’école, généraliste, que d’enseigner tôt des technologies spécifiques dans le but d’occuper tel ou tel emploi : il sera toujours temps de les aborder plus tard. Ensuite, les langages et systèmes de développement intéressants industriellement sont rarement pédagogiques (je pense en particulier à Java).
Enfin, pour d’autres, il s’agit d’enseigner les bases conceptuelles avec lesquelles appréhender et comprendre le monde numérique qui les entoure ; bases dont il est d’ailleurs manifeste que tant d’adultes ne les ont pas, tant la pensée magique semble fréquente en matière d’informatique. Cet enseignement peut certes passer par de la programmation(personne de sérieux ne parle « d’enseigner le code » ou « d’enseigner le codage »), mais l’objectif n’est pas de former des programmeurs. Je voudrais insister là dessus.
J’ai enseigné de 1999 à 2009 la programmation, dans divers établissements (Université Paris-Dauphine, ENSTA, École polytechnique). Dans tous les cas, il s’agissait d’un enseignement obligatoire dans le cadre d’une formation pluridisciplinaire qui ne visait pas spécifiquement à former des développeurs.
Premier constat : tout le monde n’arrive pas au baccalauréat , voire au baccalauréat+2, en maîtrisant les manipulations des outils informatiques. J’ai eu affaire à des étudiants qui ne savaient pas taper sur un clavier. Certes, ils arrivaient d’Afrique, et aussi peut-on peut-être me reprocher d’évoquer une époque révolue. Je pense toutefois qu’il faut être prudent quand au niveau des compétences qui, n’étant pas enseignées à l’école, le sont éventuellement au sein des familles, ne serait-ce que parce que leur équipement varie considérablement : tous les adolescents n’ont pas un ordinateur dans leur chambre.
Deuxième constat : contrairement à ce que l’on peut croire, la principale difficulté dans l’apprentissage de la programmation n’est pas dans la « technique » (syntaxe plus ou moins heureuse du langage de programmation, environnement de développement etc.). Certes, celle-ci constitue une difficulté et peut rebuter, mais les principales difficultés sont ailleurs :
-
L’incapacité à diviser un problème en sous-problèmes, de taille et de complexité maîtrisables, que l’on peut successivement résoudre et dont on peut tester séparément les solutions ; l’incapacité à fixer des étapes intermédiaires qui, certes, ne résolvent pas entièrement la question originale, mais constituent des jalons utiles.
-
L’incapacité à rechercher la cause d’une dysfonctionnement (« bug ») : incapacité à décomposer le problème en éléments vérifiables individuellement, refus de lire les messages d’erreur, refus de lire la documentation, alors que devant un dysfonctionnement il faut au contraire posément analyser ce qui se passe et bien distinguer ce dont on est sûr de ce que l’on espère (très difficile).
-
L’incapacité à se remettre en cause : il est très dur pour les étudiants d’admettre que la création de leur esprit puisse être incorrecte, de sorte qu’ils attribuent souvent les éventuels dysfonctionnements au système de développement (pourtant conçu par des professionnels et abondamment testé). La programmation est un exercice d’humilité.
On le voit, il s’agit plus de faiblesses cognitives que de problèmes spécifiquement informatiques. Il est possible que l’apprentissage de la programmation aide à les surmonter.
En d’autres termes, je vois la programmation comme un apprentissage d’une certaine forme de rigueur : il faut toujours être prêt à se remettre en cause et à admettre ses erreurs, il ne faut faire confiance à rien que l’on n’ait prouvé ou testé, il faut savoir analyser et décomposer un problème.
Lorsque l’on progresse dans le domaine, une autre difficulté est de savoir distinguer des problèmes apparemment proches mais en fait fort différents, ou de constater que des problèmes apparemment sans rapport sont en fait proches, voire identiques. »