Sommaire

Simplicité des langages informatiques - Réflexion - 17/04/2024

Introduction

Pour le profane, un langage informatique peut paraître complexe voire abstrait tout comme le sont ses limites.

Complexité apparente

Elle est paradoxale.
D'un côté les langages informatiques sont simples car ils s'appuient sur très peu de concepts et, de l'autre, c'est de cette simplicité que naît la complexité.
Pour mieux appréhender ce paradoxe, imaginez devoir formuler une idée avec une dizaine de mots seulement.

Quels sont ces concepts ?
Les principaux sont au nombre de quatre, c'est tout.

Concepts d'affectation et de lecture de variables

Pour comprendre les deux premiers, dites-vous qu'un programme manipule des données.
Ces données doivent pouvoir être écrites et lues quand nécessaire.
Afin de pouvoir différencier les données entre elles, il convient de les nommer.
Nous avons nos deux premiers concepts, le premier associe une valeur a une variable (nommée) et le second lit la valeur associée à une variable (nommée).

Pour exemple, le premier concept pourrait être représenté par les expressions suivantes :

Dans cet exemple, nous avons le nom de la variable suivi du signe « = » et de la valeur associée.

Une telle simplicité existe dans certains langages mais présente des risques forts de confusion sur le type de la donnée associée à la variable.
La confusion nait du fait que rien ne précise que la variable « age » comporte une donnée numérique et que « prenom » comporte une chaîne de caractères.
Cette confusion a notamment des impacts sur les opérations possibles entre variables et leurs résultats.
Cette confusion est humainement difficilement détectable et génère des résultats inattendus lors de l'exécution du code.
Aussi, la plupart des langages préfèrent typer les variables tant pour leur fournir plus de capacités que pour limiter les risques de confusion.

Ainsi on va plutôt trouver des formes du type :

La conséquence immédiate du typage est que les opérations vont fournir des résultats différents dépendamment du type de donnée.
Par exemple « age + 2 » effectue le calcul en retournant 60 tandis que « prenom + 2 » perçoit « 2 » comme une chaîne de caractères et retourne « Isabelle2 ».

On trouve dans ces expressions la lecture des valeurs affectées aux variables qui correspond au second concept.

La plupart des langages ne vont pas plus loin sur le premier concept pourtant il serait judicieux de leur associer davantage de contraintes, notamment métier, comme un intervalle de valeurs acceptables pour les numériques ou encore une longueur minimale et maximale pour une chaîne de caractères.
À défaut, nous allons devoir contrôler ces contraintes métier et agir en conséquence.
Ce contrôle est notre troisième concept.

Concept de contrôle

Le contrôle est généralement de la forme :

Avec :

Les formes varient quelque peu en fonction des langages et les termes sont majoritairement Anglais.
On va trouver pour exemples :

Le « test valide » est une opération qui s'appuie, en général, sur la lecture d'au moins une variable et qui la compare à l'aide d'un opérateur (=, <>, >, >=, <, <=, etc.).
Ces opérateurs peuvent s'écrire de différentes façons dépendamment des langages, par exemple, « différent » peut s'écrire « <> » ou encore « != » mais le sens est le même.

Les comparaisons peuvent être chaînées entre elles par des opérateurs binaires « Et » (AND) et « Ou » (OR).
Là encore ces opérateurs peuvent s'écrire de différentes façons dépendamment des langages « OR, || » pour « ou » ou encore « AND, && » pour « et » pour exemples.

Cela va nous permettre, par exemple, de contrôler que l'âge et supérieur à 0 et inférieur à 113 ans.

Concept de boucle

Souvent il nous faut itérer sur un jeu de données.
C'est notre quatrième concept.

Ce jeu de données peut être, pour exemples, une liste de personnes, les lignes d'un fichier, etc.

Il existe plusieurs formes de boucles mais pour l'essentiel leur forme est :

Le processus tourne sur « effectue ceci » tant que le test est non validé.
En général dans les instructions on incrémente une variable qui fait partie du test. Par exemple, Tant que i<10 :

Concept complémentaire d'encapsulation

