jeudi 20 novembre 2008

Langage ou logique de programmation

L'élection du meilleur langage de programmation est sans contestation le sujet favori des informaticiens en herbe. C'est une lutte sans merci que se livrent la communauté JAVA et la tribu C++ pour l'attribution du tant convoité territoire du langage objet. Et que dire de la secte des adorateurs d'ADA qui nient l'existence même de tout langage autre que l'objet de leur culte.
Mais qu'elle est le sens de cette rivalité, quelles sont les qualités de ces langages qui méritent ces querelles de comptoir?
Au commencement est le langage, cette capacité à communiquer au moyen d'un système de signes.
Lorsque je programme, je communique au moyen des signes que m'autorise un langage de programmation.
Mais je communique avec qui? Et que suis-je sensé communiquer avec ces signes?
L'opinion majoritaire prétend que je communique avec une machine, que je lui transmets des ordres. En détournant le propos d'Elizabeth Anscombe, que je donne la description d'une action future adressée à la machine et formulée dans une forme dont la fonction linguistique est de faire faire à la machine ce qui est décrit.
Si j'admets cette définition, je puis donc ordonner à un ascenseur de monter ou descendre au seul moyen d'un langage de programmation.

- ben ouais.
- Si j'écris "monte" en JAVA, il monte.
- heu .. non .. pas vraiment
- Oups c'est vrai, j'oubliais le ";". Va et "monte;".
- Ben, c'est un peu plus compliqué que ça.
- "monte; silteplait;" c'est mieux?
- Laisse tomber. Tu peux pas comprendre.

Si. Je comprends. Le mot "monte" n'appartient pas au lexique du langage JAVA, ni même à celui de C++. Il n'existe pas de langage de programmation dans lequel le signe "monte" ait un sens. Et pourtant les ascenseurs montent.
Un langage de programmation, ce n'est qu'une grosse centaine de signes et une syntaxe d'une ridicule simplicité comparée au langage commun. Alors comment les informaticiens peuvent-t-ils accomplir ce miracle de faire faire monter les ascenseurs par des machines sans jamais énoncer le mot "monte"?

- C'est tout un métier, mon bon monsieur.
- Oui. Mais encore.
- On prie beaucoup.
- Et c'est ça qui fait monter les ascenseurs!
- Non.

Mais alors, qu'est ce?
Et si tout cette histoire de "langage de programmation" n'était qu'un leurre. Et si ce "langage" n'en n'était pas un. Parce qu'à regarder de plus près, que trouve-t-on dans cette chose que l'on nomme "langage de programmation"?
Des connecteurs logiques (if, then, else, and, or, ...) des signes de l'aspect itératif (while, for, ...), des concepts (class, function, ...) quelques verbes (open, read, write, close, ...) et c'est à peu près tout.
Rien qui puisse dénoter, signifier, exprimer. Aucun nom, pas d'adjectif.
On prend trois mots dans un dictionnaire d'anglais, on les estampille "langage de programmation", on met le tout dans une belle boite aux couleurs fluos, et on te vend le paquet au prix du kilo de caviar. Chapeau bas messieurs les commerciaux.
Même les matheux ont des x et des y pour signifier des variables, des a et des b pour signifier des constantes, des A et des B pour les ensembles et ça leur coûte pas un rond.

- Hé, Ho, du calme papy. Faut pas t'énerver. Dans un langage de programmation, y en a aussi des x, des y et même des z.
- Je vous prie d'accepter toutes mes excuses. Je m'emballe, je m'emballe et je fini par ne plus savoir ce que je dis. Alors, il existe x et y en JAVA, disiez vous. Et JAVA en donne quelle description?
- Hein?
- Qu'elle est la signification de x et y dans le langage JAVA?
- Ben, rien en particulier. En général à peu près tout.
- Ah.

Si je comprend bien, x et y n'ont pas d'existence au sein du "langage de programmation" mais au sein d'un langage que j'exprime au moyen d'un "langage de programmation". Ce qu'on appelle "langage de programmation" n'est qu'un langage secondaire comme celui décrit par Bertrand Russell dans "Signification et vérité".
Ce n'est qu'une collection de mots logiques, une logique de programmation en somme.

- Ben si tu le dis.


Aucun commentaire: