Brian Kernighan occupe une place singulière dans l’histoire des
langages. Il n’a créé ni Unix ni C :
ces contributions reviennent principalement à Ken
Thompson et Dennis
Ritchie. Son influence vient d’un autre
travail, tout aussi durable. Il a construit des outils autour d’Unix,
co-conçu des langages spécialisés et surtout rendu les idées du
laboratoire compréhensibles, transmissibles et utilisables.
Son nom reste associé à AWK, conçu avec Alfred Aho et Peter
Weinberger, ainsi qu’à The C Programming Language, écrit avec Ritchie.
Mais réduire Kernighan à « l’auteur du livre sur C » masquerait une
œuvre cohérente : Ratfor, eqn, pic, AMPL, les environnements Unix,
la pratique des tests et plusieurs décennies d’enseignement montrent
comment de petits langages peuvent simplifier des tâches précises.
Kernighan a ainsi contribué à une culture de programmation où un bon
outil fait peu de choses, les fait clairement et se combine avec
d’autres.
De Toronto aux Bell Labs
Brian Wilson Kernighan naît en 1942 à Toronto. Il étudie la physique de
l’ingénieur à l’université de Toronto, puis rejoint Princeton pour un
doctorat en génie électrique. Sa thèse, achevée en 1969, porte sur le
partitionnement de graphes, un problème qui consiste à diviser un réseau
en groupes tout en limitant les connexions entre eux.
Il entre la même année aux Bell Laboratories, dans le Computing Science
Research Center. Le laboratoire réunit alors des chercheurs capables de
passer de la théorie des langages à l’implantation d’un système, puis à
la rédaction de sa documentation. Les bureaux voisins, les échanges
informels et l’accès à des machines partagées favorisent des
collaborations rapides.
Unix commence à prendre forme autour de Ken Thompson et Dennis Ritchie.
Kernighan participe à cet environnement sans revendiquer le noyau du
système ni la création de C. Il teste des outils, écrit des programmes,
améliore la documentation et aide à faire d’un prototype local un
environnement dans lequel d’autres peuvent travailler.
Il est également généralement crédité du nom « Unix », jeu de mots avec
Multics, le système plus vaste dont plusieurs chercheurs des Bell Labs
avaient tiré des leçons. Cette anecdote résume une partie de son rôle :
trouver une formulation compacte pour une idée technique et la faire
circuler.
Unix comme atelier de petits outils
La force d’Unix ne réside pas uniquement dans son noyau. Elle vient
aussi d’un modèle d’usage : les programmes lisent et écrivent des flux
relativement simples, puis le shell les relie par des pipelines. Une
commande sélectionne des lignes, une autre les trie, une troisième
produit un rapport.
Kernighan contribue à plusieurs outils de cet atelier, notamment pour la
préparation de documents. Avec Lorinda Cherry, il développe eqn, qui
permet de décrire des formules mathématiques dans un texte. Il travaille
aussi sur pic, destiné aux diagrammes, et sur des systèmes de
composition liés à troff.
Ces programmes suivent une intuition importante : une notation
spécialisée peut être plus expressive qu’une succession d’options
graphiques ou qu’un programme généraliste. L’utilisateur décrit la
structure souhaitée — une fraction, une flèche, l’alignement de deux
objets — et l’outil calcule la présentation.
Le fichier texte reste lisible, modifiable, archivable et compatible
avec d’autres commandes. Cette approche annonce des pratiques désormais
courantes : documentation écrite comme du code, génération reproductible
et outils dédiés intégrés dans une chaîne automatisée.
Ratfor : améliorer l’écriture sans remplacer l’infrastructure
Dans les années 1970, FORTRAN est
largement disponible mais ses anciennes versions imposent une
programmation peu structurée. Plutôt que d’attendre le déploiement
universel d’un nouveau compilateur, Kernighan conçoit Ratfor, pour
Rational Fortran.
Ratfor offre une syntaxe plus structurée avec des blocs, des boucles et
des conditions familières, puis traduit le programme vers du Fortran
accepté par les compilateurs existants. Le langage ne cherche donc pas à
remplacer toute la chaîne de compilation. Il ajoute une couche qui
améliore l’expression tout en réutilisant l’infrastructure déjà
installée.
Cette stratégie apparaît dans Software Tools, écrit avec P. J.
Plauger. Le livre ne présente pas seulement des programmes finis. Il
montre comment bâtir et porter des outils de traitement de texte sur
différents systèmes en s’appuyant sur une notation intermédiaire.
Ratfor illustre un principe que Kernighan appliquera souvent : choisir
le point d’intervention le plus économique. Un préprocesseur modeste
peut parfois diffuser une meilleure pratique plus vite qu’un système
entièrement nouveau.
En 1977, Alfred Aho, Peter Weinberger et Brian Kernighan conçoivent
AWK, dont le nom reprend leurs initiales. Chacun apporte une
expérience différente. Aho travaille sur les langages formels et les
expressions régulières ; Weinberger s’intéresse au traitement de données
et réalise rapidement la première implantation ; Kernighan cherche un
moyen fluide de manipuler ensemble texte et nombres.
Le modèle du langage tient dans une forme compacte :
condition { action }
AWK lit les enregistrements d’un flux, découpe automatiquement chaque
ligne en champs, teste les motifs puis exécute les actions associées.
Pour additionner la deuxième colonne de toutes les lignes, quelques mots
suffisent :
{ total += $2 }
END { print total }
Cette brièveté ne vient pas d’une syntaxe mystérieuse, mais de choix
adaptés au domaine. Le parcours du fichier est implicite, les champs
sont déjà accessibles et nombres comme chaînes sont traités
naturellement. Le programme exprime ce qui varie ; le langage prend en
charge le cadre répétitif.
AWK se place entre une commande de filtrage et un langage général. Il
permet d’extraire des colonnes, agréger des mesures, convertir des
formats, produire des rapports ou valider des journaux sans écrire puis
compiler un programme complet en C.
Le succès du langage rappelle aussi la nature collective des Bell Labs.
Aucun des trois auteurs ne résume à lui seul AWK. Son équilibre résulte
de la rencontre entre théorie des motifs, besoins de reporting,
implantation pragmatique et expérience des pipelines Unix.
K&R : le livre qui a stabilisé une manière d’écrire C
Dennis Ritchie crée C au début des années 1970 pour développer Unix et
ses outils. Le langage évolue par l’usage avant de disposer d’une norme
officielle. Pour le diffuser au-delà des Bell Labs, il faut une
explication précise, des exemples réalistes et une description
suffisamment stable pour guider les programmeurs comme les auteurs de
compilateurs.
Kernighan écrit avec Ritchie The C Programming Language, publié en
1978. Le livre, couramment appelé K&R, associe la connaissance
intime du créateur du langage à l’expérience pédagogique de Kernighan.
Il expose les constructions de C par de courts programmes plutôt que par
une accumulation de définitions isolées.
La première édition devient de fait une référence du C antérieur à la
normalisation. La seconde, publiée en 1988, accompagne le C normalisé
par l’ANSI. Le livre contribue aussi à diffuser un style : indentation
régulière, fonctions limitées, noms choisis avec soin, tests rapides et
exemples qui peuvent être exécutés.
Il faut cependant distinguer diffusion et invention. Dire que Kernighan
a « créé C » confondrait le langage avec son ouvrage le plus célèbre.
Son apport essentiel est d’avoir aidé à formuler C pour ceux qui ne
travaillaient pas dans le bureau voisin de Ritchie.
Expliquer la philosophie Unix par la pratique
Avec Rob Pike, Kernighan publie en 1984 The Unix Programming
Environment. L’ouvrage ne se limite pas à une liste de commandes. Il
montre comment penser avec le shell, les filtres, les fichiers texte et
les programmes composables.
Une tâche est progressivement décomposée. On commence par une commande
simple, on observe ses limites, puis on assemble des outils ou on écrit
un petit langage adapté. Cette pédagogie transmet une méthode de
résolution plutôt qu’un catalogue à mémoriser.
Kernighan a souvent condensé cette culture en principes devenus associés
à la « philosophie Unix » : écrire des programmes qui font une chose
correctement, coopèrent avec d’autres et utilisent des formats que l’on
peut inspecter. Ces formules ne décrivent pas une règle absolue suivie
par chaque composant Unix. Elles rendent visible une direction
architecturale qui a favorisé la réutilisation.
Les pipelines ont eux aussi des limites. Les formats textuels perdent
parfois des informations de structure, les erreurs circulent mal entre
commandes et une longue chaîne peut devenir difficile à maintenir. La
leçon durable n’est pas que tout doit être du texte, mais qu’une
interface simple et une composition explicite réduisent souvent le coût
d’intégration.
Les petits langages au service de problèmes précis
Kernighan poursuit cette approche avec AMPL, conçu avec Robert
Fourer et David Gay pour la modélisation mathématique. L’utilisateur
décrit un problème d’optimisation — variables, contraintes et objectif
— sans écrire lui-même l’algorithme numérique du solveur.
AMPL sépare le modèle du moteur qui le résout. Le même problème peut
être transmis à différents solveurs et les données peuvent changer sans
réécrire sa structure mathématique. Comme eqn ou AWK, le langage
capture les concepts du domaine afin d’éviter que l’utilisateur ne les
traduise manuellement en opérations de bas niveau.
Ces projets popularisent l’idée de petit langage : une notation
limitée, parfois intégrée à une chaîne plus large, qui offre une grande
expressivité dans un périmètre précis. L’objectif n’est pas de créer un
langage universel de plus, mais de rapprocher le code du problème
décrit.
Cette intuition se retrouve aujourd’hui dans les langages de requête,
les fichiers de configuration, les moteurs de règles, les outils de
construction et les notations de visualisation. Elle exige toutefois de
la discipline : un petit langage mal conçu peut accumuler des exceptions
jusqu’à devenir plus complexe qu’une API ordinaire.
De la pratique de la programmation à l’enseignement
Les livres de Kernighan prolongent sa recherche sur les outils. The
Elements of Programming Style, avec P. J. Plauger, étudie des
programmes concrets pour montrer comment les rendre plus clairs et
fiables. The Practice of Programming, avec Rob Pike, aborde
conception, débogage, tests, performance, portabilité et interfaces.
Leur principe commun est que le style n’est pas décoratif. Un programme
lisible expose mieux ses hypothèses ; une interface réduite limite les
dépendances ; des tests systématiques rendent les modifications moins
risquées. La qualité apparaît dans le choix des exemples autant que dans
les recommandations explicites.
Kernighan maintient par ailleurs une version d’AWK pendant des
décennies. Cette expérience nourrit son enseignement du test : un
logiciel largement porté rencontre des entrées inattendues, des
différences de plateformes et des usages que ses auteurs n’avaient pas
prévus. Tester sert autant à clarifier le comportement attendu qu’à
détecter des régressions.
En 2000, après trente ans aux Bell Labs, il rejoint le département
d’informatique de Princeton. Il y enseigne aux étudiants en
informatique, mais aussi à des publics non spécialistes qui doivent
comprendre les réseaux, la confidentialité, la sécurité et les
conséquences sociales des systèmes numériques.
Une histoire de collaborations correctement attribuées
L’œuvre de Kernighan est indissociable de ses coauteurs. Ritchie conçoit
C ; Thompson et Ritchie sont les principaux créateurs d’Unix ; Aho,
Weinberger et Kernighan conçoivent ensemble AWK ; Fourer et Gay
participent à AMPL ; Cherry, Plauger et Pike apportent chacun des
contributions substantielles aux outils et aux livres partagés.
Cette liste n’affaiblit pas son importance. Elle précise sa contribution
: repérer des idées compatibles, construire le langage ou l’exemple qui
les relie et produire une explication assez claire pour que d’autres
puissent les reprendre.
Les Bell Labs offraient un contexte exceptionnel pour ce travail
collectif. Les outils étaient utilisés localement par des collègues
exigeants, corrigés au contact de problèmes réels puis documentés. Leur
diffusion vient moins d’un plan commercial initial que d’une boucle
courte entre conception, usage et transmission.
Pourquoi Brian Kernighan compte encore
Le développement contemporain dispose d’écosystèmes beaucoup plus vastes
que l’Unix des années 1970, mais il rencontre les mêmes tensions.
Faut-il ajouter une dépendance ou écrire un petit outil ? Concevoir un
format général ou un langage de domaine ? Exposer toutes les
possibilités ou préserver une interface réduite ?
Les travaux de Kernighan ne donnent pas une réponse automatique. Ils
fournissent des critères : exprimer clairement le problème, éviter le
mécanisme inutile, rendre les données inspectables, composer des unités
autonomes et expliquer le comportement par des exemples que le lecteur
peut vérifier.
Son héritage est enfin éditorial. Une technologie ne se diffuse pas
uniquement parce qu’elle est techniquement supérieure. Elle doit
posséder des mots, des exemples et une progression qui permettent à
quelqu’un d’extérieur à son groupe d’origine de se l’approprier. K&R a
joué ce rôle pour C ; ses autres ouvrages l’ont fait pour Unix et la
programmation elle-même.
Chronologie
- 1942 : naissance de Brian Wilson Kernighan à Toronto, au Canada.
- 1964 : diplôme en physique de l’ingénieur à l’université de
Toronto.
- 1969 : doctorat en génie électrique à Princeton, puis arrivée
aux Bell Laboratories.
- Début des années 1970 : contributions aux outils de traitement
de texte et à l’environnement Unix.
- 1975 : publication de Ratfor, préprocesseur destiné à structurer
l’écriture de programmes Fortran.
- 1976 : publication de Software Tools avec P. J. Plauger.
- 1977 : création d’AWK avec Alfred Aho et Peter Weinberger.
- 1978 : première édition de The C Programming Language avec
Dennis Ritchie.
- 1984 : publication de The Unix Programming Environment avec
Rob Pike.
- 1988 : seconde édition de K&R, mise à jour pour le C ANSI.
- Années 1980–1990 : développement et diffusion d’AMPL avec
Robert Fourer et David Gay.
- 2000 : départ des Bell Labs et arrivée comme professeur à
Princeton.
- 2019 : publication de Unix: A History and a Memoir.
- 2023 : seconde édition de The AWK Programming Language avec
Aho et Weinberger.
Questions fréquentes
Brian Kernighan a-t-il créé le langage C ?
Non. Dennis Ritchie a conçu C aux Bell Labs. Kernighan a contribué à son
environnement et a surtout coécrit avec Ritchie The C Programming
Language, ouvrage décisif pour expliquer et diffuser le langage.
Qui a créé AWK ?
AWK est une création collective d’Alfred Aho, Peter Weinberger et Brian
Kernighan ; son nom est formé de leurs initiales. Aho apporte notamment
son expertise des expressions régulières, Weinberger réalise la première
implantation et Kernighan contribue à la conception d’un langage fluide
pour le texte et les nombres.
À quoi sert encore AWK aujourd’hui ?
Il reste adapté aux transformations rapides de données structurées en
lignes et colonnes : journaux, exports, rapports ou sorties de
commandes. Pour des formats imbriqués, de très grands programmes ou des
besoins de bibliothèques complexes, un autre langage peut être plus
facile à maintenir.
Qu’appelle-t-on un petit langage ?
C’est une notation conçue pour un domaine limité, comme les motifs et
actions d’AWK, les équations d’eqn ou les modèles d’optimisation
d’AMPL. Sa spécialisation permet d’exprimer directement les concepts
utiles avec moins de mécanismes généraux.
Pourquoi les livres de Kernighan ont-ils eu autant d’influence ?
Ils associent des explications compactes à des programmes réalistes et
progressifs. Plutôt que d’énumérer uniquement des fonctionnalités, ils
montrent une méthode de conception, de test et de composition que le
lecteur peut appliquer à ses propres outils.