Adloun

Histoire de l'informatique

Cours complet · NSI (terminale), chapitre 15 · terminale, spécialité numérique et sciences informatiques

Travailler ce chapitre sur Adloun Exercices corrigés de ce chapitre

L'informatique donne l'impression d'être née hier. Elle a pourtant une longue histoire, et cette histoire n'est pas un décor : les notions étudiées dans ce livre — les structures de données, la récursivité, la programmation objet, les bases de données, les réseaux — sont apparues à des dates précises, pour résoudre des problèmes précis, et portent encore la marque de ces problèmes.

Ce chapitre n'est donc ni une galerie de portraits ni une liste de dates à réciter. C'est le récit de quelques déplacements d'idées, où l'on posera chaque fois deux questions : quel problème cherchait-on à résoudre ? et qu'est-ce que la solution a rendu possible ?

Un fil traverse l'ensemble : le déplacement des rôles respectifs du logiciel et du matériel. Pendant des siècles, une machine ne sait faire que ce pour quoi elle a été construite ; en 1936, on comprend qu'une seule machine peut les imiter toutes ; en 1948, le programme entre dans la mémoire et devient une donnée comme les autres ; en 1969, il devient un produit que l'on vend ; depuis les années 2000, un service auquel on se connecte.

15.1 Introduction : lire l'histoire en informaticien

iRemarqueTrois précautions de méthode
  • Une invention n'a presque jamais une seule date. Entre l'idée, le prototype, la publication et l'usage courant, il s'écoule souvent dix ans. Écrire « vers 820 » ou « 1957-1960 » est une information, pas une négligence.
  • Les paternités sont souvent disputées. Qui a construit le premier ordinateur ? Qui a inventé le transistor, le circuit intégré, le microprocesseur ? La réponse dépend chaque fois de la définition adoptée. Nous signalerons ces disputes plutôt que de les trancher.
  • Les belles anecdotes sont souvent fausses. Nous en corrigerons quelques-unes, non par plaisir, mais parce que vérifier une attribution est exactement le même geste intellectuel que vérifier un programme.

La frise ci-dessous donne les repères principaux. Ses trois bandes n'ont pas la même échelle : la première couvre deux millénaires, la deuxième un siècle et demi, la troisième un demi-siècle.

15.2 Avant l'ordinateur : l'algorithme, puis le calcul mécanique

15.2.1 Des algorithmes sans machine

Pendant des siècles, l'algorithme existe sans qu'aucune machine ne puisse l'exécuter : il est destiné à un être humain muni d'un papier et de patience.

Définition 15.1Algorithme

Un algorithme est une suite finie d'instructions non ambiguës qui, à partir de données, produit un résultat en un nombre fini d'étapes. Le mot vient du nom latinisé du mathématicien persan al-Khwârizmî (vers 780-850), dont le traité sur le calcul indien fut connu en Europe sous le titre Algoritmi de numero indorum. Son autre ouvrage, consacré vers 820 à l'al-jabr, a donné le mot « algèbre ».

Exemple 15.2Le plus vieil algorithme encore enseigné

L'algorithme du PGCD figure dans les Éléments d'Euclide, vers 300 avant notre ère (livre VII). Sa version moderne tient en trois lignes :


def pgcd(a, b):
    while b != 0:
        a, b = b, a % b      # invariant : pgcd(a, b) ne change pas
    return a

print(pgcd(1071, 462))       # affiche 21

Vingt-trois siècles séparent l'énoncé de ce programme, et pourtant l'invariant est le même : remplacer le couple par un couple plus petit ayant le même PGCD.

Deux autres héritages traversent l'histoire : le crible d'Ératosthène (IIIe siècle avant notre ère), et surtout la numération de position venue de l'Inde (Brahmagupta, 628), transmise par al-Khwârizmî puis diffusée en Europe par Fibonacci (Liber abaci, 1202). Sans elle, aucun calcul mécanique n'aurait été possible : c'est déjà une leçon d'informatique, celle du choix de la représentation des données.

15.2.2 Les premières machines à calculer (XVIIe siècle)

iRemarqueCalculer n'est pas programmer

