Esta entrevista fue originalmente realizada en inglés por email. 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 by email. The Spanish translation is provided first, followed by the original version.
John Ousterhout es un académico de la universidad de Stanford. Obtuvo una licenciatura en Física de la Universidad de Yale en 1975 y un doctorado en ciencias de la computación de la Universidad Carnegie Mellon en 1980.
Entre 1980 a 1994 fue profesor del Departamento de Ciencias de la computación en la Universidad de California, Berkeley. Algunos de sus proyectos de investigación incluyen: herramientas de diseño para circuitos integrados como el editor de diseño Magic y el analizador de tiempo Crystal, el sistema operativo de red Sprite, sistemas de archivos con estructura de registro, el lenguaje de scripting Tcl y el conjunto de herramientas Tk.
Durante 1994 y 1998 fue ingeniero distinguido en Sun Microsystems Laboratories. En 1998 fundó Scriptics Corporation para comercializar herramientas de desarrollo Tcl, donde fue CEO hasta 2000. En 2002 creo una nueva empresa llamada Electric Cloud. Además, estuvo en Electric Cloud hasta 2007, y dirigió el desarrollo de un sistema de construcción en paralelo (ElectricAccelerator) y un servidor basado en web para gestionar procesos distribuidos como construcciones nocturnas y pruebas automatizadas (ElectricCommander).
En 2008 volvió al mundo académico en el Departamento de Ciencia de la computación de Stanford, y se mantiene dictado cursos sobre sistemas operativos y diseño de software.1
Uno de sus trabajos más aclamados es su libro A Philosophy of Software Design (2018), y de eso trata la siguiente entrevista.
¡Espero la disfruten!2

