Entrevista con Rob Pike

Entrevista con Rob Pike: «Go se ha convertido en el lenguaje de la infraestructu

Introducción

Hablamos con Rob Pike, coautor del lenguaje de programación Go, sobre una trayectoria profesional que abarca cuatro décadas, y sobre la evolución de Go en los últimos 10 años y en el futuro.

La entrevista

Evrone: Al contrario que muchos desarrolladores actuales, empezaste hace décadas en Bell Labs. Dada tu peculiar perspectiva, ¿cuál crees que ha sido en tu opinión el cambio más importante en la forma en que desarrollamos software?

Rob: La escala es mucho mayor en la actualidad. No solo los equipos y la red, sino los programas en sí. La versión 6 completa de UNIX (desarrollada aproximadamente en 1975) puede guardarse sin problemas en un único paquete de discos RK05, cuya capacidad es de poco más de 2 MB, con una gran cantidad de espacio restante para el software del usuario. Y ese era un entorno informático bastante bueno, o por lo menos eso parecía por aquel entonces. Aunque podría explicar una gran parte del crecimiento, es asombroso y quizás no todo quedaría justificado.

 

Evrone: Dadas las ideas de «resistencia al cambio» y «promesa de compatibilidad», ¿cómo crees que serán los próximos 10 años para el lenguaje de programación Go y su ecosistema? ¿Cuál es el mejor futuro que visualizas para tu tecnología?

Rob: Aunque no es totalmente seguro, después de más de una década de trabajo, parece un diseño de polimorfismo paramétrico, lo que coloquialmente se denomina (de forma engañosa) genérico, y estará disponible dentro de uno o dos años. Ha sido muy complicado encontrar un diseño que funcione en el lenguaje existente y que parezca que pertenece a este, pero Ian Taylor ha dedicado una gran cantidad de energía a solucionar el problema y parece que la respuesta está por fin a nuestro alcance.

Resultará fascinante ver cómo afectará eso a las bibliotecas, el ecosistema y la comunidad.

 

Evrone: Con la introducción del «tipado gradual» en los lenguajes de «tipado dinámico» y la «inferencia de tipos» en «tipado estático», la línea entre ambos se desdibuja. ¿Cuál es tu opinión sobre un sistema de tipos para un lenguaje de programación moderno?

Rob: Soy un gran entusiasta del tipado estático debido a la estabilidad y seguridad que proporciona.

Soy un gran entusiasta del tipado dinámico por la diversión y sentimiento ligero que proporciona. (Como nota al margen, el gran impulso de las pruebas unitarias integradas puede atribuirse a lenguajes como Python, que impulsaron las pruebas para demostrar la corrección que el sistema de tipos no pudo proporcionar).

No soy un gran entusiasta de la programación controlada por tipos, las jerarquías de tipos y las clases y herencias. Aunque muchos proyectos de gran éxito se han diseñado de esta forma, creo que este método obliga a tomar decisiones importantes demasiado pronto en la fase de diseño, antes de que la experiencia pueda afectarlo. Es decir, prefiero la composición a la herencia.

Sin embargo, esto es lo que digo a que aquellos que se sienten cómodos con la herencia para estructurar sus programas: no prestes atención y sigue usando lo que funcione para ti.

 

Evrone: A veces, la gente usa la tecnología de formas poco habituales. Por ejemplo, para generar código de Go eficiente a partir de código de alto nivel de Python o Ruby (sí, eso ha ocurrido). A lo largo de los años, ¿cuáles el uso más extraño, creativo o divertido de Go que has visto? ¿Qué es lo que más te ha sorprendido?

Rob: La mayor sorpresa fue cuando averigüé que Go se estaba usando para escribir malware. No puedes controlar quién usará tu trabajo ni lo que harán con él.

 