Ces machines sont admirables, mais elles ont toutes la même limite : elles exécutent une opération, celle que leur mécanique impose. Rien en elles ne joue le rôle d'un programme. Pour que le programme apparaisse, il faut qu'une idée surgisse ailleurs, dans l'industrie textile.

15.2.3 1804 : le métier Jacquard, ou le motif qui quitte la machine

Joseph-Marie Jacquard perfectionne en 1801-1804 un métier à tisser commandé par un ruban de cartes perforées, aboutissement des essais de Basile Bouchon (1725) et de Vaucanson (1745). Le motif tissé n'est plus fixé par la construction du métier : il est écrit sur les cartes. Changer de dessin, c'est changer de cartes, non de machine.

C'est le premier exemple de la séparation qui définira l'informatique : d'un côté une machine générale, de l'autre une description modifiable de ce qu'elle doit faire. Babbage s'en souviendra trente ans plus tard, Hollerith un demi-siècle après lui.

15.3 Le XIXe siècle : le programme, la logique et les données

15.3.1 Babbage : une machine qui suit un programme

Charles Babbage (1791-1871) part d'un problème concret : les tables numériques utilisées par les marins et les ingénieurs sont truffées d'erreurs de calcul et de copie. Sa réponse est d'automatiser le calcul et l'impression. En 1822, il propose la machine à différences, financée dès 1823 par le gouvernement britannique et jamais achevée — le Science Museum de Londres en a construit un exemplaire d'après ses plans : le mécanisme de calcul a fonctionné en 1991, l'imprimante en 2002. Puis, à partir de 1834, il conçoit une machine d'une tout autre ambition.

Définition 15.3La machine analytique de Babbage (1834)

Conçue mais jamais construite, la machine analytique réunit déjà les organes d'un ordinateur :

  • le moulin (mill) : l'organe de calcul ;
  • le magasin (store) : la mémoire, prévue pour mille nombres de cinquante chiffres ;
  • les cartes perforées, empruntées à Jacquard : le programme et les données, à l'extérieur de la machine ;
  • le branchement conditionnel : la machine peut sauter des cartes selon un résultat, donc répéter et décider.

Il lui manque un seul trait de l'ordinateur moderne : le programme n'est pas rangé dans la mémoire, il reste sur les cartes.

15.3.2 Ada Lovelace et le premier algorithme publié

Ada Lovelace (1815-1852) traduit en 1843 un article que l'ingénieur italien Luigi Menabrea avait consacré en 1842 à la machine analytique. Elle y ajoute sept notes, signées de ses initiales et plus longues que le texte traduit. La dernière, la note G, contient le déroulé complet du calcul des nombres de Bernoulli par la machine.

iRemarque« Le premier programme de l'histoire » : ce que l'on peut dire

L'expression est répandue, et discutée. Ce qui est établi :

  • Babbage avait écrit dès 1836-1837, dans ses carnets, des programmes d'essai pour sa machine ; il ne les a pas publiés de son vivant ;
  • la note G, rédigée en 1843 en correspondance suivie avec Babbage, est le premier algorithme publié destiné à une machine ;
  • Lovelace est la première à écrire que la machine pourrait dépasser les nombres et manipuler des symboles quelconques — sons, lettres — si l'on savait les coder.

Dire « la première programmeuse » est défendable ; dire « elle a écrit le tout premier programme » l'est moins. La dispute porte sur le mot « premier », pas sur la qualité du travail.

15.3.3 Boole, puis Hollerith : la logique et les données

George Boole publie en 1847 The Mathematical Analysis of Logic, puis en 1854 An Investigation of the Laws of Thought : le raisonnement logique obéit à des règles algébriques, sur des valeurs qui ne sont ni des longueurs ni des nombres, mais le vrai et le faux. Pendant quatre-vingts ans, son algèbre reste une curiosité de logicien ; elle deviendra en 1937 la théorie des circuits, c'est-à-dire l'électronique numérique tout entière.

Le recensement américain de 1880 avait demandé près de huit ans de dépouillement manuel. Herman Hollerith dépose en 1884 les brevets d'une machine à cartes perforées qui trie et compte automatiquement ; employée pour le recensement de 1890, elle donne le décompte de la population en quelques semaines et l'ensemble des résultats en deux à trois ans, sur un volume bien supérieur. La société qu'il fonde en 1896 fusionne en 1911 dans la Computing-Tabulating-Recording Company, rebaptisée IBM en 1924. Le traitement automatique des données de masse est né avant l'ordinateur — et, avec lui, la question de ses usages : ces mêmes machines serviront au meilleur comme au pire au cours du XXe siècle.

