El bloguero Lex Fridman conversa con James Gosling sobre sus números favoritos, el desarrollo del editor Emacs, la creación de Java y la JVM.

Lex Fridman es un científico en informática de habla inglesa y podcaster. Entrevistó a James Gosling, el creador de Java, uno de los lenguajes de programación más populares. A continuación, te presentamos un resumen de esta entrevista.

Fridman: He leído en algún lugar que tu número favorito es la raíz cuadrada de dos. ¿Qué es lo que encuentras bello en los números?

Gosling: En matemáticas hay muchas cosas bellas. Desde joven leí el libro The Penguin Dictionary of Curious and Interesting Numbers. Desde entonces, tengo la costumbre de sumar los dígitos en recibos o tarjetas de crédito para ver si obtengo un número interesante.

Fridman: ¿Hay números que te gusten especialmente?

Gosling: Sí, por ejemplo el 42, que es un número mágico. Y también la raíz cuadrada de dos, que destruyó la religión pitagórica. Ellos pensaban que todo en el mundo podía expresarse con números racionales. Pero, como se demostró, no hay ninguna fracción racional igual a la raíz cuadrada de dos. Eso significa que nada en el mundo es perfecto, ni siquiera las matemáticas. O que la definición de lo perfecto es imperfecta.

Fridman: En el siglo XX, la teoría de la incompletitud de Gödel volvió a cuestionar la idea de lo perfecto.

Gosling: Sí, y la lección que extraje de la teoría de Gödel no es que yo pueda no saber algo. En realidad, aunque a las personas les gusten las respuestas claras, en algún lugar existe una lógica de tres estados: “verdadero”, “falso” y “posible”.

Fridman: ¿Qué similitudes encuentras entre el mundo de las matemáticas y la programación?

Gosling: Al igual que las matemáticas, la programación busca el camino más corto para resolver un problema. Es un movimiento constante a través de un gráfico de posibilidades en un intento de crear el programa más corto que haga su trabajo. Aquí, no solo es importante encontrar una respuesta, sino también determinar el mejor camino desde la pregunta hasta la respuesta.

Fridman: En uno de los videos que vi, mencionaste a Don Knuth y recomendaste leer sus libros sobre teoría de la informática. ¿Has encontrado belleza en su mundo de algoritmos complejos? ¿Te ha inspirado mientras trabajabas en lenguajes de programación? ¿O esos conceptos matemáticos abstractos no te fueron útiles?

Gosling: Sí, todo eso fue útil. Para mí es importante ver un fragmento de código y demostrarme a mí mismo que funciona, y para eso se necesitan conocimientos teóricos. De hecho, soy un pensador visual: cuando miro código, lo veo como una imagen, no como un texto. Por eso prefiero un estilo de codificación compacto, con el menor número de paréntesis y espacios en blanco, lo que ayuda a ver la función sin necesidad de hacer scroll, aunque a menudo esto desagrada a los ingenieros con los que trabajo.

Fridman: ¿Cuál fue el primer programa que escribiste?

Gosling: No recuerdo mi primer programa, pero sí recuerdo bien mi primera máquina en la que trabajé. Era la década de 1970. En una esquina del laboratorio de la Universidad de Calgary había una minicomputadora PDP-8. No se usaba mucho, así que podía jugar con ella todo lo que quisiera. En ese momento era solo un juguete para mí.

El PDP-8 fue la primera computadora basada en circuitos integrados, y en un solo chip había de 10 a 12 transistores, no 10 a 12 mil millones como en las máquinas modernas. Tenía un teclado y algo así como una pantalla, además de un teleimpresor con lector de cintas perforadas, alrededor de 4 kilobytes de memoria RAM y un procesador con una frecuencia de reloj de alrededor de una tercera parte de megahercios.

Fridman: ¿Qué programas escribías en Calgary y en qué lenguaje?

Gosling: Principalmente escribía en ensamblador. En el PDP-8 también se usaba el lenguaje Focal, una versión simplificada de Fortran. Recuerdo haber creado programas para juegos de blackjack, solitarios, funciones para construir gráficos.