Versión traducida
(1) ¿En qué te inspiraste para escribir A Philosophy of Software Design, hubo alguna experiencia concreta que le impulsara a explorar los conceptos tratados en el libro?
El libro surgió a raíz de una nueva clase que creé en Stanford. Siempre me ha interesado el diseño de software, y durante muchos años me pregunté por qué no había cursos (literalmente) en ningún sitio sobre diseño de software. Finalmente decidí crear un curso sobre diseño de software en Stanford, y para ello tuve que desarrollar un conjunto de conceptos en los que basar el curso. El curso tuvo bastante éxito y empecé a dar charlas sobre él; entonces la gente empezó a preguntarme «¿por qué no escribes un libro sobre esto?», así que al final lo hice. Las ideas del libro se basan en los conceptos de la clase.
(2) Su libro hace hincapié en la importancia de la simplicidad en el diseño de software. ¿Podría citar un caso concreto en el que la simplicidad haya influido positivamente en un proyecto de desarrollo de software en el que haya participado?
Es mucho más fácil hablar de proyectos en los que he trabajado que no eran sencillos. Por ejemplo, actualmente estoy trabajando en la base de código para gRPC, y rompe casi todas las reglas del libro. Como resultado, es probablemente la base de código más desafiante en la que he trabajado. He pasado horas y horas estudiando minuciosamente el código de gRPC para averiguar cómo funcionan las cosas; con una base de código más simple y mejor documentada, este tiempo probablemente se habría reducido en un orden de magnitud y mi ritmo general de progreso se habría al menos duplicado.
(3) Ha mencionado la importancia de reducir la complejidad. ¿Qué enfoques concretos pueden utilizar los desarrolladores para simplificar los sistemas de software manteniendo su funcionalidad?
La respuesta a esta pregunta está en todo el libro; no hay una respuesta breve que pueda darle.
(4) En el capítulo «Elección de nombres» (Choosing names), das énfasis en la importancia de seleccionar nombres específicos y descriptivos para variables y funciones. ¿Difieren estas recomendaciones en el caso de utilizar un lenguaje de programación de un paradigma diferente (como el funcional o el lógico), dado que en el libro usas ejemplos de código Java y C++?
No lo creo; creo que las recomendaciones sobre nombres son bastante independientes del lenguaje. De hecho, creo que la mayoría de las ideas principales del libro también se aplicarían a lenguajes distintos de Java y C++.
(5) En un mundo en el que la tecnología avanza constantemente, ¿cómo cree que los principios fundamentales que presenta en su libro, relacionados con la simplicidad y el diseño, se adaptarán a futuras innovaciones en el desarrollo de software, como la IA y la computación cuántica?
No veo (todavía) ninguna razón para creer que los principios vayan a cambiar a medida que evolucione la tecnología. Sin embargo, no sé casi nada sobre computación cuántica, así que no tengo ni idea de cómo será programar ordenadores cuánticos.
(6) ¿Puedes sugerir 1-3 libros, artículos, pódcasts o películas que hayan influido positivamente en tu forma de pensar o que creas que podrían beneficiar a otros?3
The Art of Readable Code (2011) de Dustin Boswell y Trevor Fourcher.
(7) ¿Qué consejos daría a alguien que quiera mejorar sus conocimientos de desarrollo de software?
Trabajar en un entorno colaborativo en el que la gente lea el código de los demás y ofrezca su opinión. Tanto dar como recibir comentarios es una forma estupenda de mejorar tus habilidades de desarrollo de software.
Original
(1) What was the inspiration behind "A Philosophy of Software Design" and was there a specific experience that sparked your exploration of these concepts?
The book came about because of a new class I created at Stanford. I've always been interested in software design, and for many years I wondered why there are no courses (literally) anywhere on software design. I eventually decided to create a course on software design at Stanford, and for that I had to develop a set of concepts on which to base the course. The course has been pretty successful, and I started giving talks about it; people then started asking "why don't you write a book about this?", so eventually I did. The ideas in the book are based on the concepts in the class.
(2) Your book emphasizes the importance of simplicity in software design. Could you provide a specific instance where simplicity positively influenced a software development project you were a part of?
It's much easier to talk about projects I've worked on that were *not* simple. For example, I'm currently working in the code base for gRPC, and it breaks almost all of the rules in the book. As a result, it's probably the most challenging code base I've ever worked in. I have spent hours and hours poring over the gRPC code to figure out how things work; with a simpler and better documented code base, this time would probably have dropped by an order of magnitude and my overall rate of progress would have at least doubled.
(3) You mention the significance of reducing complexity. What are specific approaches developers can use to simplify software systems while maintaining functionality?
The book is all about the answer to this question; there isn't a short answer that I can give you.
(4) In the "Choosing names" chapter, you emphasize the significance of selecting specific and descriptive names for variables and functions. Would these recommendations differ in the case of utilizing a programming language from a different paradigm (such as functional or logic) in the sample Java and C++ code examples?
I don't think so; I think the recommendations about naming are pretty language-independent. In fact, I think that most of the major ideas from the book would also apply to languages other than Java and C++.
(5) In a world where technology is constantly advancing, how do you think the fundamental principles you present in your book, related to simplicity and design, will adapt to future innovations in software development, such as AI and quantum computing?
I don't (yet) see any reason to believe the principles will change as technology evolves. However, I know almost nothing about quantum computing, so I have no idea what it will be like to program quantum computers.
(6) Can you suggest 1-3 books, articles, podcasts, or movies that positively influenced your mindset or that you believe would benefit others?
"The Art of Readable Code", by Dustin Boswell and Trevor Fourcher.
(7) What tips would you offer someone looking to enhance their software development skills?
Work in a collaborative environment where people read each others' code and offer feedback. Both giving and receiving feedback are great ways to improve your software development skills.
Los detalles biográficos fueron extraídos desde su sitio web personal, para así, evitar imprecisiones.
Los enlaces, imágenes y negritas fueron añadidos.
Esta pregunta fue sugerida por Hector Patricio de The Dojo MX.
Muy buena!! Gracias por la entrevista!!!
Increíble, muchas gracias por esta serie y por estas entrevista en particular.