15.4 1936 : la machine universelle

En 1928, David Hilbert pose le problème de la décision : existe-t-il une procédure mécanique qui, pour tout énoncé mathématique, décide s'il est démontrable ? Répondre suppose de définir ce que « mécanique » veut dire. Deux réponses paraissent en 1936, et elles sont négatives : celle d'Alonzo Church en avril, par le lambda-calcul ; celle d'Alan Turing (1912-1954), soumise en mai sous le titre On Computable Numbers, with an Application to the Entscheidungsproblem et publiée dans les Proceedings of the London Mathematical Society en 1936-1937.

Définition 15.4Machine de Turing et machine universelle

Une machine de Turing est un modèle abstrait de calcul : un ruban infini divisé en cases, une tête qui lit et écrit un symbole à la fois, un état interne, et une table de règles indiquant, pour chaque couple (état, symbole lu), quoi écrire, où se déplacer et dans quel état passer.

Turing démontre en 1936 l'existence d'une machine universelle : une machine de Turing particulière qui, recevant sur son ruban la description d'une machine quelconque et ses données, se comporte exactement comme elle.

C'est l'acte de naissance conceptuel de l'ordinateur, douze ans avant le premier ordinateur. Une seule machine physique suffit, pourvu qu'on lui donne la description de celle que l'on veut imiter : cette description, c'est le programme. Le logiciel est né avant le matériel.

◆Théorème 15.5Indécidabilité du problème de l'arrêt (Turing, 1936)

Il n'existe aucun algorithme qui, recevant en entrée le texte d'un programme quelconque et ses données, réponde toujours correctement à la question : « ce programme finit-il par s'arrêter ? »

Proposition 15.6Thèse de Church-Turing

Tout ce qui est calculable par une procédure mécanique l'est par une machine de Turing. Ce n'est pas un théorème mais une thèse : elle relie une notion informelle (« calculer mécaniquement ») à une définition mathématique, et n'a jamais été mise en défaut.

Conséquence pratique : Python, C, OCaml et Java calculent exactement les mêmes fonctions. Ils diffèrent par le confort, la sûreté et la vitesse, jamais par la puissance.

Claude Shannon (1916-2001) fait ensuite le lien manquant avec l'électricité. Dans son mémoire de master au MIT, soutenu en 1937 et publié en 1938 sous le titre A Symbolic Analysis of Relay and Switching Circuits, il montre que l'algèbre de Boole décrit exactement le comportement des circuits à relais : un circuit est une formule logique, et simplifier la formule, c'est économiser des composants. En 1948, son article A Mathematical Theory of Communication fonde la théorie de l'information — mesure de l'information, limites de la compression, correction des erreurs de transmission — et popularise le mot bit, proposé par son collègue John Tukey.

iRemarqueCe que ce livre doit aux années 1936-1948

Trois notions du programme de terminale viennent directement de là : la terminaison d'un algorithme, que l'on doit prouver à la main faute de pouvoir la décider automatiquement ; le codage binaire de toute information ; et l'idée qu'un programme est une donnée que l'on peut lire, transformer et transmettre.

15.5 1936-1951 : les premières machines et le programme enregistré

15.5.1 Quatre critères pour comparer les machines de guerre

Entre 1938 et 1946, plusieurs équipes construisent, souvent sans se connaître, des machines très différentes. Les comparer suppose de fixer des critères.

Méthode : Comparer deux architectures anciennes

Quatre questions suffisent à situer une machine des années 1940 :

  • Technologie : relais électromécaniques, ou tubes à vide (mille fois plus rapides, et mille fois plus fragiles) ?
  • Numération : binaire ou décimale ?
  • Programmation : câblage à refaire, bande perforée, ou programme rangé en mémoire ?
  • Universalité : la machine sait-elle répéter et surtout tester (branchement conditionnel) ? Sans test, elle n'est pas universelle au sens de Turing.