Fridman: ¿Cuándo te diste cuenta de que realmente te habías enamorado de la programación? ¿Qué lenguaje te pareció el más bello?

Gosling: Nunca he pensado en qué lenguajes de programación podrían considerarse bellos. El valor de un lenguaje para mí no se define tanto por su sintaxis, sino por lo que se puede hacer con él. En esos días aprendí PL/1, Fortran, COBOL. Principalmente trabajaba con ensamblador y Fortran.

Fridman: Mencionaste a Lisp como uno de los lenguajes de programación más grandes.

Gosling: Sí, creo que Lisp es uno de los mejores lenguajes de programación que han existido. Pero no lo pondría en primer lugar, principalmente por la gran cantidad de paréntesis. Aunque hay que reconocer que esos paréntesis crean una estructura de lenguaje interesante, creo que hay versiones de Lisp más amigables.

Fridman: En aquel tiempo, algunos programadores usaban Simula, el primer lenguaje de programación orientado a objetos.

Gosling: Sí, Simula tuvo una enorme influencia en la programación. No solo era orientado a objetos, sino que en Simula 67 ya había corutinas y soportaba el paralelismo. ¡Era impresionante para la época!

Fridman: Regresando al mundo de Lisp, en CMU escribiste una versión de Emacs que resultó muy útil para el desarrollo de este editor. ¿Qué te motivó a hacerlo?

Gosling: Fue en 1985 o 1986. Trabajaba con Unix y usaba el editor Ed. Era decente, pero solo para entrada y salida de datos con un teleimpresor. Para otros usos no servía bien.

Pero Ed era más simple que el popular TECO de la época, un editor de texto en modo de comandos. Los comandos en TECO eran una secuencia de instrucciones que a menudo parecía un conjunto aleatorio de símbolos.

Originalmente, Emacs era un conjunto de macros para TECO. Las macros permitían llamar a comandos mediante combinaciones de teclas, facilitando el uso del editor. Más tarde, Emacs fue reescrito varias veces en Lisp, por ejemplo, el Multics Emacs escrito en MacLisp.

Un verano, me encargaron trabajar en un compilador Pascal para Multics. Usé Multics Emacs y vi que era un excelente editor. Al volver a CMU, donde trabajábamos con Unix, pensé que sería bueno tener una versión de Emacs para este sistema operativo.

Así que escribí una implementación de Emacs en C, porque en ese momento era el único lenguaje para trabajar con Unix. Trabajé en ello solo durante un par de meses, luego recibí ayuda de colegas de CMU. Pronto otros programadores externos también se unieron al proyecto a través de ARPANET.

Cuando trabajaba en la Universidad Carnegie Mellon, ARPANET era el centro de nuestra vida social. Era nuestra forma de comunicarnos, planificar comidas, citas, compartir noticias. Podríamos decir que era nuestra red social. Y cuando llegó Internet, no fue una novedad total para nosotros; solo era una expansión de ARPANET, aunque sus capacidades eran incomparables.

Fridman: Hiciste un gran trabajo creando Emacs. ¿Crees que podría haber sido más popular si no fuera por los problemas con el código abierto y las licencias?

Gosling: Soy un gran admirador del software libre y creo que puede usarse para construir comunidades de desarrolladores. El código abierto promueve el desarrollo del software, pero eso no debe convertirse en una religión que exija que todos publiquen sus fuentes.

No creo que cada ingeniero de software deba hacer un voto de pobreza. Aunque tampoco apoyo a quienes ganan miles de millones con patentes.

En cuanto a Emacs, tal vez si me hubiera dedicado a él por completo, habría ganado una fortuna. Pero en ese momento estaba en la escuela de posgrado y no quería abandonarla. No tenía tiempo para dedicarme a Emacs. Finalmente, lo pasé a otras personas (a la editorial United Press International) con la condición de que el editor fuera gratuito para escuelas, universidades y otras instituciones educativas.

Fridman: He oído que tienes una relación tensa con Richard Stallman.