Nous avons vu les quatre principaux concepts.
Ils sont comme des briques de Lego.
En ce sens, ils permettent d'élaborer des bateaux, des avions, des maisons et tout ce qu'on peut imaginer.

Si l'on fait une aile d'avion, il semble évident qu'il nous en faut une seconde, identique, pour que notre avion soit complet.
Pour une maison, nous allons peut-être construire des fenêtres similaires, avec des tailles différentes malgré tout.

Au lieu de répéter les mêmes instructions encore et encore, nous allons les encapsuler dans des blocs que nous allons pouvoir appeler quand nécessaire.
Ces blocs réutilisables peuvent prendre en compte des aspects variables pour, par exemple, créer des fenêtres de taille différentes. En pareil cas, il va nous falloir lui passer des informations relatives aux dimensions de la fenêtre.
Ces blocs peuvent donc être invoqués avec des variables prises en compte dans les instructions.
En général, ces blocs s'appellent des fonctions.

Ces fonctions sont nommées, comportent des variables ou non, disposent d'un jeu d'instructions et retournent un résultat.
Par exemple :

Cet exemple de fonction retourne l'âge courant à partir d'une date de naissance.
On peut l'invoquer ainsi :

Les formes dépendent des langages mais globalement c'est ce que l'on va retrouver.

Au même titre que l'on peut encapsuler des instructions dans des fonctions, on peut encapsuler des fonctions dans des blocks représentant des objets (l?expression d?une chaise, d?une personne pour exemples), ces objets dans des librairies de code qui, elles-mêmes, peuvent être réutilisées dans d'autres librairies, etc.
Globalement cette approche n'a pour limite technique que la mémoire de l'ordinateur.

Concept complémentaire de commentaire

Ce sixième et dernier concept n'apporte rien en termes d'exécution mais apporte en termes de gouvernance et de capitalisation.

Si nos pièces de Lego sont simples, elles ne portent aucun sens technique et encore moins métier et c'est en ce sens que coder peut sembler et être complexe.

Le code est écrit par des personnes qui comprennent et abordent la résolution d'un problème de manières parfois très différentes.
Ainsi le code d'un développeur peut être très diffèrent de celui d'un autre.

Les commentaires visent à exprimer, en langage naturel, ce que l'on exprime en langage informatique dans le code.
Ils permettent, lors de la lecture, de se faire une idée du schéma mental du développeur qui l'a écrit.
Cela permet de l'améliorer, de le corriger si nécessaire ou de le réutiliser.

Un code bien écrit est un code lisible par d'autres et donc bien commenté pour faciliter au mieux sa compréhension.
Il ne faut jamais perdre de vue que d'autres doivent pouvoir le lire et se l'approprier.
À défaut ils le réécriront complètement ce qui va à l'encontre de la capitalisation.

Quelles sont les limites ?

Existe-t-il une limite à ce que vous pouvez exprimer (en langage naturel) ?
Si oui, c'est peut-être celle de votre imagination.

Existe-t-il une limite à ce qui peut être exprimé dans un programme (en langage informatique) ?
Juste celle de votre capacité d?expression.
Un langage informatique n'est rien d'autre qu'une langue, certes limitée en termes de concepts et de mots mais une langue quand même.

Comme avec des Lego, vous êtes libre de rêver et de construire ce qu'il vous plait.

Il y a des limites malgré tout.
Un arrondi en Lego dispose d'une granularité liée à la forme de la brique de base.

Le monde informatique a également des limites en termes de représentation, de manipulation des nombres, des chaînes de caractères, de dates, etc.
Ces limites sont liées au langage mais aussi au support d'exécution que sont les ordinateurs, à leurs horloges, à l?électricité, etc.
Il y a donc des limites à nos simulations de la réalité notamment, mais elles sont suffisamment éloignées pour que chacun puisse se sentir libre dans ses expressions (quelles soient en langage naturel ou informatique).
Plus notre technologie avance, plus ces limites reculent ... allez savoir si un jour nous atteindront la granularité de la longueur de Planck ?
Si c'est le cas, plus personne ne pourra faire la différence entre simulation et réalité.
C'est l'une des raisons qui poussent certains scientifiques à penser que nous sommes dans une simulation.

Références