Esta entrevista fue originalmente realizada en inglés. Por tanto, primero se ofrece una traducción al español, y al final, se encuentra la versión original.
This interview was originally conducted in English. The Spanish translation is provided first, followed by the original version.
El 31 de marzo de 2021, ACM anunciaba a Alfred Aho y Jeffrey Ullman como flamantes ganadores del Turing Award año 2020. Por sus aportes a los fundamentos de los compiladores y teoría de los lenguajes de programación.
Su libro: Compilers: Principles, Techniques and Tools, hoy, ya no sólo es un clásico en el área de compiladores, sino en las ciencias de la computación. En 1977, dio a luz su primera edición (aunque bajo el nombre de Principles of Compiler Design) y, desde entonces, rápidamente se transformó en un texto clave para formar a nuevas generaciones de informáticos.
Para mí es realmente un placer traerles está entrevista con Alfred Aho —ya retirado de la Columbia University desde el 2018—, que, aunque breve, tuvo la gentileza de dedicarme algo de su tiempo para responder a mis preguntas.
¡Espero la disfruten!1
Versión traducida
Camilo: (0) ¡Hola Alfred!
En primer lugar, me gustaría agradecerte por aceptar la invitación a una entrevista en Érase una vez un algoritmo (newsletter).
Estas son las preguntas […]
Alfred Aho: ¡Interesantes preguntas! Mis respuestas están debajo de cada una de las preguntas de tu mensaje.
Camilo: (1) No pude resistir la oportunidad de hacerte la siguiente pregunta. Pues es una curiosidad que arrastro hace varios años, desde que leí tu libro Compilers: Principles, Techniques, and Tools (conocido como el libro del dragón). ¿Cómo surgió la idea de añadir un dragón, pues no fue el único libro con una portada impactante (recuerdo también la tortuga de tu libro Foundations of Computer Science)?
Alfred Aho: La idea del dragón de la portada de nuestro libro de 1977 Principles of Compiler Design se debe a Jeff Ullman. La portada es una alegoría basada en El Quijote, la novela épica de Miguel de Cervantes publicada en 1605. El dragón representa la complejidad del diseño de compiladores; el caballero y el caballo están adornados con técnicas de ciencia de la computación con las que matar al dragón. Nuestro libro de 1977 se conoció rápidamente como el «Libro del Dragón Verde». Tenía 604 páginas.
En la segunda edición de 1986, el dragón pasó a ser rojo. El libro añadía a Ravi Sethi como tercer coautor y tenía 796 páginas.
En la tercera edición de 2007, el dragón pasó a ser morado. Esta edición añadió a Monica Lam como cuarta coautora y tuvo 1009 páginas.
Ninguno de nosotros se atrevió a escribir una cuarta edición.
Camilo: (2) El libro del dragón introdujo a varias generaciones de informáticos al área de los compiladores. Sin embargo, en la actualidad muchos informáticos no saben la teoría detrás de cómo se diseñan los lenguajes. Raymond Turner2 dijo «Ciencia de la computación en un área dominada por lenguaje», para dar énfasis a la relevancia de los lenguajes, ¿crees que esa afirmación podrá sostenerse con el paso de los años?
Alfred Aho: Cada campo del quehacer humano se caracteriza por sus dicciones3, con su sintaxis y semántica distintivas. Las dicciones no dejan de evolucionar y esto es especialmente cierto en el caso de la ciencia de la computación y sus lenguajes de programación. En este sentido estoy de acuerdo con Raymond Turner.
También me gustaría señalar que los principios teóricos tienden a sobrevivir mucho más tiempo que los detalles de una tecnología en particular. Por esta razón, creo que las nociones de expresiones regulares y gramáticas libres de contexto van a sobrevivir más tiempo que los detalles de un lenguaje de programación en específico.
Camilo: (3) En la actualidad cada cierto tiempo aparece un nuevo lenguaje de programación (pienso en Rust, Julia, Go, etc.) y cada uno de ellos ya no tiene un «paradigma» único (imperativo, orientada a objeto, funcional, etc.), sino son multiparadigma por definición. Así, parece que esa categorización pierde cada vez más interés. ¿Cuál crees que debería ser la forma adecuada para categorizar lenguajes de programación?
Alfred Aho: Estoy de acuerdo: creo que los principales lenguajes de programación, como C++, ya se han convertido en lenguajes multiparadigma. Sin embargo, creo que a medida que un programador adquiere más destreza en diferentes paradigmas de programación, elegirá los paradigmas que considere más adecuados para el problema en cuestión. A efectos didácticos e históricos, sigue siendo bueno conocer las características de los principales paradigmas de programación.
La música puede ser un buen modelo para estudiar la evolución de la clasificación de los géneros de lenguajes de programación. Hay cientos de géneros y estilos musicales que han evolucionado a lo largo de los siglos, desde la música medieval hasta la música moderna de vanguardia y experimental. Sospecho que en el futuro veremos un enorme espectro de estilos de lenguajes para expresar algoritmos a los ordenadores. También creo que se seguirán utilizando lenguajes de programación específicos de cada dominio, como SQL y AWK4.
Camilo: (4) Algunas personas han dicho que «gran parte de lo que se estudia en el área de la teoría de lenguaje de programación ya está resuelto», ¿Tú crees que con el avance de la IA permita abrir nuevas áreas de investigación en el diseño e implementación de lenguajes de programación, o más bien estas técnicas serán trasladadas a otras áreas (por ej. IA)?
Alfred Aho: Estoy de acuerdo en que ya existe una teoría rica y útil que subyace al diseño y la aplicación de los lenguajes de programación. Sin embargo, creo que aún no comprendemos cuál es la mejor manera de aplicar la IA a la aplicación de lenguajes de programación y al desarrollo de programas. La optimización de los programas y la comprobación de la correctitud seguirán siendo importantes áreas de investigación, especialmente para los programas generados por sistemas de IA.
Camilo: (5) En tu artículo Abstractions, Their Algorithms, and Their Compilers (2022)5 del que es coautor con Jeffrey Ullman, analizó la posibilidad de utilizar el aprendizaje automático para desarrollar aplicaciones de software a través de datos en lugar de escribir código con lenguajes de programación. Además, analizó las oportunidades de la computación cuántica. De cara al futuro, ¿cómo ve el futuro de la ciencia de la computación? ¿Se expandirá aún más hacia áreas interdisciplinares, como la incorporación de aspectos de las humanidades (como la IA)?
Alfred Aho: Para mí, la ciencia de la computación es un área muy amplia que se centra en idear abstracciones adecuadas para expresar y resolver problemas, de modo que puedan convertirse en algoritmos que se traduzcan en programas computacionales eficientes. Es, por tanto, una ciencia de abstracción y computación.
La ciencia de la computación se aplica prácticamente a todos los ámbitos de la actividad humana. Tiene intrínsecos problemas abiertos de millones de dólares, como el célebre problema P vs. NP, y problemas filosóficos tales como si se puede escribir un programa computacional que muestre cualidades humanas como la empatía o la conciencia. Algunas aplicaciones de la ciencia de la computación, en particular la IA, plantean importantes cuestiones éticas y jurídicas que siguen abiertas. Es muy difícil predecir cómo serán la ciencia de la computación y el mundo dentro de unos años, y mucho más a finales de este siglo, pero es justo decir que en la actualidad es una de las áreas más apasionantes de la ciencia.
Camilo: (6) Me gustaría terminar la entrevista pidiéndote un consejo para todos aquellos que les gusta diseñar e implementar lenguaje de programación, en esta época donde prevalece el aprendizaje automático.
Alfred Aho: Mi principal sugerencia para cualquiera que diseñe un nuevo lenguaje de programación: ante todo, ¡piensen en el usuario!6
Original
Camilo: (0) Hi Alfred!
First of all, I'd like to thank you for accepting the invitation to an interview at Érase una vez un algoritmo (newsletter).
Here are the questions […]
Alfred Aho: Interesting questions! My answers are below each of the questions in your message.
Camilo: (1) I couldn't resist the chance to ask you the following question. I've been curious about something for a while now. It all started when I read your book, “Compilers: Principles, Techniques, and Tools,” also known as the dragon book. I wanted to know where the idea for the dragon on the cover came from, especially since there were other books with memorable covers, like the turtle on your book, “Foundations of Computer Science”.
Alfred Aho: The idea for the dragon on the cover of our 1977 book "Principles of Compiler Design" is due to Jeff Ullman. The cover is an allegory based on "Don Quixote", Miguel de Cervantes' epic novel published in 1605. The dragon depicts the complexity of compiler design; the knight and the horse are emblazoned with computer science techniques with which to slay the dragon. Our 1977 book quickly became known as the "Green Dragon Book". It was 604 pages.
In the second 1986 edition of the dragon book, the dragon changed color to red. The book added Ravi Sethi as a third coauthor and was 796 pages.
In the third 2007 edition, the dragon became purple. This edition added Monica Lam as a fourth coauthor and was 1009 pages.
None of us had the heart to write a fourth edition.
Camilo: (2) Many computer scientists were introduced to the field of compilers through the dragon book. However, it seems that nowadays, fewer people are familiar with the theories behind language design. Raymond Turner once emphasized the importance of languages in computer science by stating: “Computer science is an area dominated by language.” Do you believe this statement will remain valid in the future?
Alfred Aho: Every field of human endeavor is characterized by its dictions with their distinctive syntax and semantics. The dictions keep evolving and this is especially true of computer science and its programming languages. It is in this sense that I agree with Raymond Turner.
I would also like to point out that theoretical principles tend to survive much longer than the details of a particular technology. For this reason, I think the notions of regular expressions and context-free grammars are going to survive longer than the details of a particular programming language.
Camilo: (3) It's becoming more common for new programming languages to emerge, such as Rust, Julia, and Go, each with multiple paradigms (imperative, object-oriented, functional, etc.). As a result, the traditional categorization of programming languages as having a single paradigm is becoming less relevant. What do you believe would be a more appropriate approach to categorizing programming languages?
Alfred Aho: I agree — I think the major programming languages like C++ have already become multi-paradigm languages. However, I think that as an individual programmer becomes more skilled in different programming paradigms, a programmer will choose the paradigms that he or she thinks are most suitable to the problem at hand. For teaching and historical purposes, it's still good to be familiar with the characteristics of the major programming paradigms.
Music might be a good model for studying the evolving classification of the genres of programming languages. There are hundreds of genres and styles of music that have evolved over the centuries starting from medieval music to modern avant-garde and experimental music. I suspect in the future we will see an enormous spectrum of styles of languages for expressing algorithms to computers. I also think domain-specific programming languages like SQL and AWK will continue to be used.
Camilo: (4) There have been claims that a significant portion of programming language theory has already been resolved. However, do you believe that the progress of AI will lead to fresh avenues of exploration in the design and implementation of programming languages, or will these methods be transferred to other fields, such as AI?
Alfred Aho: I agree that there is already a rich and useful theory underlying the design and implementation of programming languages. However, I think we still don't understand how best to apply AI to the application of programming languages and to the development of programs. Optimization of programs and proving the correctness of programs will continue to be important research areas especially for programs generated by AI systems.
Camilo: (5) In the article “Abstractions, Their Algorithms, and Their Compilers” (2022), co-authored with Jeffrey Ullman, you discussed the potential of utilizing machine learning to develop software applications through data rather than programming languages. Additionally, you explored the possibilities of quantum computing. Looking ahead, how do you envision the future of computer science? Will it further expand into interdisciplinary areas, such as incorporating aspects of the humanities (such as AI)?
Alfred Aho: I think of computer science as a very broad area that centers around devising suitable abstractions for expressing and solving problems so that they can be turned into algorithms that can be translated into efficient computer programs — it's a science of abstraction and computation. Computer science is being applied to virtually every area of human endeavor. It has intrinsic million-dollar open problems, like the celebrated P vs. NP problem, and philosophical problems such as whether can you write a computer program that exhibits human qualities like empathy or consciousness. Some applications of computer science, particularly AI, are raising important open ethical and legal questions. It is very difficult to predict what computer science and the world will be like in a few years let alone by the end of this century but it is fair to say that at present it is one of the most exciting areas of science.
Camilo: (6) Before we conclude the interview, I would appreciate any suggestions you may have for people who want to design and implement programming languages in this era where machine learning is prevalent.
Alfred Aho: My primary suggestion for anyone designing a new programming language: first and foremost, think of the user!
Las notas a pie de página, enlaces, imágenes y negritas fueron añadidas por mí.
Una figura influyente en la emergente área de Filosofía de la computación. La cita fue extraída de su libro Computational Artifacts: Towards a Philosophy of Computer Science.
Conjunto de características que definen la forma de hablar y escribir de una persona.
AWK fue diseñado por Peter Weinberger, Brian Kernighan y él.
En uno de los emails que intercambié con Alfred ⨪-hace ya unos años— me recomendó leer el primer capítulo de su libro The AWK programming language, y que hiciera lo mismo con el lenguaje de programación que me propusiera diseñar. Por tanto, su consejo fue: antes de hacer el compilador es importante hacer un tutorial de tu posible lenguaje.