dimanche 6 janvier 2013

La qualité d'un langage de programation

Qu'est ce qu'un bon langage de programmation ?

Encore récemment il m'est arrivé de débattre sur les qualités de PHP, de Java, de C++, C# et j'en passe. Ce genre de discussion ne termine jamais, ou alors termine mal ! Trop souvent cela ce limite à un combat entre communauté : libre v.s. non-libre; Microsoft v.s. anti-Microsoft; et les arguments portent moins sur le langage que sur les idéologies sous-jacente des communautés. Certains défendent becs et ongles un langage qui n'a comme seul qualité être celui que l'on maîtrise !

Pourtant, débattre sur les qualités des langages est très instructif. D'une part parce qu'il est relativement rare d'être expert dans plusieurs langages et cela permet de mettre en perspective l'outil que l'on maîtrise par rapport à d'autres. D'autre part car cela donne l'occasion de poser les qualités d'un langage de programmation : c'est sur ce dernier point que je vais exposer mon point de vu.

Premièrement, il paraît important de préciser le périmètre du terme "langage de programmation" : Pour moi, il s'agira :

  • du langage à proprement parlé
  • de l'ensemble des bibliothèques disponibles
  • des outils de développement disponibles
Deuxièmement, il faut comparer ce qui est comparable, c'est  dire des langages ayant la même cible fonctionnelle : Rien de sert de comparer Java, langage généraliste à Node.js, environnement event-driven.

Finalement, le fond du problème :
Pour moi un bon langage de programmation généraliste sera défini comme le langage qui a le meilleur ratio entre expressivité et facilité à produire des bugs.


         expressivité
Score = -------------------------------
         facilité à produire de bugs

Précisions sur les termes utilisés : 
  • expressivité : on parle aussi de la "puissance" du langage, c'est à dire la capacité à résoudre des problème ou faire des calculs en peu de code. Par exemple, l’assembleur est peu puissant, Python grâce à la fonctionnalité de "List comprehension" est très expressif. Les langages dynamiques sont en général puissant, la fonction même de typage dynamique leur permet de faire facilement des choses complexes (introspections, l'intercession, etc.)
  • facilité à produire des bugs : c'est un point souvent oublié sur la qualité des langages et qui me tient particulièrement à coeur. L'idée ici est d'évaluer la facilité avec laquelle un programme peut être buggé sans que cela soit vu par un lecteur expérimenté. C et C++ par exemple, avec leur gestion manuelle de la mémoire sont défavorisés sur ce point par rapport à Java et son garbage collector. Le typage dynamique est aussi très défavorable à ce sujet : la possibilité de mélanger et inter-changer des type différents dans une même variable permet d'écrire des horreurs absolument illisible. Attention ! Je ne dis pas qu'il n'est pas possible d'écrire du code propre en Javascript, mais qu'il est possible, et c'est malheureusement souvent le cas, d'écrire du code illisible.
Un langage très sécurisé mais trop peu expressif sera lourd et volumineux.
Un langage très expressif mais non sécurisé permettra de produire du code très rapidement, au détriment de la pérennité du code.  
 

Aucun commentaire:

Enregistrer un commentaire