Le choix du langage à enseigner est quelque chose de très compliqué. Je suis enseignant en IUT réseaux & télécoms et outre que je vais récupérer ces bacheliers l'an prochain, je note plusieurs points.
Tout d'abord, dans nos programmes pédagogiques (à la rédaction desquels, nous, enseignants, participons), les langages ne sont pas précisés, seuls les concepts et notions le sont (de même qu'en réseaux, les marques des routeurs ne sont pas dans le programme…). Et c'est une excellente chose puisque cela remet à sa place l'objectif des cours qui n'est pas de former des gens qui programmeront en java mais de former des gens capables de programmer dans un langage impératif, dans un langage objet ou dans un langage fonctionnel modulo une adaptation à la syntaxe et aux subtilités du dit langage. Bref, j'estime que mettre en avant Python n'est pas une très mauvaise idée (c'est un joli langage), mais que ça peut inciter à enseigner Python plutôt que les concepts de la programmation, ce qui serait fort dommage. Et le fait que Python soit à la mode ne devrait pas avoir d'importance dans le débat.
Même quand les programmes ne changent pas, le contenu et la mise en oeuvre peuvent évoluer. Ainsi, il y a quelques années nous (et la plupart des autres départements aussi) enseignions presque tout en java (et auparavant presque tout en C, mais c'était avant moi). Récemment, localement, nous avons changé de langage (et nos collègues d'autres départements ont fait une démarche similaire mais ils n'ont pas choisi le même langage). Et ce changement a demandé de tenir compte des spécificités du public (pas excellents en maths donc python, haskell perdent de l'intérêt ; ont des connaissances en système donc sh est envisageable). Ça veut dire que les arguments de choix ne s'appliqueraient pas de la même façon au programme de Terminale S…
Auparavant, la partie conceptuelle se faisait en une sorte de pascal, la partie implémentation en Java. J'ai décidé de simplifier tout ça pour avoir un même langage et surtout ne pas écrire le moindre mot-clé sans l'expliquer aux étudiants.
J'ai hésité pour le langage entre plusieurs voici certains des arguments qui m'ont fait les rejeter :
C : pas de boucle for[1] ; impossible de faire de la manipulation de chaines de caractères sans parler de pointeurs.
Python : Indentation significative ; les opérateurs de comparaison ne sont pas binaires, ce qui rend l'explication de l'évaluation des expressions compliquée.[2]
Javascript : Problèmes de typage ; mauvaise boucle for.[1]
sh : expressions numériques trop complexes ; mots-clefs inconsistants (fi ou end).
Ruby, Perl, PHP : je ne les aime pas (et ils ne sont pas les langages les plus accessibles ou lisibles).
Ocaml, Haskell, Clojure : pas le bon public.
Groovy, Boo : je me rappelle les avoir observés et éliminés, je ne sais plus pourquoi.
Au final, j'ai choisi Lua que je n'avais jamais vraiment pratiqué mais qui n'a aucun des défauts précédemment énumérés. Il a aussi d'autres avantages (il n'y a pas de surcharge des opérateurs + et / par exemple). Le seul défaut que je lui trouve étant que les variables des fonctions sont par défaut globales. Mais il faut bien se rendre compte que les étudiants n'utiliseront jamais lua dans leur travail : ce langage sert uniquement à poser les concepts algorithmes, à structurer le code, la pensée et la compréhension qu'ils en ont. Je m'applique à leur expliquer que choisir un langage d'implémentation impose aussi des choses sur le comportement (typage ou numérotation des tableaux par exemple). En passant, pour m'amuser un peu, je fais un TP de programmation de jeux (ça ne va pas très loin) et j'ai été heureux de trouver love pour démarrer sans le moindre seuil.
[1] : la boucle for est censée être utilisée pour une itération bornée au départ. Pour une itération libre, c'est la boucle while. En C et java, le for de base est un while avec un peu de sucre ! Notez que c'est pire en Go !
[2] : 1<x<3 est une expression acceptable mathématiquement et syntaxiquement correcte en Python mais pas dans la plupart des langages. Pour qu'elle soit syntaxiquement correcte, il faut parler d'opérateurs ternaires (et plus) ce dont je préfère me passer.
[^] # Re: Mon grain de sel
Posté par 태 (site web personnel) . En réponse au journal Lycée et informatique : spécialité ISN en terminale S. Évalué à 7. Dernière modification le 24 mars 2013 à 09:37.
Le choix du langage à enseigner est quelque chose de très compliqué. Je suis enseignant en IUT réseaux & télécoms et outre que je vais récupérer ces bacheliers l'an prochain, je note plusieurs points.
Tout d'abord, dans nos programmes pédagogiques (à la rédaction desquels, nous, enseignants, participons), les langages ne sont pas précisés, seuls les concepts et notions le sont (de même qu'en réseaux, les marques des routeurs ne sont pas dans le programme…). Et c'est une excellente chose puisque cela remet à sa place l'objectif des cours qui n'est pas de former des gens qui programmeront en java mais de former des gens capables de programmer dans un langage impératif, dans un langage objet ou dans un langage fonctionnel modulo une adaptation à la syntaxe et aux subtilités du dit langage. Bref, j'estime que mettre en avant Python n'est pas une très mauvaise idée (c'est un joli langage), mais que ça peut inciter à enseigner Python plutôt que les concepts de la programmation, ce qui serait fort dommage. Et le fait que Python soit à la mode ne devrait pas avoir d'importance dans le débat.
Même quand les programmes ne changent pas, le contenu et la mise en oeuvre peuvent évoluer. Ainsi, il y a quelques années nous (et la plupart des autres départements aussi) enseignions presque tout en java (et auparavant presque tout en C, mais c'était avant moi). Récemment, localement, nous avons changé de langage (et nos collègues d'autres départements ont fait une démarche similaire mais ils n'ont pas choisi le même langage). Et ce changement a demandé de tenir compte des spécificités du public (pas excellents en maths donc python, haskell perdent de l'intérêt ; ont des connaissances en système donc sh est envisageable). Ça veut dire que les arguments de choix ne s'appliqueraient pas de la même façon au programme de Terminale S…
Auparavant, la partie conceptuelle se faisait en une sorte de pascal, la partie implémentation en Java. J'ai décidé de simplifier tout ça pour avoir un même langage et surtout ne pas écrire le moindre mot-clé sans l'expliquer aux étudiants.
J'ai hésité pour le langage entre plusieurs voici certains des arguments qui m'ont fait les rejeter :
Au final, j'ai choisi
Luaque je n'avais jamais vraiment pratiqué mais qui n'a aucun des défauts précédemment énumérés. Il a aussi d'autres avantages (il n'y a pas de surcharge des opérateurs + et / par exemple). Le seul défaut que je lui trouve étant que les variables des fonctions sont par défaut globales. Mais il faut bien se rendre compte que les étudiants n'utiliseront jamais lua dans leur travail : ce langage sert uniquement à poser les concepts algorithmes, à structurer le code, la pensée et la compréhension qu'ils en ont. Je m'applique à leur expliquer que choisir un langage d'implémentation impose aussi des choses sur le comportement (typage ou numérotation des tableaux par exemple). En passant, pour m'amuser un peu, je fais un TP de programmation de jeux (ça ne va pas très loin) et j'ai été heureux de trouver love pour démarrer sans le moindre seuil.[1] : la boucle for est censée être utilisée pour une itération bornée au départ. Pour une itération libre, c'est la boucle while. En C et java, le for de base est un while avec un peu de sucre ! Notez que c'est pire en Go !
[2] : 1<x<3 est une expression acceptable mathématiquement et syntaxiquement correcte en Python mais pas dans la plupart des langages. Pour qu'elle soit syntaxiquement correcte, il faut parler d'opérateurs ternaires (et plus) ce dont je préfère me passer.