URL: https://linuxfr.org/users/sleepingtux/journaux/de-l-enseignement-de-la-programmation-en-classe-preparatoire Title: De l'enseignement de la programmation en classe préparatoire Authors: Manger sur pattes Date: 2012年03月24日T00:19:13+01:00 License: CC By-SA Tags: mathématiques Score: 15 Le monde court un grave danger. Il y a quelques décennies, avec l'arrivée de l'outil informatique, la programmation a pu se développer. Grâce à elle, n'importe quel esprit capable d'exprimer clairement ses idées et de les structurer peut arriver à de grands résultats avec bien moins d'efforts que dans tous les autres domaines. En dessin : dessine un joli mouton ; si tu en veux un second il faudra redessiner le même en espérant avoir le même coup de crayon. Le cerveau peut s'habituer au bout d'un certain temps et on peut commencer à dessiner facilement et rapidement de jolis moutons, mais ça reste plutôt lent. En programmation : on a fait notre fonction, on n'a pas à la refaire chaque fois qu'on veut s'en servir. La programmation, c'est vraiment cool. Malheureusement, c'est aussi dangereux. Un tel domaine peut attirer beaucoup trop de monde, délaissant ainsi les autres secteurs. Afin d'éviter de ne former plus que des ingénieurs en informatique et de ne plus avoir personne quand il s'agit de construire un pont, une décision doit être prise. C'est ainsi que naquit l'épreuve d'algorithmie d'une certaine école d'ingénieur. Les classes préparatoires doivent alors former leurs élèves - déjà assez chargés - à la programmation, ce qui devrait déjà les empêcher de trop s'attacher à ce domaine. Mais, cela n'est pas assez. Ils risqueraient de trouver cela intéressant malgré tout et finalement découvrir et approfondir ce domaine, ce qui serait contre-productif. Il faut donc choisir un langage de programmation approprié. Pas question d'utiliser un BASIC qui serait beaucoup trop simple à enseigner ou à comprendre et qui permettrait en plus de faire des choses sympathiques avec les fonctions graphiques. Enseigner le brainfuck ou l'assembleur ? Ce serait pousser le bouchon un peu trop loin ; les gens devineraient un peu trop facilement qu'on essaie de les dégoûter. Java ou C++ ? Trop à apprendre, on ne veut pas que les élèves passent trop de temps dessus non plus. C ? Il y a de l'idée, mais ça reste un assez lourd pour des débutants. Une solution est finalement trouvée : utiliser un logiciel qui n'est absolument pas prévu pour la programmation comme outil de programmation : le logiciel de calcul formel Maple. Bien qu'un excellent outil de calcul formel, quand utilisé pour la programmation il réussit l'exploit d'allier la lenteur d'un langage interprété non optimisé (facteur 500 par rapport au C pour un [crible d'Ératosthène](http://fr.wikipedia.org/wiki/crible d\'Ératosthène "Définition Wikipédia") dans mon souvenir) et une certaine complexité qui sort un peu de nulle part. Quelques exemples : - Ajouter un élément à une liste ? `L := [op(L), nouvel_element];`. Parce qu'une fonction comme `Add(L, nouvel_element)` ou éventuellement `L.Add(nouvel_element)` si on va jusqu'à faire un peu d'objet, voire `L[size(L)+1] = nouvel_element`, ce serait beaucoup trop simple. - Les listes sont limitées à 100 éléments. Au-delà, il faut utiliser des Array, qui ont une taille définie à la création et qui ne se laissent pas facilement redimensionner (dans les versions <=13 du moins), donc pas possible d'ajouter facilement d'éléments. - L'interface est celle d'un outil de calcul formel. Un peu comme un shell, sauf qu'on peut éditer les commandes déjà entrées et les réexécuter. On entre tout son code sous la forme d'une séquence d'instruction sur plusieurs lignes, sans la moindre notion de coloration syntaxique ou d'indentation (encore que, dans les dernières versions, il y a des progrès de ce point de vue), et on appuie sur entrée en priant. Malheureusement, il est possible de faire des fonctions, il faut donc faire attention à ce qu'une telle possibilité ne facilite pas trop la vie aux étudiants. _Nota bene_ : penser à utiliser les anciennes versions qui [affichent tout le code dans un rouge criard qui pique les yeux](http://i.imgur.com/bZNbl.gif) - Pas d'outil d'exécution pas à pas pour débugger ou de choses du genre. Et puis quoi encore ? Un peu de printf-debugging, ça forge le caractère ! - Pas de possibilité d'entrée utilisateur : il ne faut surtout pas que les étudiants réalisent qu'on peut interagir avec la machine et donc faire des programmes plus amusants qu'un tri en N^2. Une fois cette première étape passée, les futurs ingénieurs devraient avoir une vision assez négative de tout ce qui touche à la programmation, tout en leur donnant quelques notions quand même au cas où. Mission accomplie. --- Fin de l'ironie Je vous l'accorde, il y a exagération sur certains points (pas besoin de gérer les entrées quand on fait de l'algorithmie pure). Par ailleurs, certains sujets sont intéressants : anti-aliasing sur une ligne (même si là c'est plus _trouve-la-formule-sort-le-code_ que de l'algorithmie), simulation d'incendie de forêts avec un petit modèle), mais il reste que l'outil utilisé est incroyablement inapproprié pour ce genre de tâches. Le seul avantage est l'ensemble des fonctions de plottage, mais c'est pas comme s'il était impossible d'écrire une fonction capable de tracer un plot à partir d'un tableau et de filer le fichier à tout le monde. Enfin bref, n'importe quel langage ferait mieux l'affaire, que ce soit l'antique QBasic de Microsoft, Python... Les langages fortement typés sont biens quand on veut être sûr de ce qu'on fait (c'est un peu le but quand on code aussi), mais pour un premier contact avec la programmation, c'est peut-être un peu rude quand on veut juste voir un peu la logique générale variable-instructions. Après, on peut comprendre cette décision, si on tient compte du fait que pour d'autres épreuves, Maple est utilisé en tant que logiciel de calcul formel : vu que de toute façons, Maple est utilisé, autant s'en servir aussi pour l'algorithmie, même si c'est pas fait pour. Il doit aussi y avoir plein de confusions entre algorithmie et programmation dans le texte ci-dessus ; d'une manière générale, à moins d'avoir de fantastiques capacités d'abstraction, il vaut mieux savoir programmer avant de faire de l'algorithmie ; pour pouvoir profiter au mieux des algorithmes qu'on compose, il faut que le langage de programmation qu'on utilise soit agréable à employer, donc ça revient plus ou moins à la même problématique pour un débutant total. Maple n'est pas un logiciel libre et, par ailleurs, la version étudiante coûte un paquet (150€) ; dans ce journal je tenais plus à me focaliser sur le côté inapproprié de l'outil que sur le fait qu'on forme les gens à un outil non libre, chose qui a déjà été maintes fois débattue. À côté de ça, les alternatives libres qui peuvent aider à former les gens à la programmation sont nombreuses : Python si on se restreint un peu, Gambas a des possibilités intéressantes mais je ne sais pas s'il est très pédagogique, Smallbasic (http://smallbasic.sourceforge.net/)....