Le langage de la machine
Le seul langage compris par le processeur, l’unité centrale dans laquelle sont câblées toutes les opérations de base de l’ordinateur, est appelé « assembleur ». Il définit simplement les opérations électroniques que peut exécuter le processeur. Ce langage change d’un processeur à un autre. Il est donc très efficace puisque tout peut être ajusté « sur mesure », mais il est nettement plus compliqué à manipuler que des langages de plus haut niveau, sans faire d’erreur.
L’assembleur est une liste d’ordres, un fichier d’instructions, comme additionner deux valeurs, les comparer… L’une des instructions permet de sauter à un autre ordre de la liste. Cela permet par exemple de faire des boucles comme « Frapper un monstre jusqu’à ce qu’il disparaisse » ou « Avancer jusqu’à rencontrer un mur ».
Cette dernière boucle peut également s’écrire : « Avancer. S’il n’y a pas de mur en face, retourner à la ligne précédente. Tourner à gauche. » Ainsi, on ne tournera à gauche que lorsqu’on aura rencontré un mur. Mais ce genre de programme pose une question : que se passe-t-il si l’on rencontre un obstacle autre qu’un mur ? En effet, si un humain peut penser à contourner cet obstacle, un tel comportement n’a pas été programmé et le programme va donc tenter désespérément de passer à travers. Dans ce cas absurde, le programme exécutera bêtement l’instruction jusqu’à ce qu’il soit arrêté de l’extérieur (par le système d’exploitation ou par l’utilisateur).
Le compilateur, le traducteur homme-machine
Les langages actuels sont de plus haut niveau, ils permettent de préciser plus facilement toutes les actions à exécuter. Cependant, ces langages doivent eux-mêmes être exécutés. Pour cela, le programme source, qui n’est qu’un texte, va être « compilé ». Cela signifie qu’un programme (un de plus !), appelé « compilateur », va transformer le texte du programme source en une suite d’instructions en langage assembleur exécutables par l’ordinateur. Le compilateur joue un rôle de traducteur entre ce qui est écrit par le programmeur et ce qui est compris par la machine. Le compilateur produit un fichier exécutable que nous lançons pour utiliser le programme. De même qu’il y a de nombreuses langues (français, arabe, russe, japonais…), il y a plusieurs types de programmation, c’est-à-dire plusieurs façons de donner des ordres à l’ordinateur. Ces modes de programmation sont appelés « paradigmes ». Le choix du langage et du paradigme de programmation dépend de l’application, de l’algorithme, mais aussi de l’interaction du programme avec d’autres programmes et enfin du choix et de l’expertise du programmeur.
En conclusion, la programmation n’est pas seulement une simple traduction de l’algorithme vers la machine. La façon de faire, la gestion de la mémoire, les types de données peuvent rendre un même algorithme lent ou très efficace. La programmation introduit également des bugs aux conséquences parfois dramatiques. Les éviter reste un vrai défi, un défi scientifique.
Pour aller plus loin, nous vous proposons de consulter sur Wikipédia l’article « Langage de programmation ».
Post-scriptum
Texte extrait de « Demandez le programme », Interstices.
Article complet paru dans la revue DocSciences no 5, « Les clés de la révolution numérique », éditée par le CRDP de l’académie de Versailles en partenariat avec Inria.
Ce texte appartient au dossier thématique« Mathématiques et langages ».
Article édité par Jérôme Germoni