Gosling: Sí, para él la idea de código abierto se convirtió en una doctrina. Me parece un extremismo. ¿Qué pasa con las miles de personas que trabajan en todo, desde películas hasta software? ¿También deberían hacer un voto de pobreza porque la información debe ser gratuita?

No quiero ser excesivamente rico, pero al menos quiero poder alimentar a mis hijos. Me entristece que el código fuente se cierre y los programas se vuelvan propietarios. Pero creo que se puede encontrar un equilibrio, como ganar dinero en el mantenimiento y soporte de software.

Fridman: Creaste Java, uno de los lenguajes de programación más populares que se usa en miles de millones de dispositivos. Cuéntanos la historia de su creación.

Gosling: Comenzó en 1991, cuando trabajaba en Sun Microsystems. Nos preocupaba que la industria informática no prestara suficiente atención a los aparatos domésticos: teléfonos móviles, equipos de audio y video, y otros dispositivos, aunque también tenían procesadores.

Muchos de esos dispositivos tenían controles individuales. A menudo en una casa se acumulaban numerosos controles para televisores, videocaseteras, sistemas de audio. Estudiamos muchos aparatos y decidimos crear un dispositivo que pudiera controlar toda la tecnología en el hogar.

Estaba a cargo de desarrollar el software para ese dispositivo. Primero intenté modificar C++ y su compilador: agregar algunas cosas y quitar otras. Pero luego entendí que necesitábamos un nuevo lenguaje.

La principal ventaja del software en C++ es su velocidad. Pero la fiabilidad era un problema, además del desperdicio de memoria. Los errores eran frecuentes con los punteros, y la fiabilidad era esencial para los dispositivos domésticos. Así que me dediqué a crear un nuevo lenguaje y lo llamé Oak, en honor a un roble que estaba afuera de mi ventana. Luego cambiamos el nombre a Java.

Fridman: Una de las cosas más interesantes que creaste fue la Máquina Virtual de Java. ¿Cómo se te ocurrió esta idea?

Gosling: Como mencioné, en los años 90 estábamos muy enfocados en los dispositivos domésticos. Estos dispositivos tenían microprocesadores de diferentes tipos. El software para un tipo de procesador no funcionaba en otros. Así que decidimos crear un programa que pudiera ejecutar código Java en cualquier procesador.

Fridman: ¿Cómo te atreviste a asumir una tarea tan compleja?

Gosling: Fue inspirado por una experiencia de verano en mi posgrado. En un departamento había varias estaciones de trabajo de 3RCC con software en bytecode UCSD Pascal (p-code).

Mi director de tesis propuso adaptar esos programas para máquinas con arquitectura VAX. Se pensaba que debía reescribirlos de Pascal a C. Pero decidí que sería más fácil traducir los programas de p-code a código ensamblador para las máquinas VAX. Y escribí un código de mejor calidad del que se habría obtenido con un compilador de C.

Cuando estábamos trabajando en la JVM, recordé aquella experiencia de verano y pensé que podríamos escribir varios traductores para diferentes tipos de procesadores. Así lo hicimos.

Por supuesto, hubo dificultades. Tuvimos problemas con la aritmética de enteros y operaciones de punto flotante, ya que se realizaban de manera diferente en distintos procesadores. Hubo problemas con redondeos, funciones trascendentes, entre otros. Pero gradualmente lo resolvimos.

Fridman: Me gustaría preguntarte sobre Android, a través del cual Java tiene un enorme impacto en nuestro mundo. ¿Estás contento con eso o te gustaría cambiar algo?

Gosling: Los programas en Java han funcionado exitosamente en teléfonos móviles durante muchos años. Pero el equipo de Android ha violado repetidamente los términos de los contratos y ha infringido la ley. No debieron hacerlo — se produjeron grandes juicios y la empresa sufrió pérdidas.

Fridman: ¿Qué consejo le darías a los jóvenes ingenieros de software?

Gosling: No tener miedo al riesgo. Cometer errores una, dos e incluso tres o cuatro veces está bien. Así se gana experiencia.

Categorizado en:

Java,