Première moitié du vingtième siècle : la réflexion mathématique

Le XXème siècle débute sur des questions mathématiques en apparence fortement éloignées des questions de la technologie de programmation (complétude, cohérence, décidabilité – Travaux de D. Hilbert), auxquelles répond, entre autres, K. Gödel avec ses travaux sur les systèmes formels.

Cette réflexion fondamentale va précéder les travaux de la première légende de l’informatique : A. Turing et sa machine. Prouvant que cet automate n’était pas en mesure de déterminer si oui ou non il arrivait à s’arrêter en fonction de conditions initiales fixées, il illustre par l'invention de ce premier automate programmé le non-déterminisme des travaux fondamentaux. Il est également l'inventeur du test de Turing, capable de déterminer si une machine avait ou non une intelligence semblable à l'intelligence humaine (Cf. les années 50 ci-dessous).

Côté business, en 1917, une petite compagnie rachète International Scale Company : elle s'appelle IBM
De l'autre côté de l'atlantique, en 1936, Conrad Zuse met au point un calculateur avec mémoire, le Z1.
En 1938, MM. Hewlet et Packard construisent leur premier centre de recherche moderne : le garage au fond de la cours. Une autre légende...


Les années 1940 : naissance de l'ordinateur

C’est la guerre qui donne une consistance technique à ces travaux :

  • 1944, à Harvard, Howard Aiken (1900-1973) et IBM construisent le calculateur électromécanique Mark I
  • John Mauchly (1907-1980) et John Eckert (1919-1995), conçoivent et réalisent l' ENIAC à l'Université de Pennsylvanie (achevé en 1946).
  • En 1944, Mauchly, Eckert, et John von Neumann (1903-1957) conçoivent l'EDVAC qui aboutira à la construction de l'UNIVAC.
  • En Angleterre, F. Williams (né en 1911) construit le Manchester Mark I, opérationnel en juin 1948 ; cette machine peut être considérée (surtout par les anglais) comme le premier ordinateur avec un programme en mémoire (architecture de Von Neumann).
  • 1947 : invention du transistor par John Bardeen, Walter Brattain et William Shockley (Prix Nobel de Physique en 1956)
  • 1949 :Jay Forrester (né en 1918) invente la mémoire à noyau magnétique.


Les techniques de programmation restent plus que rudimentaires pendant cette décennie (câbles et interrupteurs !).


