La Association for Computing Machinery ha anunciado la concesión del premio Turing 2020 a Alfred Vaino Aho (Columbia University) y Jeffrey David Ullman (Stanford University) por sus algoritmos fundamentales y la teoría subyacente a la implementación del lenguaje de programación y por sintetizar estos resultados y los de otros en sus libros altamente influyentes, que educaron a generaciones de científicos informáticos.

Aho y Ullman obtuvieron su doctorado en la Princeton University antes de unirse a Bell Labs, donde trabajaron juntos desde 1967 hasta 1969. Durante su tiempo en Bell Labs, sus primeras colaboraciones incluyeron el desarrollo de algoritmos eficientes para analizar y traducir lenguajes de programación.

En 1969, Ullman comenzó una carrera en el mundo académico y finalmente se unió a la facultad de la Stanford University, mientras que Aho permaneció en Bell Labs durante 30 años antes de unirse a la facultad de la Columbia University. A pesar de trabajar en diferentes instituciones, Aho y Ullman continuaron su colaboración durante varias décadas, durante las cuales fueron coautores de libros y artículos e introdujeron técnicas novedosas para algoritmos, lenguajes de programación, compiladores y sistemas de software.

Dos de sus libros más famosos son:

  • The Design and Analysis of Computer Algorithms (1974), en coautoría con John Hopcroft. Fue el libro de texto estándar para los cursos de algoritmos en todo el mundo, uno de los libros más citados en la investigación en ciencias de la computación durante más de una década y hoy es considerado un clásico. Introdujo la máquina de acceso aleatorio (RAM) como el modelo básico para analizar la complejidad temporal y espacial de los algoritmos informáticos utilizando relaciones de recurrencia.
  • Principles of Compiler Design (1977), a menudo conocido como el “Libro del Dragón” debido a su diseño de portada. Es el libro definitivo sobre tecnología de compiladores. Integró la teoría del lenguaje formal y las técnicas de traducción dirigidas por la sintaxis en el proceso de diseño del compilador. Presenta lúcidamente las fases en la traducción de un lenguaje de programación de alto nivel a código de máquina, modularizando toda la empresa de construcción de compiladores. Incluye contribuciones algorítmicas a técnicas eficientes de análisis léxico, técnicas de análisis de sintaxis y generación de código.