Fallece Tony Hoare: el genio que aceleró las computadoras y, sin querer, dio lugar a la vulnerabilidad más devastadora en la historia de la informática

Fallece Tony Hoare: el genio que aceleró las computadoras y, sin querer, dio lugar a la vulnerabilidad más devastadora en la historia de la informática

Adiós al padre de Quicksort y del "null", sin el cual el desarrollo de software moderno no sería posible.

image

Falleció Charles Anthony Richard Hoare —una de las personas que, en sentido literal, ayudó a crear la programación moderna tal como la conocemos. Tenía 92 años. Incluso quienes nunca escucharon el nombre completo de Hoare probablemente se hayan topado con sus ideas directamente: a través de algoritmos de ordenación, mediante métodos para verificar la corrección del código, a través de modelos de ejecución paralela de programas e incluso por el viejo y dolorosamente familiar error con null.

Con mayor frecuencia se recuerda a Hoare como el creador de Quicksort. Ideó el algoritmo en 1959 y escribió la primera implementación en Elliott Computers en 1960. Según recuerdos de contemporáneos, el impulso vino de una discusión con su jefe. La historia parece casi cotidiana, pero el resultado tuvo una longevidad excepcional. Décadas después, Quicksort sigue siendo una de las maneras más rápidas y prácticas de ordenar en multitud de tareas reales.

La idea de Quicksort, a primera vista, es sencilla. El programa selecciona un elemento como pivote y reparte los demás valores en dos grupos: menores que el pivote y mayores que el pivote. A continuación, la misma operación se repite en cada grupo por separado hasta que el arreglo queda ordenado. La importancia de la idea radica en que Hoare propuso una combinación muy afortunada de velocidad, sencillez y practicidad. El algoritmo no solo era elegante en teoría, sino que funcionaba muy bien en máquinas reales. Por eso Quicksort se usó en la implementación del comando sort en Unix y luego se incluyó en las bibliotecas de varios lenguajes de programación. Para estudiantes y docentes se convirtió en un ejemplo clásico de cómo la recursión y un buen diseño de ingeniería generan una solución que no envejece al ritmo del hardware.

Pero la contribución de Hoare no se limitó a un único algoritmo de ordenación. A finales de los años sesenta desarrolló lo que más tarde se conoció como la lógica de Hoare. Suena seco, pero el núcleo de ese trabajo es muy aplicado. Cuando un programador escribe código surge siempre la pregunta: ¿cómo demostrar que un programa hace exactamente lo que se pretende y no solo parece correcto en unas pocas pruebas? La lógica de Hoare propuso un método riguroso para ello. Permite formular condiciones antes de ejecutar un fragmento de programa y condiciones después, y comprobar si el resultado deseado se mantiene. En forma simplificada, el enfoque es así: si al inicio se cumple una afirmación, después de ejecutar la instrucción debe cumplirse otra. Para el mundo del desarrollo ese modo de razonar resultó de gran importancia. Con él no solo se pueden buscar errores, sino también demostrar por adelantado la corrección de sistemas especialmente críticos, donde fallar cuesta demasiado.

Más tarde Hoare se ocupó de otra área compleja: los cálculos concurrentes. Se trata de programas en los que varios procesos trabajan al mismo tiempo, intercambian datos e influyen unos en otros. En la práctica es ahí donde surgen las fallas más desagradables y difíciles de atrapar: bloqueos, condiciones de carrera, interbloqueos, comportamientos que no se reproducen de forma estable. Para describir esas situaciones con reglas claras, Hoare propuso el modelo Communicating Sequential Processes (CSP).

La esencia de CSP es que es conveniente ver un sistema paralelo como un conjunto de procesos separados que se ejecutan de forma independiente y se comunican mediante intercambio de mensajes. Ese enfoque ayuda a no mezclar todo en un único flujo caótico de estados, sino a descomponer el comportamiento del programa en partes comprensibles: quién hace qué, en qué momento espera datos, cuándo envía resultados y dónde puede aparecer un punto muerto. Para la teoría de la programación el modelo resultó muy importante, y en la práctica influyó en cómo funcionan los mecanismos de concurrencia en distintos lenguajes, incluidos Erlang, Go y Clojure. En otras palabras, Hoare ayudó a formular el lenguaje con el que los programadores aún discuten la ejecución simultánea de tareas sin confusión.

Hoare fue valorado no solo por la profundidad técnica de sus ideas, sino también por la rara claridad de sus formulaciones. En 1973, hablando de ALGOL 60, señaló que el lenguaje adelantó tanto su tiempo que resultó mejor no solo que sus predecesores, sino que casi que que la mayoría de sus sucesores. Tras esa frase no había un intento de lucir ingenioso, sino la mirada de alguien que vio la evolución de los lenguajes de programación desde dentro y comprendió bien cómo las ideas valiosas se hunden rápidamente bajo una capa de complicaciones, compromisos y extensiones desafortunadas.

