Histoire des langages de programmation

Histoire des langages de programmation : pourquoi ont-ils évolué ?

Au début des années 1950, écrire un programme exige de connaître intimement l’ordinateur qui doit l’exécuter. Ses instructions, ses registres et l’organisation de sa mémoire dictent une grande partie du travail. Quelques décennies plus tard, un étudiant peut programmer un jeu en BASIC, une entreprise gérer ses comptes en COBOL et un développeur créer un site en JavaScript ou en PHP. Ce ne sont pas seulement les machines qui ont changé : la manière de leur donner des instructions s’est transformée.

On raconte souvent l’histoire des langages de programmation comme une succession de noms et de dates. Pourtant, leur apparition suit une logique plus intéressante. À chaque époque, les programmeurs rencontrent des obstacles : écrire les calculs plus vite, traiter des fichiers, enseigner l’informatique, organiser des logiciels volumineux ou faire fonctionner une application sur des machines différentes. De nouveaux langages naissent pour répondre à ces besoins. Les anciens, eux, ne disparaissent pas nécessairement.

Parler le langage de la machine

Un processeur exécute des instructions définies par son architecture : charger une valeur, effectuer une addition, comparer deux nombres ou poursuivre l’exécution à une autre adresse. Ces instructions sont représentées par des codes numériques. Dans les premiers ordinateurs, le programmeur doit maîtriser cette mécanique, parfois jusqu’à calculer lui-même des adresses mémoire.

L’assembleur apporte une première amélioration : des noms symboliques remplacent certains codes numériques et des étiquettes permettent de désigner des emplacements du programme. Un logiciel, lui-même appelé assembleur, transforme ensuite ces indications en instructions exécutables. Mais l’essentiel reste attaché à un processeur précis. Un programme écrit pour une machine ne fonctionne pas automatiquement sur une autre.

À mesure que les projets grandissent, cette proximité avec le matériel devient coûteuse. Il faut du temps pour écrire, vérifier et corriger les programmes. Surtout, de nombreuses tâches semblent inutilement répétitives. Pourquoi demander à un humain de convertir chaque opération en instructions élémentaires, alors qu’un programme pourrait effectuer cette traduction ?

Dans les années 1950, plusieurs équipes explorent la programmation automatique. Grace Hopper développe notamment le système A-0 pour automatiser l’utilisation de sous-programmes. Chez IBM, Speedcoding simplifie certains calculs scientifiques, au prix d’une exécution moins efficace. Ces outils ne sont pas encore les langages généralistes modernes, mais ils déplacent déjà une partie du travail du programmeur vers la machine.

De la machine au langage haut niveau

Le changement décisif sera de pouvoir décrire davantage le problème à résoudre et moins les détails du processeur. Un compilateur traduit alors un programme écrit dans un langage plus abstrait en code adapté à une machine. D’autres environnements permettent une exécution interprétée, instruction par instruction ou à l’aide de représentations intermédiaires. Dans les deux cas, un logiciel sert d’intermédiaire entre les intentions humaines et l’ordinateur.

Années 1950 : les scientifiques et les entreprises n’ont pas les mêmes besoins

Cette nouvelle liberté fait apparaître une évidence : tous les utilisateurs ne demandent pas la même chose à leurs ordinateurs. Les scientifiques veulent calculer ; les administrations et les entreprises doivent traiter d’immenses quantités de données. Un seul langage ne répond pas nécessairement aussi bien à ces deux mondes.

FORTRAN : laisser les scientifiques écrire des formules

Chez IBM, l’équipe de John Backus s’attaque au coût de la programmation scientifique. Sur l’IBM 704, les ingénieurs souhaitent exprimer directement des calculs plutôt que d’en détailler chaque instruction machine. Le FORTRAN, diffusé à partir de 1957, offre une écriture proche des formules mathématiques.

L’enjeu n’est pas seulement la lisibilité : le programme obtenu doit rester rapide. À l’époque, beaucoup doutent qu’un compilateur puisse produire un code comparable à celui d’un spécialiste de l’assembleur. L’efficacité du compilateur FORTRAN contribue à lever cette objection. Des physiciens, des ingénieurs et des mathématiciens peuvent consacrer davantage de temps à leurs modèles et moins à leur traduction en instructions.

COBOL : traiter des dossiers plutôt que des équations

Une compagnie d’assurance ne manipule pas principalement des trajectoires ou des équations. Elle gère des clients, des contrats, des montants et des fichiers. Les programmes doivent durer, être compris par plusieurs équipes et, si possible, survivre au remplacement d’un ordinateur.

