Brian Kernighan ocupa un lugar singular en la historia de los lenguajes.
No creó Unix ni C; esas aportaciones
corresponden principalmente a Ken Thompson
y Dennis Ritchie. Su influencia procede
de un trabajo igual de duradero: construir herramientas alrededor de
Unix, codiseñar lenguajes especializados y hacer comprensibles y
reutilizables las ideas del laboratorio.
Su nombre permanece asociado a AWK, diseñado con Alfred Aho y Peter
Weinberger, y a The C Programming Language, escrito con Ritchie.
Ratfor, eqn, pic, AMPL, las herramientas Unix, las pruebas y décadas
de docencia revelan una idea coherente: un lenguaje pequeño puede
simplificar una tarea precisa.
Kernighan contribuyó a una cultura donde una buena herramienta hace
pocas cosas con claridad y se combina bien con las demás.
De Toronto a Bell Labs
Brian Wilson Kernighan nació en Toronto en 1942. Estudió física de
ingeniería en la Universidad de Toronto y terminó en Princeton un
doctorado en ingeniería eléctrica sobre particionamiento de grafos en
1969. Ese año se incorporó al Computing Science Research Center de Bell
Labs.
El laboratorio reunía investigadores capaces de pasar de la teoría de
lenguajes a la implementación y la documentación. Unix tomaba forma
alrededor de Thompson y Ritchie. Kernighan probó herramientas, escribió
programas, mejoró documentación y ayudó a convertir un prototipo local
en un entorno que otros podían utilizar.
También se le atribuye generalmente el nombre Unix, un juego de palabras
con Multics. La anécdota refleja su capacidad para expresar una idea
técnica de forma compacta y memorable.
Unix como taller de pequeñas herramientas
La fuerza de Unix no residía solo en el núcleo, sino también en
programas que leían y escribían flujos sencillos y podían conectarse
mediante pipelines. Un comando seleccionaba líneas, otro las ordenaba y
un tercero generaba un informe.
Con Lorinda Cherry, Kernighan desarrolló eqn para describir fórmulas
matemáticas. También trabajó en pic, destinado a diagramas, y en
sistemas de composición relacionados con troff. La notación
especializada describía la estructura y la herramienta calculaba la
presentación.
Los archivos de texto seguían siendo legibles, modificables, archivables
y compatibles con otros comandos. Este enfoque anticipó la documentación
como código, la generación reproducible y las herramientas
especializadas dentro de cadenas automatizadas.
Ratfor: mejorar la escritura sin reemplazar la infraestructura
Las versiones antiguas de FORTRAN
dificultaban la programación estructurada. Kernighan creó Ratfor
—Rational Fortran— con bloques, bucles y condiciones que se
traducían al Fortran aceptado por los compiladores existentes.
Ratfor mejoraba la expresión reutilizando la infraestructura instalada.
Software Tools, escrito con P. J. Plauger, lo utilizó para enseñar a
construir herramientas de texto portables, no solo para presentar
programas terminados.
El proyecto ilustra un principio recurrente: intervenir en el punto más
económico. Un preprocesador modesto puede difundir una práctica mejor
con más rapidez que un sistema completamente nuevo.
AWK: convertir patrones en acciones
En 1977, Alfred Aho, Peter Weinberger y Brian Kernighan diseñaron
AWK, cuyo nombre reúne sus iniciales. Aho aportó su experiencia en
expresiones regulares, Weinberger realizó la primera implementación y
Kernighan buscó una forma fluida de procesar texto y números juntos.
El lenguaje asocia patrones con acciones. Lee registros, divide líneas
en campos, comprueba condiciones y ejecuta las operaciones
correspondientes. El recorrido y los campos son implícitos, de modo que
el programa expresa lo que varía.
AWK se sitúa entre un filtro y un lenguaje general. Extrae columnas,
agrega medidas, convierte formatos, produce informes y valida registros
sin exigir un programa compilado en C. Su equilibrio nace de combinar
teoría, necesidades de informes, implementación pragmática y experiencia
con pipelines.
Dennis Ritchie creó C para desarrollar Unix y sus herramientas. Antes de
la normalización, su difusión necesitaba explicaciones precisas,
ejemplos realistas y una descripción estable para programadores y
autores de compiladores.
Kernighan y Ritchie publicaron The C Programming Language en 1978.
K&R unió el conocimiento del creador con la experiencia pedagógica
de Kernighan y presentó C mediante programas breves y ejecutables.
La primera edición se convirtió en referencia de facto; la segunda, de
1988, acompañó al C ANSI. También difundió indentación regular,
funciones limitadas, nombres cuidados, pruebas rápidas y ejemplos
verificables. Kernighan no inventó C: ayudó a explicarlo fuera de Bell
Labs.
Con Rob Pike, Kernighan publicó The Unix Programming Environment en
1984. Enseñaba a pensar con el shell, filtros, archivos de texto y
programas componibles, no solo a memorizar comandos.
Los problemas se descomponían progresivamente: comenzar con un comando,
observar sus límites y después combinar herramientas o diseñar un
pequeño lenguaje. Kernighan condensó esta cultura en principios
asociados a Unix: hacer una cosa bien, cooperar y usar formatos
inspeccionables.
Los pipelines también tienen límites. El texto puede perder estructura,
los errores circulan mal y las cadenas largas son difíciles de mantener.
La lección no es que todo deba ser texto, sino que las interfaces
sencillas y la composición explícita suelen reducir el coste de
integración.
Pequeños lenguajes para problemas precisos
Kernighan continuó este enfoque con AMPL, diseñado junto a Robert
Fourer y David Gay para el modelado matemático. El usuario describe
variables, restricciones y objetivos sin implementar el algoritmo
numérico.
AMPL separa el modelo del motor que lo resuelve. Como eqn y AWK,
captura conceptos del dominio para evitar traducirlos manualmente a
operaciones de bajo nivel.
Esta es la idea de pequeño lenguaje: una notación limitada y muy
expresiva en un ámbito definido. Lenguajes de consulta, configuraciones,
motores de reglas y herramientas de construcción siguen la misma lógica,
aunque un mal diseño puede acumular demasiadas excepciones.
De la práctica de programación a la enseñanza
Los libros de Kernighan prolongan su trabajo sobre herramientas. The
Elements of Programming Style, con P. J. Plauger, estudia programas
reales; The Practice of Programming, con Rob Pike, aborda diseño,
depuración, pruebas, rendimiento, portabilidad e interfaces.
Su principio común es que el estilo no es decorativo. El código legible
muestra sus hipótesis, las interfaces reducidas limitan dependencias y
las pruebas sistemáticas hacen menos arriesgados los cambios.
Mantener AWK durante décadas reforzó esta visión: el software portable
encuentra entradas y plataformas inesperadas. Las pruebas aclaran el
comportamiento esperado y detectan regresiones. En 2000, Kernighan dejó
Bell Labs por Princeton, donde enseña a especialistas y no
especialistas.
Una historia de colaboraciones correctamente atribuidas
La obra de Kernighan es inseparable de sus colaboradores. Ritchie diseñó
C; Thompson y Ritchie crearon Unix; Aho, Weinberger y Kernighan
diseñaron AWK; Fourer y Gay participaron en AMPL; Cherry, Plauger y Pike
aportaron contribuciones sustanciales.
Esta precisión refuerza su importancia. Su habilidad distintiva fue
reconocer ideas compatibles, construir el lenguaje o ejemplo que las
relacionaba y explicarlas con suficiente claridad para que otros las
reutilizaran.
Bell Labs favorecía un ciclo corto entre diseño, uso local exigente,
corrección y documentación. Las herramientas se difundieron gracias a
ese ciclo de construcción y transmisión.
Por qué Brian Kernighan sigue siendo importante
Los ecosistemas modernos son mucho mayores que el Unix de los setenta,
pero afrontan las mismas decisiones: añadir una dependencia o escribir
una herramienta, diseñar un formato general o un lenguaje de dominio,
exponerlo todo o conservar una interfaz estrecha.
Los trabajos de Kernighan ofrecen criterios: expresar claramente el
problema, evitar mecanismos innecesarios, mantener los datos
inspeccionables, componer unidades autónomas y explicar mediante
ejemplos verificables.
Su legado también es editorial. Una tecnología no se difunde solo por su
mérito técnico, sino mediante palabras, ejemplos y una progresión que
permiten adoptarla desde fuera. K&R hizo esto por C; sus otros libros lo
hicieron por Unix y la propia práctica de programar.
Cronología
- 1942: Brian Wilson Kernighan nace en Toronto.
- 1964: se gradúa en física de ingeniería en la Universidad de
Toronto.
- 1969: termina su doctorado en Princeton y llega a Bell Labs.
- Comienzos de los años 1970: contribuye a herramientas de texto y
al entorno Unix.
- 1975: se publica Ratfor.
- 1976: publica Software Tools con P. J. Plauger.
- 1977: crea AWK con Alfred Aho y Peter Weinberger.
- 1978: aparece la primera edición de The C Programming
Language.
- 1984: publica The Unix Programming Environment con Rob Pike.
- 1988: la segunda edición de K&R cubre el C ANSI.
- Años 1980–1990: desarrolla AMPL con Robert Fourer y David Gay.
- 2000: deja Bell Labs y se convierte en profesor de Princeton.
- 2019: publica Unix: A History and a Memoir.
- 2023: aparece la segunda edición de The AWK Programming
Language.
Preguntas frecuentes
¿Creó Brian Kernighan el lenguaje C?
No. Dennis Ritchie diseñó C en Bell Labs. Kernighan contribuyó a su
entorno y coescribió con Ritchie la obra decisiva para explicarlo, The
C Programming Language.
¿Quién creó AWK?
Alfred Aho, Peter Weinberger y Brian Kernighan crearon AWK juntos; su
nombre reúne sus iniciales. Sus conocimientos sobre patrones,
implementación y tratamiento de texto y números determinaron el
resultado.
¿Para qué se sigue usando AWK?
Sigue siendo eficaz para transformar rápidamente datos en líneas y
columnas: registros, exportaciones, informes y salidas de comandos. Los
formatos anidados o programas muy grandes pueden mantenerse mejor con
otro lenguaje.
¿Qué es un pequeño lenguaje?
Es una notación diseñada para un dominio limitado, como los patrones y
acciones de AWK, las ecuaciones de eqn o los modelos de AMPL. Su
especialización expresa conceptos útiles con menos mecanismos generales.
¿Por qué influyeron tanto los libros de Kernighan?
Combinan explicaciones compactas con programas realistas y progresivos.
En lugar de limitarse a enumerar funciones, enseñan métodos de diseño,
prueba y composición aplicables a herramientas propias.