Evrone: Has creado varios editores de texto. ¿Qué piensas sobre Visual Studio Code? Con tecnologías como LSP, parece que la línea entre “editor de texto” e IDE se desdibuja. ¿Crees que los desarrolladores de software necesitan IDE completos, como GoLand? ¿O crees que es suficiente con usar VS Code?

Rob: Pertenezco a otra época, antes de que existieran los IDE, pero mantuvimos una conversación cuando empezamos a desarrollar el proyecto para determinar si Go necesitaba un IDE para tener éxito. Ningún miembro del equipo tenía el conjunto de habilidades adecuado, así que no intentamos crear uno. Sin embargo, creamos bibliotecas principales para analizar e imprimir código de Go, que pronto permitieron crear complementos de alta calidad para todo tipo de editores e IDE, y ese fue sin duda un gran éxito.

Recientemente, hemos trabajado duro en un servidor de LSP para Go denominado gopls, que puede usarse con cualquier editor o IDE que admita ese protocolo para mejorar la experiencia de trabajar con el lenguaje.

Tal vez debido a que nos sentimos cómodos trabajando con estilos de editores más sencillos, nos hemos asegurado de que cualquiera pueda trabajar fácilmente en Go sin tener que hacer trabajo pesado desde el entorno de programación. Pero un IDE sin duda puede resultar útil: la mayoría de los que veo trabajar en Go hoy en día usan uno, o por lo menos un editor con una compatibilidad personalizada con Go, y lo aprovechan en gran medida.

La pregunta sobre qué estilo de editor usar es cuestión de gustos, y depende también de la cultura del lenguaje con el que trabajes.

 

Evrone: A los desarrolladores de software les gusta etiquetarlo todo; por ejemplo, se dice que Dart es un «lenguaje de front-end», que C es un «lenguaje de bajo nivel del sistema», etc. ¿Qué etiqueta aplicarías al lenguaje de programación Go actualmente, basándote en su uso y conjunto de características?

Rob: Go es un lenguaje de programación de uso general. Puedes escribir lo que quieras sin preocuparte de forzar el lenguaje (o cualquier otra tecnología para esa finalidad) a un único dominio problemático.

 

Evrone: ¿Qué otros lenguajes de programación modernos te gustan?

Rob: La experiencia de Go me ha enseñado que a todo el mundo le gusta opinar sobre distintos lenguajes, quizás más que sobre cualquier otro elemento de nuestro campo. Y sin duda es algo que he hecho yo mismo. Pero estoy cansado de la negatividad que suele generarse, así que ahora intentaré evitar juzgar a otros.

Se ha producido un auténtico renacimiento en el diseño de lenguajes en los últimos 10 años, después de un período en el que muy pocos nuevos lenguajes se creaban y tenían éxito. Es genial ver esto y la innovación que trae.

 

Evrone: ¿En qué sentido te ha ayudado ser empleado de Google a desarrollar y guiar el lenguaje Go? ¿Qué grado de importancia tiene poder preguntar «dinos cómo usas nuestro lenguaje» en Twitter y recibir respuestas de las empresas más importantes de todo el mundo? ¿Es simplemente un detalle bonito o una parte esencial del desarrollo del lenguaje? ¿En qué sentido te ayuda Google?

Rob: Google ha sido muy generoso con toda la ayuda que ha aportado al proyecto de Go, por lo que estoy muy agradecido. Y, por supuesto, el lenguaje se creó porque pensé que Google lo necesitaba; lo que se convirtió en la «informática en la nube» necesitaba un lenguaje con buena compatibilidad con procesos simultáneos y una implementación sencilla, entre otros aspectos. Pero Google no ha dirigido el proyecto de ninguna forma significativa. Nos ayuda y nos deja hacer lo que pensamos que es más adecuado.

En relación con otras empresas y usuarios, las opiniones de la comunidad son esenciales para comprender cómo avanza el proyecto (es decir, el lenguaje, el compilador, las herramientas, el entorno de ejecución, la biblioteca… En definitiva, todo).

 

