Histoire
- https://fr.wikipedia.org/wiki/Histoire_des_langages_de_programmation
- https://en.wikipedia.org/wiki/Timeline_of_programming_languages
- https://francoisschwarzentruber.github.io/graph_of_programming_languages/
Premières machines
La machine d'Anticythère (avant 87 av. JC) servait à réaliser des calculs d'astronomie :

La 
Premières machines programmables
Le

Note G de

C'est un enfer : les variables s'appellent $$V_1, V_2, V_3, \dots$$ Ne pas faire ça !
1950-1960 : les premières bonnes idées
FORTRAN
FORTRAN (FORmula TRANslator) est un langage pour le calcul scientifique et numérique. Il a été créé en 1957 par John Backus :

Voici un exemple de programme en FORTRAN (première version) :
C AREA OF A TRIANGLE WITH A STANDARD SQUARE ROOT FUNCTION
C INPUT - TAPE READER UNIT 5, INTEGER INPUT
C OUTPUT - LINE PRINTER UNIT 6, REAL OUTPUT
C INPUT ERROR DISPLAY ERROR OUTPUT CODE 1 IN JOB CONTROL LISTING
READ INPUT TAPE 5, 501, IA, IB, IC
501 FORMAT (3I5)
C IA, IB, AND IC MAY NOT BE NEGATIVE OR ZERO
C FURTHERMORE, THE SUM OF TWO SIDES OF A TRIANGLE
C MUST BE GREATER THAN THE THIRD SIDE, SO WE CHECK FOR THAT, TOO
IF (IA) 777, 777, 701
701 IF (IB) 777, 777, 702
702 IF (IC) 777, 777, 703
703 IF (IA+IB-IC) 777, 777, 704
704 IF (IA+IC-IB) 777, 777, 705
705 IF (IB+IC-IA) 777, 777, 799
777 STOP 1
C USING HERON'S FORMULA WE CALCULATE THE
C AREA OF THE TRIANGLE
799 S = FLOATF (IA + IB + IC) / 2.0
AREA = SQRTF( S * (S - FLOATF(IA)) * (S - FLOATF(IB)) *
+ (S - FLOATF(IC)))
WRITE OUTPUT TAPE 6, 601, IA, IB, IC, AREA
601 FORMAT (4H A= ,I5,5H B= ,I5,5H C= ,I5,8H AREA= ,F10.2,
+ 13H SQUARE UNITS)
STOP
END
De bonnes idées :
- instruction pour lire, écrire, des commentaires
- prémisses du
if: ici il est ternaire (saut si négatif, si nul, si positif)
De mauvaises idées :
- que des
GO TO
COBOL
COBOL (COmmon Business Oriented Language) pour des applications de gestion a une syntaxe compréhensible par un humain.
ADD montant TO total-jour total-mois total-annee.
Il a été créé en 1959 par le Short Range Committee, dont Grace Hopper.

De bonnes idées :
-
proche de la langue naturelle (ah si Grace Hopper avait connu les LLMs !)
-
types structurés
01 NomPrenom. 05 Prenom PIC X(20). 05 Nom PIC X(20).
PIC (pour PICTURE) indique le type des données, ici des caractères (X) au nombre de 20.
LISP
En 1960, LISP (LISt Processor) was created by

