[petite] histoire des
(gH) gilles.hunault@univ-angers.fr
Histoire : passé, présent, avenir
Voici un trés bref rappel de l'apparition seulement des langages les plus marquants car comme indiqué en fin d'introduction il y a énormément de langages ; de plus la plupart des langages ont différentes versions, variantes et dialectes étalés sur plusieurs années ce qui complique la chronologie.
Une des difficultés pour ce court historique est de situer précisément les langages. Il se passe en général quelques années entre les premières idées et l'implémentation, d'où parfois des dates différentes suivant les auteurs...
Nous avons volontairement (et malheureusement) omis certains langages comme Forth, Postscript... pour la concision de l'exposé.
Tout a commencé dans les années 1950 avec Fortran, Cobol et Lisp, même si il y a eu de nombreux précurseurs. Ainsi les grecs, les chinois savaient calculer, automatiser (à la main) des calculs. Nous ne retiendrons donc que deux dates importantes à nos yeux. En 820, le mathématicien El Khawarizmi a publié à Bagdad un traité intitulé "La science de l'élimination et de la réduction" qui, importé en Europe Occidentale lors des invasions arabes a eu une grande influence sur le développement des mathématiques. En 1840, Ada Lovelace (1814-1852), a défini le principe des itérations successives dans l'exécution d'une opération. En l'honneur d'El Khawarizmi elle a (probablement) nommé "algorithme" le processus logique d'exécution d'un programme.
De son "vrai" nom Augusta Ada Byron, elle était la fille du poète romantique Lord George Byron et d'une mathématicienne. Féministe, elle a épousé de William King (futur comte de Lovelace) ce qui lui vaudra d'être connue dans l'histoire comme Lady Lovelace plutôt que comme Ada King. Elle avait été l'élève de Charles Babbage avant de devenir sa collaboratrice. Elle est aussi à l'origine du "Principe des machines à calculer". Pour elle, une machine à calculer devait comporter :
- un dispositif permettant d'introduire les données numériques (cartes perforées, roues dentées...),
- une mémoire pour conserver les valeurs numériques entrées,
- une unité de commande grâce à laquelle l'utilisateur va indiquer à la machine les tâches à effectuer,
- un "moulin" chargé d'effectuer les calculs,
- un dispositif permettant de prendre connaissance des résultats (imprimante...).
Ces principes seront, un siècle plus tard, à la base des premiers ordinateurs, même si en 1943...
Les années 1950 : Fortran, Lisp, Cobol, [Algol].
En 1950, l'invention de l'assembleur par Maurice V. Wilkes de l'université de Cambridge ouvre la voie aux langages dits "de haut niveau". Avant, la programmation s'effectuait directement en binaire. Grace Murray Hopper (1906-1992), une américaine, mobilisée comme auxiliaire dans la marine américaine, développe pour Remington Rand le tout premier compilateur, nommé A0. Il permet de générer un programme binaire à partir d'un "code source".
Alors que le langage Fortran commence à apparaitre vers 1955 notamment chez Ibm, Grace Hopper s'intéresse aux langages qui utilisent des mots voire des expressions du "langage naturel". Après B0 et Flowmatic, elle participe, dès 1959, à l'élaboration de ce qui deviendra le langage Cobol. Dans le même temps (soit vers 1958) John Mc Carthy, mathématicien au MIT qui y a fondé en 1957 le département d'Intelligence Artificielle, crée le langage Lisp.
Cette même année 1958, selon Allen Tucker "une commission de représentants du GAMM (organisme européen regroupant des chercheurs en informatique) et de l'ACM (son équivalent américain) se réunit à Zurich et rédigea un rapport préliminaire sur un <<langage algébrique international>> nommé LAI ou encore Algol58.
Avec la fin des années 50 s'achève ce qu'on nomme aujourd'hui l'ère des ordinateurs de première génération qui utilisent principalement les cartes perforées. La seconde génération, celle qui utilise les transistors va prendre pleinement son essor.
Les années 1960 : Apl, Basic, Pl/1, Logo.
Fortran et Cobol s'installent comme langages principaux : pendant 20 ans Cobol sera le langage le plus utilisé au monde. Aujourd'hui, il détient toujours le record du grand nombre de lignes écrites dans un langage de programmation. Par contre, Lisp reste cantonné à la communauté de l'intelligence artificielle. Si Algol devient un langage pour la publication d'algorithmes, il sera peu implémenté. Modifié en Algol W puis en Algol68, il ne parvient pas à devenir le langage standard universel qu'il aurait du être sans doute parce que trop complet pour l'époque et trop difficile à implémenter pour ces années 60.
En 1962, le mathématicien canadien Kenneth Iverson crée un système de notation pour les mathématiques et qui deviendra grâce à IBM le langage de programmation APL qui est très original car il ne comporte pas de mots mais des symboles spéciaux. Il nécessite un clavier spécial, ce qui freinera beaucoup sa diffusion. Bien que répandu et encore utilisé, il restera toujours à part dans le monde de la programmation. Révolution, il existe un ordinateur transportable (25 kg !) nommé APL5100 qui démarre sous APL là ou les autres langages utilisent des cartes perforées utilisables via des machines perforatrices sans écran.
Thomas Kurtz et John Kemeny créent en 1964 un langage au Dartmouth College pour leurs étudiants. ce langage pour "débutants" se nomme avec un jeu de mots BASIC. Pendant ce temps, constatant les faiblesses de Cobol et Fortran, et pour assurer sa suprématie dans le monde de la programmation IBM crée le langage de programmation PL/1.
Le langage de programmation LOGO est créé en 1966 par une équipe chez BBN (Bolt Beranek & Newman) dirigée par Wally Fuerzeig dont faisait partie Seymour Papert. Ce langage très graphique est basé sur le principe d'une tortue que l'on pilote à l'écran en lui donnant des ordres (tourner, avancer, etc...). Venu sans doute trop tot, il n'aura pas le mérite qu'on aurait pu en attendre.
Les années 1970 : Pascal, Prolog, SmallTalk, C, Awk, Ada, Rexx.
Depuis 1968 Niklaus WIRTH développe Algol. A force de le modifier, il finit par mettre au point un successeur d'Algol nommé le langage PASCAL. Ce langage, moins puissant qu'Algol, est bien structuré, très lisible, trés "coercitif" et se trouve donc bien adapté à l'enseignement de la programmation. Il va être pendant une quinzaine d'années le langage préféré de nombreux enseignants en informatique.
Dès 1970, Ken Thompson, pensant que le système d'exploitation UNIX ne serait pas complet sans un langage de programmation de haut niveau commence à porter le Fortran sur le PDP 7 mais change rapidement d'avis et crée en fait un nouveau langage, le B (en référence au BCPL dont il s'inspire). 2 ans plus tard, Dennis Ritchie du Bell Lab d'ATT reprend ce langage B pour mieux l'adapter au PDP/11 sur lequel UNIX vient juste d'être porté. Il fait évoluer le langage et le dote d'un vrai compilateur générant du code machine PDP/11 : c'est la naissance du langage C. En 1978, Brian Kernighan écrit un livre au sujet de la programmation en langage C devenu LA référence au point que ce livre est surtout connu sous le nom : "Le Kernighan & Ritchie".
En 1970 aussi, la DOD (Département de la défense américaine) trouve qu'il y a beaucoup trop d'assembleur dans les systèmes embarqués et aimerait utiliser un "bon" langage de programmation. En 1975, une groupe d'études de penche sur 23 langages déjà existant. La conclusion de l'analyse sera qu'il faudra un nouveau langage, sans doute basé à la fois sur Pascal, Algol et Pl/1. Après un appel d'offre et plusieurs sélections, c'est finalement en 1979 le projet de Jean Ichbiach, avec l'équipe d'Honeywell Bull de Marseille qui sera retenu. Ce langage sera nommé Dod-1 puis Ada. Ce choix par le Pentagone Américain comme l'unique langage de développement imposé à ses services à la place de la jungle des centaines de langages et dialectes aurait du en faire le premier langage de développement au monde mais la difficulté à maitriser Ada en fera un "outsider".
Toujours au début des années 1970 (décidément !), Philippe Roussel et Alain Colmerauer dans leur Groupe d'Intelligence Artificielle de Marseille développent un langage qui fonctionne de façon totalement différente des autres langages : on y programme logiquement c'est à dire en spécifiant seulement des relations logiques : il se nomme Prolog et devient le langage privilégié pour l'Intelligence Artificielle.
L'année 1972 passera inaperçue ; pourtant c'est l'année de la création du premier langage totalement objet, SmallTalk par Alan Kay au Xerox PARC. Révolutionnaire, il utilse une souris et comporte un environnement de développement :
Mike Coolishaw écrit à la fin des années 70 une première version du langage Rexx pour IBM afin de remplacer le langage de commandes Exec2. Dans le même temps, un langage simple, utilisant la syntaxe du C -- mais sans les pointeurs -- et s'inspirant de sed et grep est inventé par informaticiens (dont Brian Kernighan) pour gérer les fichiers-textes et les pages d'information des commandes systèmes : c'est le langage Awk. Ces deux "petits" langages sont immédiatement acceptés pour une programmation "rapide" et "jetable".
Les années 1980 : Dbase, C++, Eiffel, Perl, Tcl/Tk, Mathematica, Maple.
Le début des années 80 consacre le développement de la petite informatique et de la micro-informatique : on y voit naitre les premiers PC et les premiers Apple (mais Windows n'existe pas encore). Dbase va s'imposer dans ces années 80 comme "le" gestionnaire de "bases de données relationnelles" lorsque l'approche tableur (Multiplan, Visicalc...) n'est pas adaptée.
Dbase est facile à utiliser, il propose des menus, des masques de saisie ce que ne fournit pas à l'époque Pascal (Turbo ou pas..) ni C, ni Fortran. De plus, Dbase permet aux entreprises de se libérer de la gestion à distance via les infocentres...
Pourtant, la révolution objet est en marche ; elle permet d'écrire de plus gros programmes mieux structurés, plus facilement modifiables et plus surs. En 1983 Bjarn Stroustrup développe une extension orientée objet au langage C qui deviendra le langage C++ alors que Bertrand Meyer conçoit un langage complètement objet nommé Eiffel pour lequel un compilateur sort dès 1986. Il faudra pourtant quelques années avant que les "objets" deviennents prépondérants en programmation...
Cette même année 1986, Larry Wall qui est un programmeur système mais aussi un linguiste décide de parfaire les outils Unix de traitement d'informations texte dont sed et le langage Awk : le langage Perl vient de naitre. Grace aux Web et à des scripts (programmes) parfois très courts, Perl devient un outil indispensable pour gérer les fichiers-textes, les affichages des commandes des systèmes d'exploitation.
Vers la fin des années 80, les langages de commandes et de script se développent pour tous les types d'ordinateurs. Parallèlement, la notion d'interface graphique pour utilisateur (GUI) commence à entrer dans les moeurs pour les "grands systèmes" ; John Osterout invente à l'Université de Californie (Berkeley) en 1988 les langages Tcl et Tk pour des "développements rapides" : Tcl est la partie "scripts de commandes" dont Tk produit l'interface. Le langage est connu depuis sous le nom de Tcl/Tk.
Les mathématiques ne sont pas en reste : dès la fin des années 80, Stephen Wolfram développe un langage et environnement pour programmer des mathématiques formelles et appliquées : Mathematica alors qu'un autre langage au début sans interface autre que la ligne de commande, commence a émerger : le langage Maple.
Enfin, même s'il n'est pas vraiment considéré comme un langage de programmation, le langage HTML (Hypertext Markup Language) est développé en 1989 par Tim Berners-Lee. Ce sera "LE" langage du Web (diapositive aimablement fournie par D. Genest du Laboratoire LERIA, Angers).
Les années 1990 : Java[script], Php, Mysql, VisualBasic.
Les années 90 voient s'installer un peu partout dans le monde un produit logiciel qui révolutionne Dos : c'est Windows. C'est en 1990 que Microsoft sort son produit Windows 3.0 qui est une version complétement revue des premiers "Microsoft Windows". Un an plus tard, mais sans publicité, Linux 0.01 est annoncé par un étudiant, Linus Torvald à l'Université d'Helsinki. Linux va se développer très rapidement grâce à Internet et grâce à deux concepts-phare : la disponibilité du code-source des programmes et la gratuité, suivant en cela le projet GNU de by Richard Stallman, le fameux créateur de l'éditeur emacs. Dans le même temps, les laboratoires de Sun étoffent Tcl pour en faire un "langage de script universel adapté à Internet" et le portent pour Windows et Macintosh. Tk va devenir une "sur-couche" de nombreux langages dont Rexx, Perl...
Le développement très fort d'Internet influence fortement les concepteurs de langage. En 1995, suite à de nombreuses réunions de comité du WWW, le langage LiveScript est renommé en Javascript et est considéré comme une "bonne" solution pour gérer dynamiquement les pages Web. Il est aussitot incorporé dans Netscape 2. Mais il manque toujours un langage complet, objet, capable de dialoguer avec les serveurs Web et les bases de données. Dans la même année 95, Java est introduit comme langage de développement objet "multi-OS" pour combler ce manque.
La gestion des formulaires et des bases de données accessibles par le Web voit apparaitre pratiquement en même temps le langage Php, souvent couplé au langage de base de données Sql notamment dans ses implémentations Mysql et PosgresSql.
Parallèlement, la domination de Windows comme système d'exploitation pour le grand public avec ses deux logiciels phares Word et Excel induit progressivement l'utilisation de "macros" pour tirer pleinement profit des possibilités de ces logiciels : le langage Basic, remanié, rendu objet avec ses fonctions liées aux documents devient VBA c'est à dire "Visual Basic for Applications".
IBM ne reste pas à la traine : une version objet de Rexx apparait, nommée Object Rexx puis Orexx, disponible pour OS/2, Win32, AIX et Linux. Pour "maitriser" le phénomène Web, NetRexx est introduit par IBM en 1996. Il s'agit d'une sur-version de Rexx pour Java qui restera, comme Orexx un produit d'IBM pour IBMeurs.
Les années 2000 : Java 2, Delphi 7, Php 4.3.3, Perl 5.8.1, C#.
Les années 2000 ne voient pas apparaitre de nouveau langage marquant. La tendance est plutôt à l'amélioration et à l'enrichissement des langages présents. L'omniprésence d'Internet force les langages développés pour le Web à progresser encore : un programme (ou "application" en anglais) pour le Web devient une "applet", une "weblet" ou quelquechose en let" ainsi un script général imbriqué dans une page Web est un "scriptlet". Programmé en Tcl, c'est une "tcl-let". Conçue comme sous le mode client-serveur, c'est une "servlet". Pour répondre à ces attentes, les langages accumulent version sur version jusqu'à fournir un produit "stable" et "complet". Le tableau suivant présente quelques exemples de progression de version :
Tcl/Tk Php Java Perl 2000 8.2 4.0 1.3 5.7 2001 8.3 4.1 2002 8.4 4.2 1.4 5.8.0 2003 8.4.3 4.3.3 1.4.2 5.8.1 ... 2005 8.4.11 5.0.5 1.5 5.8.7 2006 8.4.13 5.1 2.1 5.8.8 ... 2009 8.5.8 5.3.1 SE 6 5.10.1Il faut noter que Java 1.5 est une version très mûre, très stable de Java, enrichie de nouvelles biblothèques de sous-programmes (plus précisément de "classes"), disponible pour tout système d'exploitation : Unix, MacOs, Dos et Windows et qui devient une référence pour la programmation et le développement de tous types d'applications.
De même Delphi, le successeur de Pascal, TurboPascal et Pascal Windows propose une interface complète de développement dit "intégré" (IDE) sous Windows et un frère jumeau sous Linux : Kylix. L'écriture d'interfaces utilisateur avec des boutons, des menus, des fenêtres multidocuments n' a jamais été aussi facile.
Avec le développement extraordinaire de la microinformatique, la multiplication des ordinateurs familiaux et des ordinateurs portables l'apparition des ordinateurs et des PDA, et aussi l'accès massif (via Internet) aux logiciels libres dont de nombreux langages de programmation les systèmes d'exploitation évoluent aussi. Les langages traditionnels se dotent de compléments pour offrir des intégrations au Web, aux architectures client-serveur (en mode Intranet ou Internet). Ainsi Dbase, après avoir presque disparu, réapparait sous le nom Db2k (prononcé "dibi tout quai") dans une version objet Win0dows avec un environnement de développement complet et graphique, offrant une programmation client-serveur et permettant l'intégration de services Web.
Maple aussi se doit de répondre à de telles demandes : Maple 8 en avril 2002 introduit la notion de "maplet" et permet de traduire "à la volée" les procédures Maple en programme Java, Maple 8 sait exporter en XML ou en HTML avec MathML, Maple 8 peut être appelé depuis Excel, Maple 8 peut être exporté pour être intégré dans des applications Web dynamiques avec javaView... Maple 9 en mai 2003 s'améliore encore en se dotant d'OpenMaple, une API pour appeler Maple depuis un autre langage (principalement C, Java et Visual Basic).
Il faut toutefois signaler une mini-révolution dans la façon de penser de penser les langages, due à Microsoft. Devant la diversité des systèmes d'exploitation et de façon à réutiliser le même programme sur tous les ordinateurs et sur tous les systèmes dans tous les modes (local, distant) Bill Gates propose de fonctionner en mode .net ou encore # : tout programme doit être traduit en un code intermédiaire exécutable par un programme spécial, sur l'ordinateur de l'utilisateur ou sur celui du serveur Web. Les logiciels classiques, comme Word et Excel pourraient même être utilisés à partir de serveurs de logiciels, plutôt que d'être installés sur l'ordinateur...
Voici ce que nous en pensions en octobre 2003 : "il est trop tôt pour juger de la validité d'une telle approche. C'est sans doute une bonne idée pour homogénéiser les développements, faciliter la portabilité sur tous les types d'ordinateur. Mais par contre on peut dire que cela rend le développement trop dépendant du Web et sans doute trop lié au monopole Microsoft, ce qui financièrement..."
La multiplicité des langages n'engendre pas forcément la mélancolie. Ainsi le concours du programme C le plus "obsfuscated" en anglais, ce qu'on peut sans doute traduire en Français par "obstrus", "abscons" (si, si, ces mots existent !) décerne des prix à des programmes dont la beauté transparait au-delà de l'illisibilité. Pour repousser les limites, pour mieux comprendre ce qu'est un langage de programmation, certains auteurs vont jusqu'à inventer des langages, je cite "exotiques, ésotériques, délirants, hilarants et même stupides". Il faut toutefois insister sur le fait que ces langages sont implémentés, utilisables, voire opérationnels. Mes langages préférés dans cette catégorie sont le langage informatique des ourangs-outans, le langage informatique des vaches et le langage informatique du chef cuisinier.
Cela vaut le détour !
Les années 2010 : Matlab, Scilab, R, Ruby, Python et librairies Javascript
Les langages de calcul scientifique (par opposition au langages de calcul formel comme Mathematica et Maple) que sont Matlab (payant) et Scilab (libre) acquièrent dans cette décennie leur maturité : les bibliothèques de programmes additionnels nommées tools-box leur permettent de s'insérer dans les cursus d'ingénieurs et de programmer "tous azimuths" en science, notamment en physique, chimie et biologie.
Parallèlement, le logiciel R s'impose comme LE grand logiciel de statistiques : complet, avec de jolis graphiques, il est le seul à s'enrichir rapidement et quotidiennement (!) de nombreuses bibliothèques de programmes additionnels (nommées packages) en particulier pour la bioinformatique via le projet Bioconductor.
Les pages Web prenant de plus en plus d'ampleur, les langages de script Ruby et Python deviennent, via leurs "frameworks de développement" phares respectifs, nommés Rails et Django, des langages très adaptés aux méthodes AGILES et RAD même si le langage PHP reste un grand classique pour le développement de sites Web. L'importance de "grands" sites Web comme Facebook, Flicker... qui ne peuvent pas fonctionner sans Javascript font de Javascript et ses librairies comme Jquery, Prototype... le langage incontournable du développement Web.
L'apparition de bibliothèques et d'environnnements scientifiques comme NumPy, SciPy, Pandas, Anaconda pour Python, de packages et de données bioinformatiques pour R et de serveurs avec des I/O non bloquantes via Node.js font de Python, R et Javascript les grands "gagnants" de ces annnées 2010.
C'est bien sûr un titre "commercial" car il est impossible de prévoir ce que seront les prochaines années... La technologie en général et donc l'informatique et les langages de programmation en particulier évoluent suffisamment vite pour qu'il y ait encore des surprises.
Toutefois, on peut remarquer que :
- les "petits" langages comme Rexx, Awk... font régulièrement des adeptes,
- C++ et Java sont "installés" comme langages de grosses applications,
- Perl, Php, Mysql sont très utilisés pour la programmation Web,
- tous les langages ne fonctionnent pas forcément sur tous les ordinateurs,
- le diction "à objectif précis, langage imposé" reste encore valide,
- le "commun des mortels" ne programme pas, il [elle] se contente d'utiliser les programmes...
Comme l'histoire des langages de programmation est liée à celle de l'informatique, de la technologie et même à celle de la téléphonie, on verra peut-être des changements comme vous en avez toujours rêvé. Par exemple au niveau de l'interface, il sera possible de commander des ordinateurs "à la voix" en utilisant le "langage naturel" c'est à dire en parlant presque comme vous et moi. Peut-être que comme dans Zardoz on n'aura plus besoin d'écran car l'ordinateur, inclus dans une simple bague sera capable de projeter sur un mur ou sous forme d'hologramme en 3D ce que d'habitude il affichait sur l'écran.
N'oublions pas que l'invention de la souris date de 1963 mais que Microsoft, société créée en 1975 ne l'incorpore vraiment systématiquement qu'en 1989 avec Windows 3. Rappelons-nous qu'Unix développé en 1969 n'utilise pas tout de suite les interfaces graphiques (GUI) et les environnements de développement (IDE).
Et surtout, n'oublions pas qu'aujourd'hui des gens meurent encore de faim et de froid, que d'autres ne savent pas lire et n'ont qu'un jour de repos par semaine alors que d'autres ne s'occupent que de trouver où mettre un point virgule dans une ligne de code. L'avenir des langages de programmation sera lié à l'avenir de notre planète. Avec plus d'humanité nous finirons bien par faire des ordinateurs plus "humanisés" et programmer deviendra "un jeu d'enfants" quelque soit le langage...
Cet exposé ne serait pas complet sans quelques exemples de textes de programmes dans ces divers langages ni sans quelques démonstrations interactives sur le Web en linguistique (statistiques lexicales), biologie végétale (taxonomie), bioinformatique appliquées aux protéines, statistique médicale (tests diagnostiques).
Suite de l'exposé : exemple de code-source de programmes
Retour à la page principale de (gH)