Evrone: Después de 10 años desarrollando Go y observando cómo se usa, ¿cuál crees que es el mayor éxito de diseño y también el mayor fracaso del lenguaje? ¿Sus puntos más fuertes y débiles, respectivamente?

Rob: Me gustaría mencionar dos aspectos: uno técnico y otro político.

El aspecto técnico es la compatibilidad de primer nivel con la computación simultánea. Go se creó hace solo una década más o menos; pero, cuando se estaba desarrollando, los «subprocesos» y la simultaneidad no eran ampliamente apreciados en la comunidad de programadores. De hecho, uno de los motivos principales para la creación de Go fue la dificultad de generar computación simultánea en C++ en aquel momento. Poco después del lanzamiento, quedó claro que la compatibilidad de la simultaneidad era un atractivo importante que compensaba lo que algunos pensaban que eran debilidades en otras partes del lenguaje. La simultaneidad caló hondo. Y, una vez los desarrolladores practicaron con la simultaneidad, empezaron a explorar otros aspectos del lenguaje y se dieron cuenta de que podía ofrecer mucho más de lo que pensaron en un principio. La compatibilidad con la simultaneidad fue la puerta de acceso.

Como John Graham-Cumming de Cloudflare afirma, "«vine por la facilidad de la simultaneidad y me quedé por la facilidad para la composición».".

Go ha cambiado la conversación sobre cómo programar equipos multinúcleo.

El éxito político fue la firme promesa realizada sobre la compatibilidad con la versión 1 de Go. Después de usar Go durante varios años, tanto nosotros como la comunidad teníamos una larga lista de aspectos que queríamos corregir, pero el cambio siempre conduce a interrupciones. Así que realizamos una cuidadosa programación de las actualizaciones, con el comando «go fix» para atraer a la comunidad y, una vez hecho esto, no solo paramos, sino que prometimos que nos quedaríamos quietos. Dicha estabilidad permitió un gran crecimiento (ten en cuenta que los programas de Go escritos en 2012 aún se compilan y ejecutan a la perfección hoy en día). Las empresas pueden usar el lenguaje con la seguridad de que no causará errores en su software. La tasa de adopción se incrementó drásticamente después de la versión 1 y cuando apareció la promesa de la compatibilidad. Y, aunque hemos aprendido muchas cosas que nos gustaría cambiar, no podemos acabar con los programas existentes, y eso nos parece bien.

 

Evrone: ¿Cómo consigues conciliar tu vida laboral y personal? Se habla mucho sobre programadores «quemados», y toda la situación de la pandemia no ha ayudado en absoluto. Basándote en tu experiencia de 40 años, ¿tienes algún consejo para las nuevas generaciones de desarrolladores?

Rob: La mejor forma de evitar quemarte es hacer algo que realmente disfrutas en un entorno en el que te sientas apoyado. He tenido mucha suerte en ese sentido a lo largo de toda mi vida laboral, pero me doy cuenta de que no todos son tan afortunados. Si te sientes estresado por el trabajo, debes tener la libertad de tomarte un descanso o cambiar la dirección, especialmente en la situación actual.

 

Evrone: En retrospectiva, la popularidad de un gran número de tecnologías se atribuye a las denominadas «aplicaciones revolucionarias» que las hicieron populares. ¿Podrías mencionar algunas de estas «aplicaciones revolucionarias» para el lenguaje de programación Go y qué piensas de esa idea de «aplicación revolucionaria» en su conjunto?

Rob: Hace unos años, Danny Berkholz denominó a Go como «el lenguaje emergente de la infraestructura de nube», y no fue por error. Go fue diseñado por gente que trabajaba en Google para que resultara más fácil escribir software relevante para Google (en concreto, servidores que residen en la red). Esto es lo que hoy en día llamamos la «nube». (Una parte de la motivación para el diseño se explica en mi presentación de Splash de 2012: Go at Google: Language Design in the Service of Software Engineering.)

