Langages informatiques : histoire, inventeurs et usages
- Accueil
- Développement, applications & chaîne logicielle
- Langages informatiques : histoire, inventeurs et usages
Langages informatiques : histoire, inventeurs et usages
Section intitulée « Langages informatiques : histoire, inventeurs et usages »Un ordinateur ne comprend qu’une suite de nombres. Un langage de programmation est une convention qui permet à un humain d’exprimer ce qu’il veut en mots et en symboles, qu’un programme traduit ensuite en instructions pour la machine. On en compte plusieurs milliers ; quelques dizaines font tourner l’essentiel du monde numérique, et plusieurs d’entre eux ont été conçus avant la naissance de la plupart de ceux qui les maintiennent aujourd’hui. Cette page en retrace l’histoire, présente leurs inventeurs et indique à quoi chacun sert encore, avec un détour par ce que le choix d’un langage change pour la sécurité.
Les ordinateurs ne comprennent que des 0 et des 1. Les langages de programmation sont des façons d’écrire des instructions presque en anglais, qu’un logiciel traduit ensuite pour la machine. Chaque langage a été inventé par une personne ou une équipe, pour un besoin précis, et beaucoup servent encore des décennies plus tard.
→ Lire l’explication complète de la marmotte
Des nombres aux mots : les grandes étapes
Section intitulée « Des nombres aux mots : les grandes étapes »Avant les langages. En 1843, Ada Lovelace publie, dans ses notes sur la machine analytique de Charles Babbage, une méthode pas à pas pour calculer les nombres de Bernoulli, souvent présentée comme le premier programme. Un siècle plus tard, les premiers ordinateurs électroniques se programment en langage machine, directement en nombres, puis en assembleur, où chaque instruction reçoit un nom court. C’est rapide pour la machine et pénible pour tout le monde.
Les premiers langages de haut niveau (années 1950). L’idée qu’un programme, le compilateur, puisse traduire une écriture proche des mathématiques ou de l’anglais en langage machine s’impose avec Fortran (1957) pour le calcul scientifique et COBOL (1959) pour la gestion. Grace Hopper, qui avait réalisé l’un des premiers compilateurs, défend alors l’idée scandaleuse qu’un programme puisse s’écrire avec des mots plutôt qu’avec des codes.
La structuration (années 1960 et 1970). ALGOL, Pascal puis C introduisent les blocs, les fonctions et les structures de contrôle qui organisent le code lisiblement. C, conçu pour écrire le système Unix, devient le langage des systèmes d’exploitation, ce qu’il est toujours.
Les objets (années 1980 et 1990). Smalltalk, C++ puis Java organisent les programmes autour d’objets qui regroupent données et comportements. Le Web naissant fait exploser les langages de script, plus souples et interprétés à la volée : Perl, Python, PHP, JavaScript, Ruby.
La sûreté et la productivité (années 2000 à aujourd’hui). Les nouveaux langages, Go, Rust, Kotlin, Swift, TypeScript, cherchent à éviter des classes entières d’erreurs dès l’écriture, à commencer par les erreurs de gestion de la mémoire, tout en restant agréables à utiliser.
Frise chronologique : date, inventeurs, usages
Section intitulée « Frise chronologique : date, inventeurs, usages »| Année | Langage | Inventeurs | Usage aujourd’hui |
|---|---|---|---|
| 1957 | Fortran | John Backus et son équipe (IBM) | Calcul scientifique, météorologie, simulation physique |
| 1958 | Lisp | John McCarthy (MIT) | Recherche, extension d’éditeurs (Emacs), dialectes comme Clojure |
| 1959 | COBOL | Comité CODASYL (Conference on Data Systems Languages), sur les idées de Grace Hopper | Banques, assurances, administrations, systèmes centraux (mainframes) |
| 1960 | ALGOL 60 | Comité international (dont John Backus et Peter Naur) | Plus guère utilisé, mais ancêtre de Pascal, C et de la plupart des langages modernes |
| 1964 | BASIC (Beginner’s All-purpose Symbolic Instruction Code) | John Kemeny et Thomas Kurtz (Dartmouth College) | Enseignement historique ; descendants comme Visual Basic pour l’automatisation bureautique |
| 1970 | Pascal | Niklaus Wirth (ETH, École polytechnique fédérale de Zurich) | Enseignement ; descendant Delphi pour certaines applications de gestion |
| 1972 | C | Dennis Ritchie (Bell Labs) | Systèmes d’exploitation, noyaux, embarqué, bibliothèques de base |
| 1972 | Smalltalk | Alan Kay et l’équipe du Xerox PARC (Palo Alto Research Center) | Recherche, enseignement ; a inspiré la programmation objet et les interfaces graphiques |
| 1972 | Prolog | Alain Colmerauer et Philippe Roussel (Marseille) | Logique, systèmes experts, recherche en intelligence artificielle symbolique |
| 1974 | SQL | Donald Chamberlin et Raymond Boyce (IBM) | Interrogation de toutes les bases de données relationnelles |
| 1979 | Shell Bourne | Stephen Bourne (Bell Labs) | Scripts d’administration Unix ; son successeur Bash (Brian Fox, 1989) est partout |
| 1983 | Ada | Jean Ichbiah et son équipe (CII Honeywell Bull, ex-Compagnie internationale pour l’informatique) | Aéronautique, ferroviaire, défense, logiciels critiques |
| 1985 | C++ | Bjarne Stroustrup (Bell Labs) | Jeux vidéo, navigateurs, finance, logiciels exigeant des performances |
| 1987 | Perl | Larry Wall | Traitement de texte, scripts d’administration, en recul |
| 1990 | Haskell | Comité de chercheurs | Programmation fonctionnelle, recherche, finance, compilateurs |
| 1991 | Python | Guido van Rossum | Science des données, intelligence artificielle, automatisation, Web, scripts de sécurité |
| 1993 | Lua | Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes (PUC-Rio) | Scripts embarqués dans les jeux et les applications |
| 1995 | Java | James Gosling (Sun Microsystems) | Applications d’entreprise, serveurs, historiquement Android |
| 1995 | JavaScript | Brendan Eich (Netscape) | Tout le Web côté navigateur, serveurs avec Node.js |
| 1995 | PHP | Rasmus Lerdorf | Sites Web, WordPress et la plupart des gestionnaires de contenu |
| 1995 | Ruby | Yukihiro Matsumoto | Applications Web avec le cadriciel Ruby on Rails |
| 1996 | OCaml | Xavier Leroy et l’équipe de l’Inria | Compilateurs, outils de preuve, finance |
| 2000 | C# | Anders Hejlsberg (Microsoft) | Applications Windows et .NET, jeux vidéo avec Unity |
| 2009 | Go | Robert Griesemer, Rob Pike, Ken Thompson (Google) | Services réseau, outils d’infrastructure (Docker, Kubernetes) |
| 2011 | Kotlin | JetBrains | Applications Android, serveurs |
| 2012 | TypeScript | Microsoft (Anders Hejlsberg) | Applications Web de grande taille, JavaScript typé |
| 2014 | Swift | Chris Lattner et l’équipe d’Apple | Applications iPhone, iPad et Mac |
| 2015 | Rust (version 1.0) | Graydon Hoare, puis Mozilla et la communauté | Logiciels système sûrs, navigateurs, outils, morceaux de noyaux |
Quelques précisions de dates s’imposent, l’histoire des langages étant fertile en querelles d’anniversaire. C++ est commencé en 1979 sous le nom de « C with Classes » et commercialisé en 1985. Rust naît en 2006 comme projet personnel avant sa version stable de 2015. JavaScript est écrit en une dizaine de jours en 1995, ce qui explique certaines choses et en excuse peu.
Les inventeurs, et pourquoi ils ont inventé
Section intitulée « Les inventeurs, et pourquoi ils ont inventé »Un langage naît presque toujours d’une frustration précise. John Backus voulait éviter aux scientifiques d’IBM de programmer en assembleur. Grace Hopper voulait que les programmes de gestion se lisent comme des phrases. Dennis Ritchie et Ken Thompson avaient besoin d’un langage pour réécrire Unix, et Ken Thompson récidive quarante ans plus tard avec Go. Niklaus Wirth voulait un langage pour enseigner proprement. Bjarne Stroustrup voulait les objets de Simula avec la vitesse de C. Guido van Rossum voulait un langage de script lisible, et l’a commencé pendant les vacances de Noël 1989. Brendan Eich devait livrer un langage pour le navigateur de Netscape dans un délai absurde. Graydon Hoare voulait un langage système qui ne plante pas à cause de la mémoire, motivé, selon le récit qu’il en fait, par un ascenseur en panne.
La France tient une place honorable dans cette histoire : Alain Colmerauer crée Prolog à Marseille, Jean Ichbiah dirige la conception d’Ada, retenu par le département de la Défense américain, et l’Inria développe Caml puis OCaml, ainsi que l’assistant de preuve Coq, aujourd’hui Rocq.
Quand utilise-t-on quoi ?
Section intitulée « Quand utilise-t-on quoi ? »Il n’existe pas de meilleur langage, seulement des langages adaptés à un contexte :
- Systèmes, noyaux, embarqué : C, C++, de plus en plus Rust. La performance et le contrôle de la mémoire priment.
- Logiciels critiques (avions, trains, centrales) : Ada, C contraint par des règles strictes comme MISRA C (règles de la Motor Industry Software Reliability Association), et des outils de preuve formelle.
- Web côté navigateur : JavaScript, ou TypeScript qui s’y traduit. Il n’y a pas vraiment d’alternative, sauf WebAssembly pour certains calculs.
- Web côté serveur : PHP, Python, JavaScript, Java, C#, Go, Ruby, selon l’équipe et l’existant.
- Données et intelligence artificielle : Python, très largement, avec des bibliothèques écrites en C, C++ ou Rust pour la vitesse.
- Applications mobiles : Kotlin pour Android, Swift pour iOS.
- Gestion et finance historiques : COBOL sur les systèmes centraux, Java dans les systèmes plus récents.
- Bases de données : SQL, depuis cinquante ans, sans concurrent sérieux.
- Administration et automatisation : Bash, PowerShell, Python.
- Sécurité offensive et défensive : Python pour l’outillage et l’automatisation, C et l’assembleur pour comprendre les exploits, Go et Rust pour des outils rapides et faciles à distribuer.
Ce que le langage change pour la sécurité
Section intitulée « Ce que le langage change pour la sécurité »Le choix d’un langage n’est pas neutre pour la sécurité. C et C++ laissent au programmeur la gestion de la mémoire : un oubli suffit à créer un débordement de tampon, une utilisation après libération ou une double libération, autant de failles exploitables pour exécuter du code. Microsoft a indiqué en 2019 qu’environ 70 % des vulnérabilités corrigées dans ses produits relevaient de la sûreté mémoire, et l’équipe de Chromium donne un ordre de grandeur comparable pour ses failles graves. Le fonctionnement de ces erreurs est détaillé dans Comment un buffer overflow écrase la pile.
Les langages sûrs pour la mémoire (Rust, Go, Java, C#, Python, Swift…) éliminent la plupart de ces erreurs par construction. Les agences de sécurité ont pris position : la NSA a recommandé en 2022 de privilégier ces langages, et la CISA a appelé en 2023 les éditeurs à publier une feuille de route de migration. Le noyau Linux accepte du code Rust depuis la version 6.1 (2022), et Google a constaté sur Android une forte baisse de la part des vulnérabilités mémoire à mesure que le nouveau code était écrit dans des langages sûrs.
Aucun langage ne protège pour autant des erreurs de logique, des injections ou d’une mauvaise gestion des secrets : une injection SQL s’écrit aussi bien en Rust qu’en PHP. Le langage réduit la surface d’erreur ; il ne remplace ni la revue de code ni les tests, abordés dans Comment revoir le code de sécurité au-delà du linter.
🐝 Ce qui arrive si on s’en passe
Section intitulée « 🐝 Ce qui arrive si on s’en passe »Choisir un langage par habitude, sans tenir compte de ses propriétés de sécurité, conduit à écrire en C ou en C++ des composants exposés à Internet qui n’avaient aucun besoin de gérer la mémoire à la main, et à hériter des classes de failles qui vont avec. À l’inverse, ignorer l’âge et l’inventaire des langages déjà en service laisse des applications COBOL, des scripts Perl ou des bibliothèques C non maintenues au cœur des systèmes critiques, sans personne pour les relire. Les compétences disparaissent avant le code, et la première faille découverte dans un composant que plus personne ne sait compiler se corrige alors dans l’urgence, si elle se corrige.
🦫 Explication de la marmotte 🍫
Section intitulée « 🦫 Explication de la marmotte 🍫 »Un ordinateur ne comprend que des nombres. Pour lui donner des ordres sans écrire des pages de chiffres, on a inventé des langages de programmation : des façons d’écrire des instructions avec des mots et des symboles, qu’un logiciel traduit ensuite pour la machine. Le premier grand langage, Fortran, date de 1957. Depuis, des milliers d’autres ont été créés, chacun par une personne ou une petite équipe qui avait un problème précis à résoudre.
Chaque langage a sa spécialité : SQL pour interroger les bases de données, JavaScript pour faire fonctionner les pages Web, Python pour l’intelligence artificielle et les calculs, Swift et Kotlin pour les applications de téléphone, C pour les systèmes d’exploitation. Beaucoup de vieux langages servent encore, par exemple COBOL dans les banques, parce que les programmes écrits il y a cinquante ans fonctionnent toujours.
Certains langages anciens laissent le programmeur gérer lui-même la mémoire de l’ordinateur, et une petite erreur peut alors devenir une faille de sécurité. Les langages plus récents comme Rust évitent automatiquement une grande partie de ces erreurs, ce qui explique pourquoi les spécialistes de la sécurité recommandent de les utiliser pour les nouveaux logiciels.
À lire aussi
- Écrire un outil jetable proprement, sans faille ni detteComment écrire vite un outil jetable (script ponctuel d'extraction, de migration ou de purge) sans qu'il devienne une faille ou une dette, et à quels signes il a cessé d'être jetable.
- Rust et la sécurité mémoire par construction, garanties et limitesComment Rust rend une classe entière de fautes mémoire impossible à compiler grâce à la possession et aux emprunts, où cette garantie s'arrête et ce qu'il reste à auditer.
- Sécuriser les extensions tierces WordPressCette fiche traite de la surface d’attaque des extensions tierces dans les CMS largement déployés, notamment WordPress.
- Upload de shell PHP déguisé en image dans un CMSDémonstration en laboratoire de l'exécution de code par téléversement d'un fichier PHP maquillé en image, avec le mécanisme de la confusion de type et les contre-mesures de validation de contenu et de désactivation d'exécution.
Pages voisines
La citent
- Écrire un outil jetable proprement, sans faille ni dette
- Python pour l'automatisation défensive, usages et garde-fous
- Rust et la sécurité mémoire par construction, garanties et limites
Langages informatiques : histoire, inventeurs et usages
Elle cite
- Lien dans les deux sens :JavaScript et SQL côté web, ce qu'il faut savoir des deux langages
- Écrire des scripts Bash système fiables et sûrs en production
- Comment revoir le code de sécurité au-delà du linter
- Comment un buffer overflow écrase la pile
- Méthodes formelles TLA+ et Coq (Rocq), où elles valent leur coût
: les deux pages se citent l’une l’autre.