MachineAnnéeTechnologieProgrammeUniverselle
Z3 (Zuse, Berlin)1941relaisfilm perforénon
ABC (Atanasoff, Berry)1942tubesaucun (câblé)non
Colossus (Flowers)1944tubesfiches, commutateursnon
Harvard Mark I (Aiken)1944relaisbande perforéenon
ENIAC (Eckert, Mauchly)1945tubesfiches, commutateursoui
Baby (Manchester)1948tubesen mémoireoui

Le Z3 de Konrad Zuse, achevé à Berlin en mai 1941, est la première machine programmable automatique en état de marche : binaire, à virgule flottante, commandée par un film perforé, mais dépourvue de saut conditionnel ; elle est détruite par un bombardement en 1943. Colossus, conçu par Tommy Flowers et opérationnel à Bletchley Park en février 1944, est électronique et reprogrammable par commutateurs, mais spécialisé dans la cryptanalyse ; son existence est restée secrète jusqu'aux années 1970, ce qui a longtemps faussé les récits. L'ENIAC d'Eckert et Mauchly, achevé fin 1945 et présenté au public le 15 février 1946, est électronique, décimal, universel — et programmé en déplaçant des fiches et des commutateurs. Sa programmation était assurée par six mathématiciennes longtemps oubliées des récits officiels : Kathleen McNulty, Frances Bilas, Betty Jean Jennings, Ruth Lichterman, Elizabeth Snyder et Marlyn Wescoff.

iRemarque« Quel est le premier ordinateur ? »

La question n'a pas de réponse unique : chaque candidat gagne selon un critère différent — le Z3 pour la programmabilité (1941), l'ABC pour l'électronique (1942), Colossus pour l'électronique reprogrammable (1944), l'ENIAC pour l'universalité électronique (1945), le Baby de Manchester pour le programme enregistré (1948). Un procès a même tranché sur un point : le 19 octobre 1973, dans l'affaire Honeywell contre Sperry Rand, un juge fédéral américain invalide le brevet de l'ENIAC en retenant qu'Eckert et Mauchly avaient tiré des idées essentielles des travaux d'Atanasoff.

15.5.2 Juin 1945 : le rapport sur l'EDVAC

Le 30 juin 1945 circule un document intitulé First Draft of a Report on the EDVAC, signé du seul nom de John von Neumann. Il décrit une machine dont le programme, codé en nombres, est rangé dans la même mémoire que les données.

Définition 15.7Architecture à programme enregistré, dite de von Neumann

Une machine à programme enregistré comporte : une unité de commande qui lit et décode les instructions ; une unité arithmétique et logique qui calcule ; une mémoire unique contenant à la fois les instructions et les données, codées de la même manière ; des organes d'entrée et de sortie ; et un compteur ordinal, registre contenant l'adresse de la prochaine instruction. Le cycle d'exécution est toujours le même : lire l'instruction pointée par le compteur ordinal, la décoder, l'exécuter, passer à la suivante.

iRemarqueUne signature contestée

Le rapport ne porte que le nom de von Neumann, alors qu'il synthétise des idées discutées avec Eckert, Mauchly et l'équipe de la Moore School, qui ont protesté toute leur vie contre cette attribution. Un effet secondaire est resté : diffusé sous cette forme, le rapport a rendu ces idées publiques, donc non brevetables. On continue de dire « architecture de von Neumann » ; mieux vaut savoir ce que l'expression recouvre.

Les premières exécutions suivent de peu. Le 21 juin 1948, à Manchester, la Small-Scale Experimental Machine, surnommée Baby, exécute le premier programme jamais rangé en mémoire — la recherche du plus grand diviseur propre d'un nombre, en cinquante-deux minutes. C'est la date que retient le programme officiel pour la naissance de l'ordinateur. Le 6 mai 1949, à Cambridge, l'EDSAC de Maurice Wilkes devient la première machine à programme enregistré d'usage régulier. Puis le commerce commence : le Z4 de Zuse est loué à l'École polytechnique fédérale de Zurich en 1950, le Ferranti Mark 1 est livré en février 1951, et l'UNIVAC I au bureau du recensement des États-Unis le 31 mars 1951.

15.6 Le matériel : du tube au circuit intégré

