Une discussion en ligne sur les programmes de spécialité informatique en classe de première a dérivé, comme à peu près toutes les discussions sur l’initiation à la programmation, vers la question du langage utilisé lors de cette initiation (le programme impose Python).

Si ces discussions reviennent toujours, c’est qu’il y a à ce sujet quantité d’injonctions contradictoires. Voyons lesquelles.

Haut vs bas niveau

Un langage de programmation, c’est le cadre dans lequel un programmeur exprime sa pensée algorithmique afin de la transformer en logiciel. Le programmeur doit pour cela utiliser les concepts fournis par le langage (objets, fonctions…). Si ces concepts sont proches de ce que le matériel informatique sait directement faire, on parle de langage de bas niveau ; s’ils sont plus proches d’abstractions de pensée, voire d’abstractions mathématiques, on parle de langage de haut niveau.

Les langages de haut niveau masquent un certain nombre de réalités techniques parfois assez pénibles à gérer, et on peut donc valablement les conseiller pour les débutants. Cependant, en cachant ces réalités ils peuvent donner de fausses idées sur ce qui se passe réellement, ce qui peut poser notamment des problèmes de conception efficace.

Industriel vs éducatif

Certains langages de programmation industriels, par exemple Java, comportent quantité d’aspects dont l’explication doit être repoussée et qui apparaissent donc comme des incantations mystérieuses, ce qui peut rebuter les débutants. D’une façon générale, les langages déployés dans l’industrie ne sont pas forcément très pédagogiques. On peut donc vouloir enseigner un langage plus adapté à l’initiation, quitte à passer à des langages plus industriels dans les années suivantes ; voire, si l’on dispose de temps, montrer plusieurs langages afin d’illustrer plusieurs visions de la programmation (impérative, fonctionnelle, logique…).

Il est toutefois souhaitable d’enseigner un langage utilisé industriellement. D’une part, cela permet d’éviter de donner prise à la critique courante qu’à l’école on apprend des choses inutiles « dans la vraie vie ». D’autre part la plupart des cursus n’ont pas le luxe de pouvoir construire un enseignement d’informatique structuré pluriannuel, les étudiants pouvant ne suivre que le module d’initiation, dont il est souhaitable qu’ils puissent retirer des compétences utilisables.

(À ce sujet, il faut relativiser les prétentions de ceux qui disent que les cursus d’informatique en université ou grandes écoles font apprendre des choses inutiles, notamment des langages inutiles. En général, ils veulent dire qu’ils n’enseignent pas ce qui est utilisé dans leur service dans leur entreprise, qui n’est pas une généralité.)

Enfin, les langages utilisés industriellement disposent en général de bons environnements de développement et de nombreuses bibliothèques permettant de réaliser des tâches variées (charger tel ou tel type de fichier, réaliser une interface graphique…), ce qui permet de donner des projets attrayants à faire aux étudiants — « attrayant » incluant « montrable à la famille et aux amis ».

Autres questions

En résumé, le langage de programmation idéal est à la fois de haut niveau pour ne pas poser de difficultés techniques inutiles, de bas niveau pour que les étudiants comprennent les implications de ce qu’ils écrivent, industriel pour qu’ils puissent en retirer des compétences pratiques que l’on peut immédiatement mettre en œuvre mais pas trop industriel afin d’éviter de les noyer dans des considérations compréhensibles uniquement avec une certaine expérience...

D’autres considérations peuvent être mentionnées dans la discussion. Ainsi, faut-il un langage fortement typé statiquement ou dynamiquement typé ? (Je n’expliquerai pas ces concepts ici.) Là encore, on peut argumenter pédagogiquement dans les deux sens…

Conclusion

Le choix de langage de programmation d’initiation est en général un compromis pragmatique. Il mécontentera donc d’une part les puristes, d’autre part ceux qui s’imaginent que le but d’un cursus d’informatique généraliste devrait être de fournir des programmeurs compétents spécifiquement sur leur domaine précis d’activité.

Est-il si important ? Pas vraiment. L’informaticien doit être prêt à apprendre de nouveaux langages, de nouvelles technologies. De toute façon, les concepts sont souvent en bonne partie les mêmes, et la principale difficulté c’est de devoir penser

.