Por lo tanto, aunque ha sido gratificante e importante ver cómo Docker, Kubernetes y otros componentes de la informática en la nube se han escrito con Go, quizás no resulte del todo sorprendente. De hecho, Go se ha convertido en el lenguaje de la infraestructura de nube.

 

Evrone: ¿Cuáles crees que son los competidores del lenguaje de programación Go ahora mismo y en qué áreas? ¿Cuál es tu opinión sobre Rust, con sus ideas de «sin recolección de elementos no utilizados» y las garantías en tiempo de compilación?

Rob: Rust es un lenguaje curioso y observo su desarrollo con cierto interés. Aparte de eso, como ya indiqué anteriormente, no daré mi opinión al respecto.

 

Evrone: ¡Go acaba de conseguir 70 000 estrellas en GitHub! ¿Cómo crees que afectan al lenguaje las distintas actividades sociales como GitHub, Reddit, Twitter, conferencias en línea y presenciales, seminarios web, etc.? ¿Son importantes para el éxito del lenguaje o son simplemente un reflejo?

Rob: La gente que he conocido a través de conferencias y redes sociales han sido una parte esencial del desarrollo de Go y de todos sus elementos. Muchos colaboradores han contribuido al desarrollo de formas positivas, como la portabilidad original a Windows y un gran número de arquitecturas distintas de x86, el desarrollo de herramientas y bibliotecas, debates fundamentados sobre propuestas técnicas, y mucho más.

Y también ha ocurrido al revés, ya que el equipo de Go se ha dirigido a la comunidad para iniciar debates, plantear preguntas y pedir ayuda y directrices.

Creo que es muy importante interactuar con la comunidad como una única voz, hablar como equipo, en lugar de como individuos. Un mensaje coherente es más fácil de comprender.

 

Evrone: ¿Cómo ha cambiado tu vida por ser el autor de uno de los lenguajes de programación más populares?

Rob: Una pequeña corrección: soy coautor, no el autor. Ken Thompson y Robert Griesemer iniciaron el proyecto conmigo, y muchos otros han contribuido en gran medida. Por lo tanto, preferiría que no te refirieras a mí como «el autor».

Para responder a tu pregunta, no hay duda de que Go ha mejorado mi perfil público y me ha permitido conocer a una nueva comunidad llena de vida; sin embargo, no ha tenido un efecto mucho mayor aparte de eso. He tenido una larga trayectoria profesional con otros éxitos (e innumerables fracasos).

 

Evrone: Imagina que pudieras viajar al pasado y darle un único consejo a tu yo más joven, más o menos en el momento en el que empezaste a diseñar las especificaciones del lenguaje Go. ¿Qué consejo le darías a tu yo más joven y a tus compañeros?

Rob: Muy fácil: no hagas caso a las personas críticas. Solo escucha las voces que comprenden y comparten tus objetivos; esos son los que tienen que importarte. No todo el mundo está de acuerdo con lo que haces, y no pasa nada. Sin embargo, aquellos que se implican para ayudarte en lo que intentas conseguir pueden ser una fuente increíble de ideas, energía e inspiración.

Siempre estaré agradecido a nuestra apasionada comunidad.

 

En Evrone, estamos orgullosos de usar la mejor herramienta para cada tarea, ya sea Ruby on Rails, Python, Elixir o, por supuesto, Go. Nos esforzamos por seguir al frente en una gran variedad de tecnologías para proporcionar las mejores soluciones que se adapten a las necesidades de nuestros clientes, y estamos encantados de hacer todo lo posible por reunir a comunidades de desarrolladores.

 

Contacto
¿Tiene algún proyecto en mente?
Vamos a hacerlo realidad
Adjuntar archivo
Los archivos deben ser menores que 8 MB.
Tipos de archivo permitidos: jpg jpeg png txt rtf pdf doc docx ppt pptx.
Este sitio está protegido por reCAPTCHA y se aplican las Condiciones del servicio y la Política de privacidad de Google.