15.6.1 Le transistor, le circuit intégré, le microprocesseur

Les tubes à vide de l'ENIAC consomment, chauffent et grillent. Aux Bell Labs, le 16 décembre 1947, John Bardeen et Walter Brattain obtiennent une amplification avec un dispositif à pointes de germanium ; la démonstration à la direction a lieu le 23 décembre. William Shockley conçoit en janvier 1948 le transistor à jonction, seul industrialisable, réalisé en 1951. Les trois reçoivent le prix Nobel de physique en 1956.

iRemarqueUne antériorité gênante

Le principe du transistor à effet de champ avait été breveté dès 1925-1926 par Julius Lilienfeld, sans jamais être réalisé ; ces brevets ont d'ailleurs empêché les Bell Labs de breveter leur propre transistor à effet de champ. L'invention n'est donc le fait ni d'un seul homme ni d'un seul jour : c'est la rencontre d'une idée ancienne, d'une théorie — la physique des semi-conducteurs — et d'un procédé de fabrication.

Assembler les transistors un par un devient vite le facteur limitant. Deux ingénieurs résolvent le problème presque simultanément : Jack Kilby (Texas Instruments) fait fonctionner le 12 septembre 1958 un circuit complet gravé dans un seul bloc de germanium, avec des fils soudés à la main ; Robert Noyce (Fairchild) conçoit en janvier 1959 un circuit en silicium dont les connexions sont déposées par le procédé planar, seul compatible avec la production de masse. Les deux sociétés se sont disputé les brevets avant de signer une licence croisée en 1966 ; la paternité est aujourd'hui partagée, et Kilby a reçu le prix Nobel en 2000. L'exemple est instructif : entre l'idée et le procédé industrialisable, c'est souvent le second qui change le monde.

Douze ans après le circuit de Noyce, en novembre 1971, Intel annonce le 4004, premier microprocesseur commercialisé : un processeur complet sur une puce, 2 300 transistors, 4 bits, conçu par Federico Faggin, Ted Hoff, Stanley Mazor et Masatoshi Shima pour une calculatrice japonaise. Là encore l'antériorité est discutée : le calculateur MP944 du chasseur F-14 (1970) est resté classifié jusqu'en 1998, et le circuit AL1 de Four-Phase Systems date de 1969.

15.6.2 La loi de Moore

Proposition 15.8La « loi » de Moore (1965, révisée en 1975)

Dans un article de la revue Electronics du 19 avril 1965, Gordon Moore observe que le nombre de composants par circuit intégré double chaque année, et prévoit que cela durera dix ans. En 1975, il révise son estimation à un doublement tous les deux ans.

Ce n'est pas une loi de la nature, mais une prévision empirique devenue feuille de route pour toute une industrie qui s'est organisée pour la tenir : une prophétie autoréalisatrice.

iRemarqueLa fin de la course à la fréquence

Jusque vers 2005, chaque génération de processeurs était à la fois plus dense et plus rapide : un programme séquentiel allait plus vite sans qu'on y touche. La dissipation de chaleur a mis fin à cette facilité — les fréquences plafonnent depuis autour de quelques gigahertz, et les transistors supplémentaires servent désormais à multiplier les cœurs. C'est la raison historique pour laquelle le chapitre sur les systèmes d'exploitation insiste tant sur l'ordonnancement et la concurrence : depuis 2005, aller plus vite exige de découper le travail entre des processus réellement parallèles.

15.7 Le logiciel : des langages, un métier, une industrie

15.7.1 Ne plus écrire en binaire

Sur les premières machines, programmer signifie écrire des nombres. Trois étages de traduction apparaissent en quinze ans. Vers 1949-1951, l'assembleur remplace les codes numériques par des mnémoniques et les adresses par des étiquettes ; à Cambridge, David Wheeler invente le mécanisme d'appel de sous-programme qui porte son nom, et la bibliothèque de code réutilisable est née. En 1952, Grace Hopper (1906-1992) réalise l'A-0, souvent présenté comme le premier compilateur — le terme est à nuancer, car l'A-0 assemblait des sous-programmes plutôt qu'il ne traduisait un langage ; son travail suivant, FLOW-MATIC (1955-1959), utilise en revanche des instructions en anglais. En avril 1957, l'équipe de John Backus chez IBM livre le premier compilateur FORTRAN, commencé en 1954 : le pari — produire un code machine aussi efficace que celui d'un humain — était jugé perdu d'avance ; il est gagné, et le langage de haut niveau s'impose.

