Sobre los pasos de Donald Knuth

Publicado en

Autor

"La ciencia es el conocimiento que comprendemos tan bien que podemos enseñárselo incluso a una computadora; si no entendemos cabalmente algo, manejarlo es un arte
(…)
De tal suerte, debemos intentar continuamente transformar toda arte en una ciencia: Al hacerlo, lograremos su avance como arte."

– Donald Knuth, discurso de aceptación del Premio Turing (1974)

 

En esta ocasión, dedicaré mi columna a una persona: Donald Erwin Knuth, alrededor de quien mi atención ha estado volando a últimas fechas, y a quien debo parte importante de mi elección de carrera y desarrollo profesional.

Tenemos el privilegio de trabajar en un campo suficientemente joven como para ser contemporáneos con quienes establecieron su mismísimo significado. Gente que viene de formarse en campos disciplinarios disímiles y fue convergiendo en el naciente campo de la computación, sea por la vía de las ciencias duras, la ingeniería, la administración o el arte.

El árbol genealógico disciplinar de la computación está fuertemente dominado, claro, por los matemáticos. En muchas universidades, las principales carreras relacionadas siguen siendo parte de los departamentos de matemáticas, o (en el caso de las ingenierías) requieren un estudio de un par de años de principios matemáticos apenas para “calentar motores” e iniciar con las materias específicas del ramo.

La computación también se caracteriza por ser muy permeable a gente que desarrolló sus competencias profesionales de manera no formal. ¿Quién de ustedes no ha tenido el gusto de trabajar con colegas cuyo currículum formal parecía apuntar hacia futuros muy distintos? En lo particular, mis colegas y maestros incluyen químicos, músicos, físicos, psicólogos, matemáticos, sociólogos, y un largo etcétera (donde sin duda entramos los autodidactas puros, quienes no seguimos una carrera universitaria formal). Todos ellos comparten un punto en su historia profesional personal: reconocer la ventaja de automatizar procesos arbitrarios de una forma repetible, controlable, monitoreable. Esto es, darse cuenta cómo para prácticamente cualquier ámbito profesional, puede ser útil aprender a programar (y posteriormente, claro está, entrar al interminable laberinto fractal que supone afinar nuestras habilidades como programador).

Pero muy poca gente puede compararse siquiera con Donald Knuth. Él es uno de los grandes pioneros de prácticamente todas las disciplinas relacionadas con la computación, una suerte de Da Vinci de los siglos XX y XXI.

Y tal como Da Vinci, Knuth probablemente deba ser visto como artista en primer término, dado que todo lo demás es mera consecuencia.

"Hemos visto que la programación de computadoras es un arte,

puesto que aplica el conocimiento acumulado al mundo,

porque requiere de habilidad y de ingenuidad,

y especialmente porque puede producir objetos de gran belleza.

Un programador que subconscientemente se ve a sí mismo como artista disfrutará de lo que hace y lo hará mejor."

– Donald Knuth, discurso de aceptación del Premio Turing (1974)

El trabajo de Knuth parte de un disfrute estético, no únicamente funcional. Un enamoramiento con los diferentes niveles de lo que su código alcanza. Y eso explica, a distintos niveles de abstracción, el camino por el que llevó a su carrera. Citemos algunos ejemplos.

En 1962, Knuth comenzó a escribir lo que esperaba que fuera un simple libro de texto para la enseñanza de algoritmos —The art of computer programming. Cuatro años más tarde, siendo aún un alumno de posgrado, entregó al editor un primer borrador: más de 3,000 páginas manuscritas. Pero siendo un perfeccionista, sería este libro más lo que guiaría prácticamente la totalidad de su vida académica: pasados más de 50 años, el libro (convertido en una serie de volúmenes de referencia) sigue en desarrollo.

Knuth siguió desarrollando y embelleciendo su texto, preparándolo para la impresión. La ancestral técnica de impresión por tipos móviles, que incluía el fundido de piezas especiales para generar las complejas fórmulas requeridas por las matemáticas, comenzó a encarecer y quedar fuera del alcance para su proyecto.