Les années 50 : premières avancées des technologies de programmation

  • 1950 : dans un célèbre article de la revue Mind, Alan Turing décrit le test de Turing, l'une des premières avancées en intelligence artificielle.
  • 1951 : Grace Hopper (1906-1992) invente la notion de compilateur (et découvre la première bogue, en fait une phalène morte dans le Mark II de Harvard et provoquant des dysfonctionnements - heureusement, de nos jours nous n'avons plus ces problèmes de bogues...).
  • 1956 : Edsger Dijkstra décrit un algorithme efficace pour résoudre le problème des plus courts chemins dans un graphe, à titre de démonstration pour l'ARMAC en 1956. Il trouva aussi un algorithme efficace de recherche d'un arbre recouvrant de poids minimal, afin de minimiser le câblage du X1 (le parcours d'arbres et de graphes est un élément fondamental de toute la programmation informatique).
  • 1957 : John Backus écrit le premier compilateur FORTRAN (et oui, le jeunôt à plus de 40 ans !)
  • 1958 : John McCarthy invente le LISP (List Processing), où l'art de programmer tout en récursivité (esprits brouillons s'abstenir...).
  • 1959 :Alan Perlis, John Backus, Peter Naur développent Algol (Algorithmic Language - les informaticiens ont pu ainsi noyer leur chagrin dans l'algol...).

Du côté matériel, Jack Kilby (Texas Instruments) et Robert Noyce (Fairchild Semiconductor) inventent les circuits intégrés en 1959 alors qu'IBM commercialise en 1953 son premier ordinateur : l'IBM 701 EDPM.

Les années 50 permettent une première avancée majeure en technologie de programmation : l’invention de langages permettrant de s’abstraire du codage binaire de la machine. La recherche algorithmique commence à prendre son essor.


Les années 1960 : vraie naissance de la programmation informatique

C’est la guerre qui donne une consistance technique à ces travaux :

  • Les années 1960 voient émerger la théorie des automates et des langages formels (Noam Chomsky, Michael Rabin, …), travaux sur les méthodes formelles de preuve des programmes, travaux de Tony Hoare (monsieur Quicksort), travaux de Donald Knuth (né en 1938), auteur du traité The Art of Computer Programming (Knuth, The Art of Computer programming, Addison Wesley) qui pose des fondements mathématiques rigoureux pour l'analyse des algorithmes.
  • 1964 : invention du langage BASIC par John Kemeny (1926-1992) et Thomas Kurtz (né en 1928)
  • 1965 : premier Ph.D. d'informatique (doctorat) délivré à Richard Wexelblat par l'Université de Pennsylvanie

Les travaux d'Edgar Codd sur les bases de données relationnelles permettent une avancée majeure dans la théorie des bases de données. Codd reçut le Turing Award en 1961.

Du côté matériel, Fred Brooks (IBM) conçoit le système d’exploitation System/360, pour une série d'ordinateurs de différentes tailles, de même architecture et de même ensemble d'instructions :on commence à construire ARPAnet, le précurseur d'Internet et Ted Hoff (né en 1937) et Federico Faggin (Intel) conçoivent le premier microprocesseur entre 1969 et 1971.


Les années 1970 : la décennie des applications

Le système d'exploitation Unix et son langage de programmation C, fut développé aux Bell Laboratories par Ken Thompson (né en 1943) et Dennis Ritchie (né en 1941). On voit naître de nouveaux langages très structurés, tels que Pascal (inventé par Niklaus Wirth) et Ada (inventé par Jean Ichbiah).

Whit Diffie et Martin Hellman publient un article fondant la théorie de cryptographie à clef publique puis le système de cryptage RSA est inventé par Ronald Rivest, Adi Shamir et Léonard Adleman.

Le modèle "entité-association" apparaît entre 1972 et 1975 avec les travaux du français MOULIN puis de TARDIEU, TEBOUL. Il a été rendu célèbre par l'américain Peter CHEN, à la suite d'une publication intitulée "The Entity-Relationshionship Model" (ACM, Transaction on Database Systems, 1976).
A ce jour tous les spécialistes de l'analyse orientée base de données se servent de ce modèle comme outil de communication des applications SGBDR. Il aboutira à la création des bases de données tel ACCESS, PARADOX, ORACLE, SQL Server, Informix, Ingres, Sybase…

En 1971, Steve Cook publie un article fondamental sur la NP-complétude, et, peu après, Richard Karp montre que de nombreux problèmes combinatoires naturels sont NP-complets (les travaux sur les algorithmes NP-complets s'incrivent dans l'idée de trouver un moyen d'avoir des réponses de programmes dans un temps fini).

En 1971 toujours, Intel met au point son premier microprocesseur : le 4004. Motorola fera de même pour le 6800 en 1974.
C’est aussi la grande époque des super-calculateurs (CRAY-1 en 1976) et le départ timide de USENET (1979).

A la fin des années 70, les technologies de programmation sont matures et c’est le véritable départ de l’application large de ces technologies dans l’entreprise. La naissance des Directions des Services d'Information (DSI) suivra quelques années plus tard. L'informatique sortait de la tour d'ivoire scientifique... pour se bâtir un bastion dans l'entreprise. L'idée de services informatiques au service de clients n'était pas encore inventée...


Les années 1980 : informatique pour tous et remise en cause

En prolongement du mouvement des années 70, l’informatique arrive dans les foyers :

  • apparition du micro-ordinateur personnel (travaux du Xerox Park, application par Steve Wozniak et Steve Jobs -premier apple en 1976-)
  • commercialisation par IBM du premier PC en 1981,
  • commercialisation du premier ordinateur portable en 1982 –Osborne I-
  • et du MacIntosh en 1984.

Côté technologie de programmation, un fait marquant : les premiers virus informatiques apparaissent en 1981 (leur nom est dû à Leonard Adleman).

Mais cette décennie est aussi un constat de carences et de scories informatiques. Dans « Evaluations of programming languages (1982) », E.Dijkstra (mort en 2002) exécute lapidairement un certain nombre de stars de l’époque :

FORTRAN, "the infantile disorder", by now nearly 20 years old, is hopelessly inadequate for whatever computer application you have in mind today: it is now too clumsy, too risky, and too expensive to use.

PL/I -- "the fatal disease" -- belongs more to the problem set than the solution set.

It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.

The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense.

APL is a mistake, carried through to perfection. It is the language of the future for the programming techniques of the past: it creates a new generation of coding bums.

Le constat est fait qu’il y a de nombreuses façons de programmer, mais que bien programmer est autant un problème de méthode que de technologie. Il devient urgent d’inventer le génie logiciel. On recherche alors de nouvelles méthodes de développement, on se dote d’outils et d’environnement de développement. Viendront ensuite dans les années 90, la notion de réutilisabilité des composants, d’inter-opérabilité et java en synthèse technologique.


Un siècle après, le défit des services utilisateurs ?

En un siècle, les informaticiens ont su développer les théories de programmation et les outils nécessaires à l'écriture de programmes. Cependant, ils semblent toujours convaincus que le programme est une fin en soit, la réponse aux questions que des utilisateurs ont pu leur poser.

Pourtant, cette affirmation est totalement fausse : le programme et les matériels qui le font tourner ne sont qu'un outil intermédiaire destiné à rendre un service. Hormis en informatique fondamentale, l'informatique n'est qu'un maillon intermédiaire entre la demande "métier" d'un utilisateur d'une société (où une demande plus informelle de tout un chacun), et le service informatique à rendre. Il reste à franchir systématiquement une étape de traduction entre le "monde des programmes" et celui "des services". Lorsque le processus de développement et de mise en production est complet, cette étape est assurée par l'intégration de production, qui est un espace particulier de programmation où le but n'est pas tant de développer des programmes que de les transformer en service informatique.
Ce domaine de l'intégration de production des services est très mal théorisé (s'il l'est), très mal compris et très peu outillé. Techniquement, c'est pourtant un secteur qui n'a besoin que de réutiliser les bases informatiques des années 60 (quarante ans plus tard) ; la vraie difficulté réside dans le fait que ce domaine est aux confluences de l'organisation d'entreprise, des métiers des utilisateurs et du savoir faire de l'informatique (architecture, études, développement et production).

Lorsque l'informatique aura passé cette étape, elle quittera sans doute son statut de technologie émergente pour passer à celle de technologie mature, c'est à dire au sein de celles qui rendent le service que l'on demande.

Liens

Les curieux pourront se reporter à :

On pourra se reporter à certains travaux de Dijkstra

  • A constructive approach to the problem of program correctness
  • Notes on Structured Programming
  • Cooperating sequential processes
  • Structured programming