Exemple 15.9Le même calcul, à quatre niveaux d'abstraction

Additionner deux nombres et ranger le résultat, tel que le programmeur l'écrit selon l'époque :


1948  en machine     : 1 20   3 21   2 22    (des nombres, rien d'autre)
1951  en assembleur  : CHARGE X ; AJOUTE Y ; RANGE Z
1957  en FORTRAN     : Z = X + Y
1991  en Python      : z = x + y

Le travail n'a pas disparu : il a été déplacé dans un programme — l'assembleur, puis le compilateur — écrit une fois pour toutes. C'est le premier exemple de logiciel qui remplace du travail humain, et il est écrit par des programmeurs pour des programmeurs.

15.7.2 1958-1967 : les idées qui structurent encore ce livre

En 1969, aux Bell Labs, Ken Thompson et Dennis Ritchie écrivent Unix sur une machine mise au rebut ; Ritchie crée en 1972 le langage C, et Unix est réécrit en C dès 1973. Pour la première fois, un système d'exploitation devient portable : toutes les familles de systèmes actuelles, sauf Windows, descendent de là. En 1989, Guido van Rossum commence Python au CWI d'Amsterdam, en héritier du langage d'enseignement ABC ; la version 0.9.0 paraît en février 1991, la 2.0 en 2000, la 3.0 en 2008. Le même mois d'août 1991, Linus Torvalds annonce le noyau Linux.

15.7.3 L'évolution des rôles du logiciel et du matériel

Le 23 juin 1969, IBM annonce qu'il facturera désormais séparément les machines, les logiciels et les services. Ce « dégroupage » crée du jour au lendemain un marché : le logiciel devient un produit que l'on vend, et une industrie naît. Quatorze ans plus tard, le 27 septembre 1983, Richard Stallman annonce le projet GNU, qui vise un système complet librement modifiable et redistribuable ; la licence GPL formalise ces libertés en 1989, et le noyau Linux (1991, placé sous GPL l'année suivante) lui apporte la pièce manquante.

Proposition 15.10Quatre âges du partage entre logiciel et matériel
  • Jusqu'en 1948, le programme est dans le matériel. On programme en câblant ; le logiciel n'a ni existence séparée, ni nom.
  • De 1948 à 1969, le programme est une donnée en mémoire. Il devient un texte que l'on écrit, corrige et traduit, mais il est encore livré avec la machine, sans prix propre.
  • De 1969 à 1990, le logiciel est un produit. Vendu à part, il vaut bientôt plus cher que la machine ; le micro-ordinateur banalise le matériel, et le logiciel libre conteste les nouveaux monopoles.
  • Depuis 2000, le logiciel est un service. Il s'exécute sur des machines louées à l'heure, auxquelles on accède par le réseau ; le matériel se cache — sauf là où il redevient spécialisé, comme les cartes graphiques de l'apprentissage automatique.

15.8 Les données et les réseaux

15.8.1 1970 : le modèle relationnel

Jusque-là, interroger une base de données suppose de savoir comment les enregistrements sont rangés sur le disque. En juin 1970, Edgar Frank Codd, chercheur chez IBM, publie A Relational Model of Data for Large Shared Data Banks : les données sont des relations — des tables — et on les interroge par une algèbre, sans rien savoir de leur stockage. Le projet System R d'IBM (1974-1979) en fait un système réel et invente au passage le langage SEQUEL, devenu SQL ; Oracle commercialise sa version 2 en 1979 ; SQL est normalisé en 1986-1987. Cette indépendance entre la description logique des données et leur rangement physique est l'idée qui structure les chapitres consacrés aux bases de données.

15.8.2 1969-1993 : d'ARPANET au Web

L'idée fondatrice des réseaux est la commutation de paquets : découper les messages en morceaux acheminés indépendamment, au lieu de réserver un circuit d'un bout à l'autre. Elle est proposée séparément par Paul Baran (RAND, 1960-1964) et Donald Davies (Royaume-Uni, 1965-1966, à qui l'on doit le mot paquet), sur des bases théoriques développées par Leonard Kleinrock — dont la part exacte est, elle aussi, discutée.

iRemarqueInternet et le Web ne sont pas la même chose

Internet est l'infrastructure : des machines reliées, des adresses, des protocoles d'acheminement (1969-1983). Le Web est l'une des applications qui l'utilisent (1989-1993), au même titre que le courrier électronique, plus ancien que lui. Dire « Tim Berners-Lee a inventé Internet » est donc faux, et l'erreur est instructive : elle confond une couche basse avec l'usage le plus visible qu'on en fait.

L'ordinateur personnel avait entre-temps déplacé le calcul vers l'utilisateur : le Micral N de François Gernelle (janvier 1973, France) et l'Altair 8800 (1975) se disputent le titre de premier micro-ordinateur, avant l'Apple II (1977), l'IBM PC (12 août 1981) et le Macintosh (24 janvier 1984), dont l'interface graphique doit tout au Xerox Alto (1973) et à la démonstration de Douglas Engelbart du 9 décembre 1968 — souris, hypertexte et travail collaboratif réunis en une heure et demie. Depuis, le mouvement s'est inversé : avec les services en ligne (Amazon Web Services, 2006) et le téléphone intelligent (iPhone en 2007, Android en 2008), calcul et données repartent vers de grands centres, et la machine de l'utilisateur redevient un terminal — un retour partiel au temps partagé des années 1960, dont le système CTSS du MIT (1961) fut le premier exemple.

15.9 Repères pour les autres notions du livre

Le programme officiel demande que ces repères soient « construits au fur et à mesure de la présentation des concepts ». Voici, notion par notion, d'où viennent celles que ce livre enseigne.

Proposition 15.11D'où viennent les notions étudiées
  • Piles et files : la pile d'exécution est décrite par Turing en 1946 dans son rapport sur la machine ACE, puis formalisée par Bauer et Samelson en 1955-1957.
  • Dictionnaires et tables de hachage : le hachage est proposé par Hans Peter Luhn chez IBM en 1953, pour retrouver une fiche sans parcourir tout le fichier.
  • Graphes : le premier résultat est celui d'Euler sur les ponts de Königsberg (1736) ; l'algorithme du plus court chemin est trouvé par Edsger Dijkstra en 1956 et publié en 1959.
  • Diviser pour régner : le tri fusion est attribué à von Neumann (1945) ; le tri rapide est inventé par Tony Hoare en 1959 et publié en 1961 ; Karatsuba montre en 1960 que la multiplication peut être plus rapide que la méthode de l'école.
  • Programmation dynamique : Richard Bellman, années 1950, ouvrage de 1957. Le nom, volontairement vague, devait faire accepter le financement de ses recherches.
  • Algorithmes gloutons : le codage de Huffman naît en 1952 d'un devoir donné à ses étudiants par Robert Fano au MIT.
  • Programmation objet : Simula 67, puis Smalltalk (Alan Kay, Xerox PARC, années 1970).
  • Modularité et tests : David Parnas publie en 1972 le critère de découpage en modules encore enseigné — chaque module cache une décision susceptible de changer.
  • Bases de données : Codd (1970), SQL (1974), normalisation (1986-1987).
  • Systèmes et processus : le temps partagé (CTSS, 1961 ; Multics, à partir de 1964) invente l'ordonnancement, puis Unix (1969) lui donne sa forme durable.
  • Réseaux : ARPANET (1969), TCP/IP (1974), bascule d'Internet (1983), Web (1989-1993).

15.10 Bilan

Ce chapitre a suivi une seule histoire, celle d'une séparation progressive entre la machine et ce qu'elle fait.

Deux réflexes valent d'être conservés au-delà de ce chapitre. Le premier : devant une affirmation historique, demander selon quel critère — « le premier ordinateur » ne veut rien dire sans définition. Le second : devant une technique, chercher quel problème elle résolvait. Les cartes perforées ont disparu, mais la ligne de caractères est restée ; et l'architecture décrite en 1945 gouverne encore la machine sur laquelle ce texte est lu.

Continuer sur Adloun : animation, QCM, fiches, exercices