Des projets comme FLOW-MATIC, développé par l’équipe de Grace Hopper, explorent des instructions proches de l’anglais. Le COBOL, élaboré collectivement à partir de 1959, poursuit cette orientation. Il place les enregistrements, les fichiers et les opérations de gestion au centre du langage. Sa standardisation cherche aussi à réduire la dépendance envers un constructeur.

FORTRAN et COBOL ne représentent donc pas deux étapes où l’un remplacerait l’autre. Ils répondent à des besoins différents qui coexistent : le calcul scientifique d’un côté, la gestion administrative de l’autre.

FORTRAN et COBOL _ deux langages, deux usages

Lisp : quand les données ne sont plus seulement des nombres

À la même période, une autre difficulté apparaît dans les recherches en intelligence artificielle. Comment faire manipuler à l’ordinateur des symboles, des expressions ou des structures qui s’emboîtent les unes dans les autres ? À partir de 1958, John McCarthy développe Lisp, dont les listes et les fonctions se prêtent particulièrement bien à ces travaux.

Lisp explore une manière de programmer où les fonctions peuvent elles-mêmes être manipulées comme des valeurs. Il contribue ainsi à diffuser des idées associées à la programmation fonctionnelle. Ce paradigme ne consiste pas à abandonner tout calcul classique, mais à exprimer un traitement en combinant des fonctions, souvent en limitant les modifications d’état. Le langage propose une autre manière de représenter un problème.

Années 1960-1970 : rendre la programmation accessible et les programmes compréhensibles

Les langages de haut niveau facilitent le travail des professionnels, mais programmer reste longtemps une activité réservée à des spécialistes. À Dartmouth College, John Kemeny et Thomas Kurtz souhaitent ouvrir l’ordinateur à des étudiants d’autres disciplines. Le BASIC, mis en service le 1er mai 1964 avec un système à temps partagé, répond à cette ambition.

Ses instructions simples ne suffiraient pas, à elles seules, à expliquer son succès. Le temps partagé permet surtout d’écrire un programme à un terminal, de le lancer et d’observer rapidement le résultat. L’apprentissage devient une succession d’essais et de corrections. Dans les années 1970 et 1980, le BASIC accompagnera ensuite des micro-ordinateurs comme l’Apple II, le ZX81 ou l’Amstrad CPC. Pour beaucoup d’utilisateurs, allumer un ordinateur signifie aussi pouvoir le programmer.

Mais la simplicité des premiers programmes ne résout pas une difficulté croissante : comment comprendre et modifier un logiciel de plusieurs milliers de lignes ? Lorsque les branchements se multiplient dans tous les sens, suivre son fonctionnement peut devenir un casse-tête.

Évolution de la programmation, 1960–1970

Avec ALGOL 60, la programmation dispose d’une expression plus rigoureuse des blocs de code, des procédures et de la portée des variables. La réflexion sur la programmation structurée encourage ensuite l’usage de séquences, de conditions et de boucles organisées plutôt que l’accumulation de sauts difficiles à suivre. Le Pascal, présenté par Niklaus Wirth en 1970, prolonge cette recherche de clarté : il permet aussi d’enseigner la construction méthodique des programmes.

Dans le même temps, les systèmes d’exploitation posent un problème un peu différent. Ils ont besoin de rester proches du matériel, mais leur écriture en assembleur les rend difficiles à adapter à de nouveaux processeurs. Aux Bell Labs, Dennis Ritchie développe le langage C en 1972 (son développement s’étend de 1969 à 1973, avec une période particulièrement décisive en 1972), à partir du langage B de Ken Thompson. Le C permet de conserver un contrôle précis sur la mémoire et les données, tout en facilitant l’écriture de programmes moins dépendants d’une architecture particulière.

La réécriture d’une grande partie d’UNIX en C en 1973 illustre cette évolution : porter un système vers une autre architecture devient plus réaliste, même si certaines parties doivent toujours être adaptées. Le Pascal privilégie la lisibilité et l’enseignement ; le C répond notamment à l’exigence d’un logiciel système efficace et plus portable. Aucun n’efface les autres.

Années 1970-1980 : les logiciels deviennent trop vastes pour être pensés comme un seul bloc

Quand les applications grandissent, un autre obstacle se présente. Une banque, une usine ou un logiciel graphique comporte de nombreuses entités qui évoluent et interagissent. Il ne suffit plus de décrire la suite des calculs : il faut organiser les informations, répartir les responsabilités et limiter les conséquences d’une modification.

