Ecrire un programme est comme écrire un article. On aligne une série de mots. Ces mots permettent de décrire un traitement, une interface, une question. Ils ont un sens qui peut être compris aussi bien par un ordinateur que par un informaticien. Au début, il n’y avait qu’une manière de s’adresser à l’ordinateur et seuls quelques élus y étaient autorisés. Pour que plus de monde participent à la fête, les mots se sont multipliés. Ces mots formaient un langage. Puis de nouveaux langages se sont créés. Et de nouvelles façons d’interroger l’ordinateur aussi.
La genèse de l’informatique ressemble un peu à la tour de Babel : un langage unique remplacé par des milliers (même si une dizaine reste majoritairement utilisés). La différence ? Aujourd’hui tout le monde ou presque peut adresser ses demandes à un ordinateur sans connaître le moindre langage informatique. Les informaticiens écrivent les outils pour cela.
Dans ‘Jurassic Code’, j’abordais rapidement l’évolution des langages. Techniquement on parle de génération de langages même s’ils ont été théorisés en même temps. On parle de 5 générations de langages. Le terme de génération semble indiquer que la génération suivante s’imposera sur la précédente. En pratique, il faudrait plus parler de niveau de langage ou de typologie de langage. Chaque ‘génération’ répond à un problème précis. Imaginez une ligne entre l’ordinateur et l’être humain. Le langage de première génération est le plus proche de l’ordinateur alors que celui de 5ème génération serait presque naturel pour un être humain.
Pour résumer, le langage de première génération est le langage machine. On s’adresse directement et physiquement au PC par une série d’ordres binaires (une suite de ‘0’ et de ‘1’). Tenir ce type de conversation avec un processeur est aujourd’hui quasiment impossible. A moins de connaître le schéma du processeur et d’avoir un matériel de laboratoire. Mais vous devinez de nos jours qu’Intel ou AMD ne vont pas dévoiler leurs brevets.
Pour palier à cela, les fabricants de processeurs fournissent un langage plus évolué et son compilateur pour discuter avec le processeur. Il s’agit d’un langage de deuxième génération. C’est à ce niveau que commence à apparaître la notion de ‘verbes’. Mais ils restent encore trop liés au processeur. Je ne sais pas s’il existe d’autres langages que l’assembleur dans cette génération.
Pour le programmeur lambda qui ne travaille pas pour Intel, AMD, ARM ou consort, les deux premières génération de langage ne le concernent pas. Son programme sera interprété ou compilé par des traitements basés sur les deux niveaux précédents. La majorité des langages de programmation utilisés sont répartis entre la troisième et la 4ème génération de langages.
La troisième génération est aussi appelée langage procédural. Il s’agit de décrire chaque étape d’un traitement avec des verbes simples ou des fonctions. C’est le fameux algorithme. Rien n’interdit de créer d’autres verbes du moment que ceux-ci sont décrits par les verbes de base. Dans une application, ce langage permet de décrire les interfaces et les traitements procéduraux.
La 4ème génération (L4G ou 4GL en anglais) est elle utilisée pour accéder à des données stockées dans des bases. Vous ne décrivez plus les opérations nécessaires pour accéder aux données mais uniquement les caractéristiques des données que vous voulez récupérer. Dans un fichier qui liste les élèves d’une classe, pour connaître le nombre d’élève, vous ne faites pas une boucle qui va compter les élèves, vous demandez juste ‘Combien(élèves)’. Le verbe ‘Combien()’ se charge du reste. Les verbes de bases des L4G sont initialement écrits à travers des procédures (donc en langage de 3ème génération). Le L4G se veut proche d’un langage naturel … si vous êtes informaticien.
Le langage de 5ème génération est un langage dit par contrainte. Concrètement, vous décrivez un contexte avant de poser une question (qui correspond à votre besoin. OK, mes explications ne sont pas claires, mais mes cours de Prolog sont lointains. Il s’agit d’une manière plus naturelle d’écrire la récursivité. OK, je sors … Le L5G est surtout utilisé pour programmer des intelligences artificielles. Je disais qu’il était naturel pour un être humain. C’est vrai s’il est doctorant en informatique et en mathématiques.
Avec tous ces niveaux d’expression, il est possible de créer des outils toujours plus sophistiqués. Cependant, c’est la compétence du développeur qui fera la qualité du programme. Avant d’écrire son programme, le développeur est face à une page blanche ou presque. En pratique, il va chercher un exemple précédent qui se rapproche du besoin qu’on lui a soumis. Sa maîtrise d’un langage reste essentielle. Je pense que je ferai plus tard un ‘café philosophie’ sur le fait que l’informatique peut être considéré dans certains cas comme un art.