En 1980 Hoare recibió el premio Turing, la distinción más prestigiosa en informática. Su conferencia The Emperor's Old Clothes se difundió ampliamente. De allí proviene una de las ideas más citadas sobre el diseño de programas: un sistema puede hacerse tan simple que sus defectos resulten obvios de inmediato, o tan complejo que nadie vea fallas evidentes. Los desarrolladores citan esa frase no por su efecto, sino porque contiene mucha verdad. La complejidad en el software a menudo no resuelve problemas, sino que simplemente oculta mejor los puntos débiles.

En la biografía de Hoare hay también un desarrollo del que más tarde habló con arrepentimiento. Junto con Niklaus Wirth participó en la creación de ALGOL W, una de las variantes de desarrollo de ALGOL 60. El comité que decidió el futuro del lenguaje acabó apostando por ALGOL 68. Esa decisión cortó de hecho una línea de evolución que podría haber seguido otro rumbo. Sin embargo, las ideas de ALGOL W no desaparecieron: más tarde influyeron en Pascal.

Precisamente en ese trabajo Hoare introdujo el mecanismo que más tarde llamó su error de los mil millones. Se trata del puntero nulo, o referencia nula. Desde el punto de vista práctico la idea parecía muy conveniente: un programa podía almacenar un valor especial que indicaba la ausencia de objeto o datos. Implementar ese mecanismo era sencillo y al principio la solución pareció razonable. El problema se manifestó después. En cuanto el código olvida comprobar si detrás de esa referencia existe un objeto real, el programa falla o empieza a comportarse de forma impredecible. De estas situaciones surgieron multitud de fallas, vulnerabilidades y accidentes en todo el mundo. Hoare dijo más tarde, sin rodeos, que introdujo null con demasiada ligereza, sin valorar cuántos problemas traería esa construcción aparentemente cómoda.

La biografía de Hoare fue poco convencional. Nació en 1934 en Colombo, en lo que hoy es Sri Lanka. Durante la Segunda Guerra Mundial la familia, junto con su madre, dos hermanos menores y dos hermanas menores, se trasladó a Rodesia del Sur, la actual Zimbabue. Más tarde la familia se mudó al Reino Unido. Allí Hoare ingresó en Merton College, en la Universidad de Oxford; su primera formación no estuvo relacionada ni con matemáticas ni con ingeniería. Estudió Literae humaniores, el famoso curso oxoniense Greats, que incluye latín, griego antiguo, filosofía e historia antigua. Esa formación académica explica mucho de su posterior manera de pensar: Hoare no solo sabía construir esquemas rigurosos, sino también formular ideas con gran precisión.

Durante el servicio nacional Hoare aprendió ruso y, por intercambio, llegó a la Universidad Estatal de Moscú (MGU). Allí trabajó en traducción automática bajo la dirección de Andrey Kolmogorov. A primera vista la relación entre traducción y el futuro Quicksort no parece obvia, pero fue en ese periodo cuando Hoare afrontó una tarea muy concreta: ordenar una lista de palabras rusas para un diccionario. Trabajar en esa clasificación le impulsó hacia la idea del algoritmo posterior. La implementación del concepto se facilitó después con ALGOL, que ofrecía soporte para la recursión. Se formó así una cadena típica de la gran ciencia: un problema aplicado desemboca en un método que perdura generaciones y máquinas.

En 1962 Hoare se casó con Jill Pym. La pareja tuvo tres hijos: Tom, Joanna y Matthew. Matthew falleció de leucemia en 1982. En sus últimos años Hoare fue profesor emérito de Oxford y investigador emérito en Microsoft Research. Incluso en su condición de maestro no se convirtió en una figura de libro de texto recordada solo en aniversarios; sus trabajos siguieron siendo discutidos como la base viva de áreas enteras de la programación.

En julio de 2024 el número de FACS, el boletín sobre aspectos formales de las ciencias de la computación, dedicó su edición al 90.º aniversario de Hoare. Tras su muerte aparecieron nuevos textos conmemorativos, incluidas publicaciones del Computer History Museum y recuerdos personales de colegas. Por esos testimonios se aprecia bien cómo lo recordaban. No se le evoca solo como autor de Quicksort o como laureado con el premio Turing. Los colegas hablan de una persona capaz de idear cosas fundamentales, que reconocía honestamente sus errores y dejó ideas que siguen funcionando dentro del código cotidiano.

La muerte de Hoare cierra no solo una historia personal grande, sino toda una etapa en la evolución de la informática. Quicksort enseñó a los programas a ordenar datos con rapidez. La lógica de Hoare dio a los desarrolladores una manera de verificar estrictamente la corrección del código. CSP ayudó a explicar cómo deben comunicarse los procesos paralelos. Incluso la historia de null quedó como una lección importante sobre cómo una solución cómoda puede perjudicar a toda una industria durante décadas. Un conjunto así de aportaciones es raro incluso entre los nombres más grandes de la ciencia de la computación.