Les travaux norvégiens d’Ole-Johan Dahl et Kristen Nygaard sur Simula, notamment Simula 67, apportent les notions de classes et d’objets à la simulation. Une entité du programme peut réunir des données et les opérations qui les concernent. Au Xerox PARC, Smalltalk, développé à partir de 1972 autour d’Alan Kay, Dan Ingalls et leurs collègues, pousse beaucoup plus loin cette approche dans un environnement interactif et graphique.

Pour saisir l’idée, imaginons une application de bibliothèque. Une approche procédurale organise le traitement en fonctions : enregistrer un prêt, calculer une date de retour, vérifier une disponibilité. Une approche orientée objet peut représenter un livre, un emprunt ou un lecteur comme des objets possédant leurs informations et des comportements associés. Ce ne sont pas deux façons incompatibles de programmer ; elles mettent simplement l’accent sur des organisations différentes.

Infographie du code à l’objet

Dans les années 1980, Bjarne Stroustrup développe le C++ pour combiner des mécanismes de structuration inspirés notamment de Simula avec les performances et la maîtrise du matériel associées au C. Parallèlement, Ada répond à une préoccupation forte des grands projets, notamment dans les systèmes critiques : contrôler plus rigoureusement les types, les interfaces et la fiabilité des logiciels.

La programmation évolue donc dans plusieurs directions à la fois : mieux organiser le code, mieux maîtriser sa complexité et réduire certains risques d’erreur.

Années 1990 : les langages s’adaptent au réseau et au Web

L’arrivée des ordinateurs personnels a multiplié les utilisateurs. Avec le développement des réseaux et du Web, les programmes doivent désormais circuler entre des systèmes variés et interagir avec des personnes à distance. La vitesse de développement compte autant que la puissance des machines.

En 1991, Guido van Rossum rend disponibles les premières versions de Python, développé aux Pays-Bas dans le prolongement du langage ABC. Sa syntaxe lisible et son environnement interactif facilitent l’écriture de petits outils, l’automatisation et, plus tard, de nombreuses applications scientifiques. Son succès futur reposera aussi largement sur l’extension de ses bibliothèques et de sa communauté : un langage utile ne se réduit pas à sa grammaire.

Avec Java, présenté publiquement en 1995 après un projet initialement destiné à des équipements électroniques, la portabilité prend une autre forme. Au lieu de produire directement un programme pour chaque processeur, le compilateur fournit un code intermédiaire, le bytecode, exécuté par une machine virtuelle Java. L’objectif est de limiter les adaptations nécessaires d’une plateforme à l’autre, même si les bibliothèques et les environnements restent déterminants.

Le Web, lui, fait apparaître deux besoins complémentaires. Une page HTML peut présenter des informations, mais comment la rendre réactive aux actions de son lecteur ? Chez Netscape, Brendan Eich conçoit JavaScript en 1995 pour exécuter des scripts dans le navigateur. Malgré son nom, JavaScript n’est pas une déclinaison de Java.

L’essor du Web et des langages informatiques

Et comment produire une page dont le contenu dépend d’un formulaire, d’un compte utilisateur ou d’une base de données ? Des outils exécutés côté serveur répondent à cette nécessité. PHP naît des outils développés par Rasmus Lerdorf en 1994, rendus publics en 1995, puis évolue vers un langage permettant de construire des sites dynamiques.

La distinction est concrète : JavaScript peut réagir immédiatement à une action dans le navigateur, tandis que PHP peut traiter une demande sur le serveur et préparer une réponse. Le Web ne crée pas un langage unique ; il favorise un ensemble d’outils complémentaires, chacun adapté à une partie de l’application.

Aujourd’hui : sécurité, coopération et nouveaux compromis

L’histoire ne s’arrête pas aux années 1990. Les logiciels s’exécutent sur des téléphones, des serveurs, des objets connectés et des infrastructures distribuées. Ils sont développés par des équipes parfois dispersées dans le monde entier. Les erreurs de mémoire, les difficultés de maintenance et la concurrence entre tâches prennent davantage d’importance.

De nouveaux langages tentent de répondre à ces contraintes. Go met l’accent sur la simplicité des outils et sur les services exécutant de nombreuses tâches simultanément. Rust cherche à prévenir, dès la compilation, plusieurs catégories d’erreurs liées à la gestion de la mémoire, sans imposer de ramasse-miettes. Dans le même temps, Python, JavaScript, Java, C, C++, COBOL ou FORTRAN continuent d’évoluer et de répondre à des usages parfois très spécialisés.