Conforme avanzaba la tecnología, resultó natural que el libro sería formado por computadora… Pero las herramientas disponibles a principios y mediados de 1970 sencillamente no estaban a la altura estética de una obra con un alta carga de símbolos matemáticos, estructurada con distintos niveles de seccionamiento, cargadas de referencias internas y externas, y Knuth hizo lo que solo un verdadero hacker haría: diseñar su propio sistema de edición de texto, TeX.1 Liberó la primera versión en 1978, y la última versión mayor que introducía cambios no-compatibles, 3.0, en 1989.

Al día de hoy, Knuth ha terminado formalmente tres volúmenes (de siete que, estima, cubren suficientemente bien el campo) y avanzado fuertemente en el cuarto, que va siendo publicado por fascículos.

Me permito mencionar, como un punto muy lateral y con un dejo de soberbia en el tono, que TeX es uno de los puntos definitorios de mi vida: es el primer programa de cómputo que aprendí a usar. Knuth visitó el IIMAS (UNAM), donde con su ayuda se instaló una versión temprana de TeX. Y al día de hoy agradezco a diario a mi padre, investigador en física, las muchas noches de viernes y sábado que me llevó, aún niño, a “jugar” a la sala de terminales, donde hice mis pininos en TeX en 1983. Para 1985, mi padre y un grupo de colegas editaron empleando dicho sistema el Manual de Lenguaje y Tipografía Científica en Castellano2, libro que recomiendo a todo interesado en la escritura técnica formal y en el correcto uso de nuestro idioma. Hasta donde sé, es la tercera instalación de TeX en el mundo. Si comparan el libro referido con prácticamente cualquier obra impresa en esos años notarán, a pesar de sus imperfecciones técnicas en comparación de nuestra era de super-altas resoluciones, una enorme diferencia cualitativa.

Knuth se comprometió a que, después de la versión 3.0, la interfaz de TeX no tendría ningún cambio que rompiera la compatibilidad; todo texto debería resultar idéntico sin importar en qué equipo de cómputo se preparara. Como un guiño de humor hacker, todas las versiones menores subsecuentes se irían acercando a la perfección simbolizada por el número π; la versión actual (liberada en enero de 2014) es la 3.14159265. Knuth, quien hoy tiene 78 años y aunque formalmente retirado sigue trabajando para terminar su principal obra a la cual volveremos, autorizó que post-mortem se efectúe un último cambio a TeX, congelando para siempre su versión en π.

TeX, de la mano del conjunto de macros LaTeX diseñado por Leslie Lamport principalmente entre 1985 y 1995, se convirtió en el sistema de elección para la edición de textos científicos; prácticamente todas las revistas académicas de las ciencias exactas e ingenierías lo emplean como su principal formato para la entrega de originales.

"Cambiemos nuestra actitud tradicional respecto a la construcción de los programas:

en vez de imaginar que nuestra tarea principal es darle las instrucciones de qué hacer a una computadora,

concentrémonos en explicarle a los humanos lo que queremos que la computadora haga."

– Donald Knuth, Literate programming, 1984

Mencionábamos que Knuth apunta a un disfrute estético a diferentes niveles de abstracción. Agreguemos otro nivel más: el paradigma de programación que impulsa; es decir, la computación literaria.

Este paradigma propone que un programa debe ser escrito cual si fuera (dependiendo de su complejidad) como un libro, tratado o artículo estructurado para su lectura humana, en el cual el código fuera el material que acompaña a la exposición lógica. Por medio de un preprocesador, el documento maestro puede exportarse tanto a una versión imprimible como a una compilable. Pueden consultar un sistema de preparación de documentos para documentación literaria en la página de CWEB3 si bien es cierto que no todo programa puede verse beneficiado por esta lógica, la claridad resultante es notoria.

Knuth es, pues, una inspiración en lo estético y en lo funcional, en el purismo matemático y en la limpieza de la implementación. Si acaso, podría criticársele la falta de pragmatismo ante su obsesión por la perfección; sus elevados estándares harían enfurecer a cualquier project manager. Pero sus contribuciones al avance de nuestra disciplina han sido, naturalmente, correspondientemente brillantes.

Espero, con este breve y desordenado texto, dar a conocer algo más de la obra de Knuth, para que inspire a nuestros lectores. Autores de su talla conjuntan ciencia y arte. El tezón para realizar proyectos de décadas de envergadura hace posible avances que otros descartarían por impracticables. Y la apreciación por la belleza lleva a un disfrute en el ejercicio diario de nuestras tareas.

¡Larga vida al maestro Knuth!