(defun factorial (n)
(if (= n 1)
1
(* n (factorial (- n 1)))))
Plein de bonnes idées (cf. https://paulgraham.com/diff.html) :
-
Des vrais
if -
Les fonctions sont des objets comme les autres
-
Il n'y a que des pointeurs (comme dans Python, Java, Javascript, etc.)
-
Pas de gestion de la mémoire explicite car il y a un ramasse-miette
-
un type 'symbole'
-
Utilisation du langage lui-même pour représenter des données. C'est du JSON, du XML avant l'heure. D'ailleurs toujours utilisé en planification automatique avec le Planning Domain Definition Language.
(define (problem strips-gripper2) (:domain gripper-strips) (:objects rooma roomb ball1 ball2 left right) (:init (room rooma) (room roomb) (ball ball1) (ball ball2) (gripper left) (gripper right) (at-robby rooma) (free left) (free right) (at ball1 rooma) (at ball2 rooma)) (:goal (at ball1 roomb))) -
Mélange entre programme et données, la fonction
eval
ALGOL
En 1960, ALGOL60 (ALGOL58 existait mais c'était des prémisses) est créé, avec notamment John Backus et Peter Naur, mais aussi John McCarthy et plein d'autres. Le comité s'est réuni à Paris du 11 au 16 janvier 1960.
procedure Absmax(a) Taille:(n, m) Resultat:(y) Indices:(i, k);
value n, m; array a; integer n, m, i, k; real y;
comment Dans la procédure Absmax (a, n, m, y, i, k)
le plus grand élément en valeur absolue de la matrice a de taille
n par m est transféré à y et les indices de cet élément à i et k ;
begin integer p, q;
y := 0; i := k := 1;
for p:=1 step 1 until n do
for q:=1 step 1 until m do
if abs(a[p, q]) > y then
begin
y := abs(a[p, q]);
i := p; k := q;
end
end Absmax
Bonnes idées :
- des blocs
BEGIN,END
John Backus et Peter Naur sont aussi les inventeurs de la Backus–Naur form (BNF). Voici par exemple une grammaire en BNF pour la logique propositionnelle :
$$\phi, \psi, \dots ::= p \mid (\phi \lor \psi) \mid (\lnot \phi)$$
C'est Charles Antony Richard Hoare qui a écrit le premier compilateur pour ALGOL 60.

Charles Antony Richard Hoare est aussi connu :
- l'invention du
tri rapide - la
logique de Hoare
Il a écrit : « Voici un langage très en avance de son temps, il n'a pas seulement été une amélioration de ses prédécesseurs mais aussi une amélioration de presque tous ses successeurs ».
1960-1980
Simula
En 1965, dans “Record Handling", Charles Antony Richard Hoare évoque les prémisses de la programmation orientée objet. Simula 67 (Simple universal language), inventé à Oslo par Ole-Johan Dahl and Kristen Nygaard. Comme surcouche d'Algol 60, est le premier langage conçu pour pouvoir intégrer la programmation orientée objet et la simulation par événements discrets.
Begin
Class Glyph;
Virtual: Procedure print Is Procedure print;;
Begin
End;
Glyph Class Char (c);
Character c;
Begin
Procedure print;
OutChar(c);
End;
Glyph Class Line (elements);
Ref (Glyph) Array elements;
Begin
Procedure print;
Begin
Integer i;
For i:= 1 Step 1 Until UpperBound (elements, 1) Do
elements (i).print;
OutImage;
End;
End;
Ref (Glyph) rg;
Ref (Glyph) Array rgs (1 : 4);
! Main program;
rgs (1):- New Char ('A');
rgs (2):- New Char ('b');
rgs (3):- New Char ('b');
rgs (4):- New Char ('a');
rg:- New Line (rgs);
rg.print;
End;
Langage C
Le langage C est un des premiers langages de programmation système, est développé par Dennis Ritchie et Ken Thompson pour le développement d'Unix aux laboratoires Bell entre 1969 et 1973.
#include <stdio.h>
int main(void)
{
printf("hello, world\n");
return 0;
}
BASIC
1964 - BASIC (Beginner's All-purpose Symbolic Instruction Code) est un langage pour le grand public.
'Voici un petit code fait en BASIC moderne
INPUT "Quel est votre nom"; UserName$ 'On demande le nom de l'utilisateur
PRINT "Bonjour "; UserName$
DO
INPUT "Combien d'étoiles voulez-vous"; NumStars 'On demande le nombre d'étoiles de l'utilisateur
Stars$ = ""
Stars$ = REPEAT$("*", NumStars) '<-ANSI BASIC
'Stars$ = STRING$(NumStars, "*") '<-MS BASIC
PRINT Stars$
DO
INPUT "Voulez-vous plus d'étoiles"; Answer$
LOOP UNTIL Answer$ <> ""
LOOP WHILE UCASE$(LEFT$(Answer$, 1)) = "O"
PRINT "Au revoir ";
FOR A = 1 TO 200
PRINT UserName$; " ";
NEXT A
PRINT
Le typage est implicite, et si les variables dont le nom termine par $ sont des chaînes de caractères.
Smalltalk
Smalltalk (milieu des années 1970) est l'un des premiers langages de programmation à disposer d'un environnement de développement intégré complètement graphique.
| rectangles aPoint|
rectangles := OrderedCollection
with: (Rectangle left: 0 right: 10 top: 100 bottom: 200)
with: (Rectangle left: 10 right: 10 top: 110 bottom: 210).
aPoint := Point x: 20 y: 20.
collisions := rectangles select: [:aRect | aRect containsPoint: aPoint].
PROLOG
Prolog (PROgrammation LOGique), défini en 1972 par Colmerauer, Roussel et Kowalski (en) est le premier langage de programmation logique.
frère_ou_sœur(X,Y) :- parent(Z,X), parent(Z,Y), X \= Y.
parent(X,Y) :- père(X,Y).
parent(X,Y) :- mère(X,Y).
mère(trude, sally).
père(tom, sally).
père(tom, erica).
père(mike, tom).
ML
ML (Meta Language) inventé par Robin Milner en 1973, construit sur un typage statique fort et polymorphe au-dessus de Lisp, pionnier du langage de programmation généraliste fonctionnel.
fun fac (0 : int) : int = 1
| fac (n : int) : int = n * fac (n - 1)
Pascal
Pascal a été créé par Niklaus Emil Wirth en 1970 conçu pour l'enseignement.
program HelloWorld(output);
begin
writeln('Hello World');
readln;
end.
SQL
SQL (Structured Query Language) est un langage pour écrire des requêtes à une base de données. Créé en 1974 par Donald D. Chamberlin et Raymond F. Boyce.
SELECT nom, service
FROM employe
WHERE statut = 'stagiaire'
ORDER BY nom;
1980-1990 : mélanger performance et programmation objet
Ada
En 1983, Ada créé Jean David Ichbiah. C'est un langage impératif et fortement typé avec compilateur certifié.
Il repose sur de la programmation par contrat. Autrement dit, on peut écrire les préconditions et postconditions directement dans le langage.
procedure Put_Line (File : in File_Type; Item : in String)
with Pre => (Is_Open (File)),
Post => (Line (File) = Line (File)’Old + 1);
On peut aussi définir des types "sémantiques" :
subtype Prime is Integer range 2 .. Integer’Last
with Dynamic_Predicate
=> (not (for some N in 2 .. Prime - 1
=> Prime mod N = 0));
C++
C++ est créé en 1983 par Bjarne Stroustrup.

#include<iostream>
int main()
{
std::cout << "Hello, new world!\n";
}
Perl
En 1987, Perl (Practical Extraction and Reporting Language) est créé par Larry Wall. En 2019, Perl 6 s'appelle Raku. L'objectif est de faciliter le reporting dans la console.
#!/usr/bin/env perl
use strict;
use warnings;
my ( $remaining, $total );
$remaining=$total=shift(@ARGV);
STDOUT->autoflush(1);
while ( $remaining ) {
printf ( "Remaining %s/%s \r", $remaining--, $total );
sleep 1;
}
print "\n";
1990-2010 : développer plus vite et... Internet !
1990 - Haskell 1991 - Python 1993 - Lua 1994 - ANSI Common Lisp 1995 - Java 1995 - PHP 1995 - Ruby 1996 - JavaScript 1996 - OCaml 2001 - C#
Python
L'ancêtre de Python est le langage ABC développé au CWI (Centrum voor Wiskunde en Informatica) par Leo Geurts, Lambert Meertens, et Steven Pemberton. Le but était d'être simple à utiliser. Guido van Rossum participe au projet.
HOW TO RETURN words document:
PUT {} IN collection
FOR line IN document:
FOR word IN split line:
IF word not.in collection:
INSERT word IN collection
RETURN collection
Guido van Rossum développe un langage de script à partir de 1989 : il l'appelle Python. En février 1991, Python 0.9.0 est publié.
def words(document):
collection = set()
for line in document:
for word in line.split(" "):
if word not in collection:
collection.add(word)
return collection
2010 : un monde encore plus sûr, ou pas
Go
Go est utilisé pour de la programmation système. Inventé par Google en 2009-2010.
package main
import "fmt"
func main() {
fmt.Println("Hello, world")
}
Rust
En 2010, Rust voit le jour.
#![allow(unused)] fn main() { enum Forme { Point, // une forme peut être un point, sans données attachées. Cercle(f64), // une forme peut être un cercle, caractérisé par son rayon. Rectangle(f64, f64), // une forme peut être un rectangle, caractérisé par les longueurs de deux de ses côtés adjacents. } fn aire(f: Forme) -> f64 { match f { Forme::Point => 0.0, Forme::Cercle(rayon) => rayon * rayon * 3.1415926535897932384626433832795, Forme::Rectangle(cote_a, cote_b) => cote_a * cote_b, } } }
Typescript
TypeScript - version typé fortement de Javascript
Programmation réactive
La programmation Web demande d'assurer l'adéquation entre le contenu de variables du programme et l'affiche. Pour cela, la programmation réactive permet d'écrire
<div>{{x}}</div>
où la page HTML se met à jour automatiquement lorsque le contenu de la variable x change. Il y a plusieurs framework : React, Vue, Svelte.
La langue naturelle ?
Quid de la programmation du futur ? Si on donne ce prompt à un LLM, ça fonctionne :
Convertit moi ce tableau en JSON.
ou alors :
Donne moi un programme qui convertit n'importe quel tableau en JSON.