Il serait donc trompeur de voir l’histoire des langages comme une course dans laquelle chaque nouveau venu remplace le précédent. Une simulation scientifique écrite en FORTRAN, une application de gestion en COBOL et un service réseau en Go peuvent tous être de bons choix selon les contraintes, les compétences disponibles et le coût de maintenance.

Écosystème moderne des langages de programmation

Il faut aussi distinguer la date de conception, la première version disponible et la diffusion à grande échelle d’un langage. Ces étapes peuvent être séparées de plusieurs années, voire de plusieurs décennies. BASIC, par exemple, naît à Dartmouth en 1964, mais devient particulièrement visible du grand public avec les micro-ordinateurs des années 1970 et 1980.

Ce que l’histoire des langages nous apprend

De l’assembleur à JavaScript, l’histoire des langages de programmation suit une même ambition : permettre aux humains d’exprimer leurs intentions sans devoir maîtriser chaque détail du fonctionnement des machines. Chaque langage est apparu pour répondre à des besoins particuliers : calcul scientifique, gestion, enseignement, développement de systèmes ou applications Web.

Mais l’intelligence artificielle pourrait aujourd’hui bouleverser cette évolution. Désormais, il devient possible de décrire un problème en langage naturel et de laisser une IA produire le programme correspondant. Une nouvelle question apparaît : faudra-t-il encore apprendre à coder pour programmer ?

Les langages ne vont probablement pas disparaître. L’ordinateur aura toujours besoin d’instructions précises, et les programmes générés devront être compris, vérifiés et corrigés. En revanche, le rôle du programmeur pourrait évoluer : moins écrire chaque instruction, davantage concevoir, expliquer et contrôler.

Au fond, depuis les premiers langages jusqu’aux IA génératives, l’objectif reste le même : réussir à se faire comprendre des machines.

Et si l’avenir de la programmation consistait moins à apprendre leur langage qu’à leur apprendre à comprendre le nôtre ?

Sources historiques et documents de référence

Publications similaires

  • BCPL

    BCPL signifie Basic Combined Programming Language : une version simplifiée de CPL, conçue pour écrire des compilateurs et des logiciels système plus faciles à transporter d’une machine à l’autre. Au milieu des années 1960, les langages de programmation deviennent plus expressifs, mais leurs compilateurs restent souvent longs et difficiles à adapter. Un langage peut être…

  • FLOW-MATIC

    FLOW-MATIC est l’un des premiers langages de programmation conçus pour le traitement des données commerciales. Développé dans les années 1950 par l’équipe de Grace Hopper chez Remington Rand UNIVAC, il poursuit une idée alors radicale : permettre de décrire un traitement informatique avec des mots proches de l’anglais courant plutôt qu’en manipulant directement des codes…

  • IBM 704

    L’IBM 704 est un ordinateur scientifique 36 bits commercialisé par IBM en 1954. Conçu pour les calculs scientifiques et techniques, il occupe une place majeure dans l’histoire de la programmation : c’est notamment sur cette machine qu’est développé le premier compilateur FORTRAN. À la charnière des années 1956-1957, l’IBM 704 illustre également une transformation profonde…

  • ADA

    Ada est un langage de programmation créé à la demande du département de la Défense des États-Unis (DoD) à la fin des années 1970. Son objectif est inhabituel : il ne s’agit pas seulement de faciliter l’écriture des programmes, mais aussi de rendre plus fiables des logiciels complexes destinés à fonctionner pendant de nombreuses années….

  • Speedcoding

    En 1953, alors que l’informatique n’en est encore qu’à ses débuts, IBM introduit un système de programmation qui va profondément transformer la manière d’utiliser les ordinateurs scientifiques : Speedcoding. Speedcoding est un système de programmation scientifique développé par IBM en 1953 pour l’IBM 701, sous la supervision de John W. Backus. Il simplifie l’écriture des…

  • Fortran

    FORTRAN, contraction de FORmula TRANslation (« traduction de formules »), est l’un des langages les plus importants de l’histoire de l’informatique. Développé chez IBM sous la direction de John Backus, il permet aux scientifiques et aux ingénieurs d’écrire leurs calculs sous une forme beaucoup plus proche des mathématiques que des instructions d’une machine.Lorsque le premier…