Niklaus Wirth n’a pas cherché à concevoir un langage capable de tout faire. De Pascal à Oberon, il pose la question inverse : quel est le plus petit ensemble de concepts permettant de programmer clairement, de vérifier les structures essentielles et de construire un système complet ?
Cette recherche produit plusieurs langages, mais aussi des compilateurs, des systèmes d’exploitation et des ordinateurs expérimentaux. Wirth veut éprouver ses idées dans leur ensemble. Un langage ne peut pas être jugé uniquement par sa syntaxe : sa valeur apparaît dans les programmes qu’il permet d’organiser, dans la qualité de ses outils et dans la facilité avec laquelle un lecteur peut comprendre le résultat.
Son héritage relie ainsi enseignement, programmation structurée, modularité et conception matérielle. La simplicité y joue le rôle d’une méthode d’ingénierie, pas d’une réduction destinée aux seuls débutants.
Pourquoi la structure des programmes devient un problème
Niklaus Emil Wirth naît en 1934 à Winterthour, en Suisse. Il étudie l’électronique à l’École polytechnique fédérale de Zurich, obtient un master à l’université Laval au Canada puis un doctorat à l’université de Californie à Berkeley en 1963.
Il enseigne ensuite à Stanford, où il travaille dans un environnement marqué par les débats sur ALGOL. Ce langage a introduit une notation structurée et la possibilité d’organiser les instructions en blocs. Il fournit une base plus claire que les branchements libres qui rendent de nombreux programmes difficiles à suivre.
La conception d’un successeur, ALGOL 68, donne cependant naissance à un langage très ambitieux. Wirth préfère une évolution plus limitée et participe à ALGOL W, qui ajoute notamment des types de données et des références tout en conservant une structure maîtrisable.
Cette expérience établit un principe qui guidera ses travaux : chaque fonctionnalité doit renforcer un modèle cohérent. Ajouter des possibilités sans contrôler leurs interactions déplace la difficulté du concepteur vers tous les utilisateurs du langage.
Pascal relie algorithmes et structures de données
De retour en Suisse, Wirth rejoint l’ETH Zurich en 1968. Il développe Pascal, dont la première définition paraît en 1970. Le langage porte le nom du mathématicien Blaise Pascal.
Pascal est conçu pour enseigner la programmation comme une discipline structurée. Les blocs, procédures et fonctions rendent visible l’organisation du calcul. Le système de types distingue les catégories de valeurs et permet de définir des tableaux, enregistrements, ensembles et pointeurs.
Cette richesse reste contenue dans un langage assez petit pour qu’un étudiant puisse en comprendre les principes et qu’un compilateur soit réalisable dans un cadre universitaire. Wirth utilise une machine abstraite intermédiaire, la P-machine, afin de faciliter l’adaptation du compilateur à plusieurs ordinateurs.
Le langage matérialise aussi le lien formulé dans le titre de son livre le plus connu, Algorithms + Data Structures = Programs. Un algorithme ne vit pas indépendamment des données qu’il manipule. Choisir une liste, un tableau ou un arbre change les opérations possibles, leur coût et la clarté du programme.
L’histoire de Pascal suit la diffusion du langage dans l’enseignement et sur les micro-ordinateurs. La contribution propre de Wirth réside dans le projet pédagogique : apprendre à construire un programme en rendant ses structures explicites.
Les qualités de Pascal révèlent aussi ses limites
Le succès de Pascal dépasse rapidement l’enseignement. De nombreux compilateurs et dialectes apparaissent. Cette adoption expose des besoins que le langage initial ne couvre pas toujours : compilation séparée, bibliothèques, accès au système et organisation de programmes développés par plusieurs personnes.
Certaines implémentations ajoutent leurs propres extensions. UCSD Pascal popularise l’exécution sur P-code ; Turbo Pascal, développé plus tard sous la direction d’Anders Hejlsberg, combine un compilateur rapide et un environnement intégré. Ces systèmes contribuent au succès du nom Pascal, mais ne sont pas des créations de Wirth.
La distinction est importante. Un langage évolue à la fois par son concepteur, ses implémentations et ses communautés. Wirth observe ces usages, mais choisit de traiter la modularité dans de nouveaux langages plutôt que d’ajouter indéfiniment des extensions à Pascal.
Modula rend les frontières entre composants vérifiables
Wirth développe Modula au milieu des années 1970, puis Modula-2 à partir de 1977. Le nom indique l’idée centrale : un grand programme doit être séparé en modules disposant d’interfaces explicites.
Un module peut publier certains types et certaines opérations tout en cachant son implémentation. Le compilateur vérifie les échanges à travers cette frontière. Une équipe peut modifier l’intérieur d’un composant sans forcer les autres à connaître ses détails, tant que l’interface reste stable.
Modula-2 ajoute aussi des mécanismes adaptés aux systèmes et à la concurrence. Wirth ne traite donc plus seulement l’apprentissage d’algorithmes isolés. Il cherche à construire des logiciels complets dont les parties peuvent être comprises et testées séparément.
Le langage accompagne le projet Lilith, ordinateur personnel développé à l’ETH Zurich. Concevoir ensemble machine, compilateur, système et applications permet à l’équipe d’observer les compromis que dissimule un langage étudié seul.
Cette approche distingue Wirth des concepteurs qui ajoutent une couche au-dessus d’une plateforme existante. Il veut vérifier qu’une petite collection de principes peut traverser toute la pile informatique.
Oberon pousse la réduction plus loin
Lors d’un séjour au Xerox PARC, Wirth découvre les stations de travail personnelles, les interfaces graphiques et les environnements intégrés. Avec Jürg Gutknecht, il lance ensuite à l’ETH le projet Oberon, à la fois langage et système d’exploitation.
Oberon dérive de Modula-2 mais retire plusieurs mécanismes. Cette soustraction est volontaire. Wirth et Gutknecht cherchent un noyau assez réduit pour être expliqué, compilé et utilisé dans la construction de tout le système, sans renoncer aux modules ni aux types extensibles.
Le projet montre que la simplicité doit être testée par la réalisation. Un langage minimal qui exige une infrastructure démesurée ne résout rien. Oberon associe donc compilateur, gestion de l’affichage, texte, fichiers et outils dans un environnement cohérent.
Oberon ne connaît pas la diffusion commerciale de Pascal. Son influence se mesure autrement : il sert d’étude complète sur la conception de systèmes, inspire des travaux pédagogiques et démontre qu’un environnement interactif peut être construit avec une quantité de code relativement limitée.
Ce que signifie réellement la simplicité chez Wirth
La formule souvent associée à Wirth, « le logiciel ralentit plus vite que le matériel n’accélère », résume une inquiétude : l’augmentation des ressources peut encourager des systèmes plus volumineux sans amélioration proportionnelle pour leurs utilisateurs.
Sa réponse n’est pas de refuser toute abstraction. Pascal, Modula et Oberon en introduisent au contraire de puissantes : types définis par le programmeur, modules, interfaces et données structurées. Wirth cherche à obtenir cette puissance avec des règles peu nombreuses dont les conséquences restent prévisibles.
Cette position comporte des compromis. Un langage réduit peut obliger à écrire davantage de code spécialisé ou offrir moins de bibliothèques. La compatibilité avec les programmes existants limite aussi la possibilité de retirer des mécanismes. Le succès industriel du C++ de Bjarne Stroustrup repose en partie sur un choix opposé : faire évoluer un langage largement utilisé tout en conservant une forte compatibilité.
Comparer ces trajectoires éclaire la conception des langages. La simplicité, la compatibilité, la performance et l’expressivité ne peuvent pas toujours être maximisées ensemble. Chaque langage décide où placer le coût.
Un héritage présent dans l’enseignement et l’ingénierie
Wirth reçoit le prix Turing en 1984 pour ses langages et leur influence sur l’enseignement et la pratique de la programmation. Il prend sa retraite de l’ETH en 1999, mais poursuit ses expérimentations, notamment autour d’Oberon et de la conception matérielle. Il meurt en 2024.
Pascal a formé plusieurs générations de programmeurs. Modula-2 a rendu familière la séparation entre interface et implémentation. Oberon a montré comment un langage, un système et ses outils peuvent être conçus comme un tout.
Leur influence ne passe pas toujours par une filiation syntaxique directe. Elle apparaît chaque fois qu’un concepteur refuse une fonctionnalité parce qu’elle affaiblirait le modèle général, qu’un enseignant relie un algorithme à sa structure de données ou qu’une équipe protège un composant derrière une interface vérifiable.
Wirth laisse ainsi moins une formule universelle qu’une discipline : construire, mesurer, retirer ce qui n’est pas nécessaire, puis vérifier que l’ensemble reste compréhensible.
Chronologie
- 1934 : naissance de Niklaus Wirth à Winterthour.
- 1959 : diplôme d’ingénieur en électronique à l’ETH Zurich.
- 1960 : master à l’université Laval.
- 1963 : doctorat à Berkeley puis début de son enseignement à Stanford.
- 1966 : développement d’ALGOL W avec les travaux du groupe ALGOL.
- 1968 : nomination comme professeur à l’ETH Zurich.
- 1970 : publication de la première définition de Pascal.
- 1975 : première version de Modula.
- 1977–1978 : conception de Modula-2 et début du projet Lilith.
- 1984 : prix Turing pour ses contributions aux langages de programmation.
- 1986–1988 : conception du langage et du système Oberon avec Jürg Gutknecht.
- 1999 : retraite de l’ETH Zurich.
- 2013 : publication d’une édition modernisée de Project Oberon.
- 2024 : décès à l’âge de 89 ans.
- Aujourd’hui : ses langages restent des références pour enseigner la structure, la modularité et la conception de systèmes cohérents.
Questions fréquentes
Niklaus Wirth a-t-il créé Pascal seul ?
Il est le concepteur principal de Pascal et en définit les objectifs. Le langage, ses compilateurs et sa diffusion résultent toutefois du travail de collaborateurs à l’ETH et de nombreuses équipes qui ont développé leurs propres implémentations.
Pourquoi Pascal a-t-il été conçu pour l’enseignement ?
Wirth voulait un langage assez petit pour rendre ses règles compréhensibles, mais assez riche pour enseigner procédures, types et structures de données. L’objectif était d’apprendre à organiser un programme, pas seulement à mémoriser une syntaxe.
Wirth a-t-il créé Turbo Pascal ?
Non. Turbo Pascal est développé par Borland sous la direction d’Anders Hejlsberg à partir d’un compilateur antérieur. Il prolonge l’écosystème Pascal, mais ne constitue pas une réalisation de Wirth.
Quelle différence existe entre Pascal et Modula-2 ?
Pascal privilégie l’apprentissage de la programmation structurée. Modula-2 ajoute des mécanismes destinés aux grands logiciels et aux systèmes, notamment des modules avec interfaces explicites et compilation séparée.
Oberon est-il seulement un langage ?
Non. Oberon désigne à la fois un langage et un système d’exploitation conçu avec Jürg Gutknecht. Le projet sert à vérifier qu’un petit ensemble de concepts peut soutenir un environnement informatique complet.
Pourquoi les idées de Wirth restent-elles actuelles ?
Les logiciels continuent de subir la complexité accumulée. Types explicites, modules, interfaces étroites et réduction des mécanismes inutiles restent des moyens essentiels pour conserver des systèmes compréhensibles.