Entrevista con José Valim, creador de Elixir

José Valim: «Elixir es ideal para todo lo que se ejecuta sobre un socket»

Introducción

Evrone no es solo una empresa de desarrollo personalizado de software, sino que también mantenemos un estrecho contacto con comunidades locales e internacionales. Organizamos la conferencia anual RubyRussia, un evento multitudinario que cuenta con expertos invitados. Estas conexiones con la comunidad nos ofrecen una ventaja competitiva y nos proporcionan mejores conocimientos técnicos y oportunidades de asesoramiento. Tenemos conversaciones con desarrolladores de todo el mundo, como creadores de tecnologías nuevas e innovadoras, e intentamos reforzar las conexiones y devolver el favor a la comunidad mediante entrevistas, conferencias y reuniones. Hace poco entrevistamos a José Valim, el creador del lenguaje de programación Elixir, y le preguntamos sobre sus objetivos para el lenguaje y cómo llegó a concebirlo.

La entrevista

Evrone: Hola, José. ¡Es un placer tenerte hoy con nosotros! Empecemos con una breve presentación de lo que haces. Después de que Nubank adquiriera/contratara a Plataformatec, empezaste en Dashbit. ¿A qué te dedicas actualmente?

José: Hola, ¡gracias por invitarme! Me llamo José Valim y soy el creador del lenguaje de programación Elixir. A principios de año, fundé una nueva empresa llamada Dashbit. Nuestro objetivo es ayudar a otras empresas a adoptar y ejecutar Elixir en entornos de producción.

 

Evrone: ¡Genial! Hablemos un poco sobre la popularidad de los lenguajes y tecnologías. Hay distintas ideas sobre por los motivos por los que unas tecnologías son populares y otras no. Una de estas ideas es que muchas tecnologías son impulsadas por las denominadas «aplicaciones revolucionarias», como un majestuoso marco monolítico llamado Ruby on Rails para el lenguaje de programación Ruby. ¿Qué piensas sobre la idea de «aplicaciones revolucionarias» y «demostraciones revolucionarias»? ¿En qué medida son importantes las demostraciones «Phoenix» y «Crear un clon de Twitter en 15 minutos» para Elixir?

José: Creo que son útiles, pero no son factores determinantes. Si tienes una aplicación revolucionaria que puede recibir mucha atención en un breve período de tiempo, sin duda esto contribuirá a mejorar la adopción de la tecnología, pero no es un requisito por sí solo. Incluso aunque tengas una aplicación revolucionaria, no va a ser el único elemento que pueda sostener a toda la comunidad. Creo que Python es un buen ejemplo de cómo me gustaría que fuera un lenguaje de programación, ya que permite la diversificación.

Es importante para la comunidad crecer más allá de una aplicación revolucionaria, ser capaces de diversificar y acceder a distintos dominios. Este es el método que he usado para Elixir desde el principio. Tengo experiencia en desarrollo web y tuve mucho cuidado de no pintar Elixir en una esquina, donde se convirtiera en un lenguaje usado en exclusiva para el desarrollo web. Intento expandir el alcance del lenguaje. Hoy en día, al ver las aplicaciones creadas con Elixir, hay mucha gente que lo ha usado para la web, pero también hay otros usuarios que lo han usado para crear sistemas distribuidos. Esto es algo que heredamos de Erlang. Hay proyectos como Nerves, que usan Elixir en dispositivos insertados de una forma muy atractiva. Proyectos como Broadway y GenStage, que se centran principalmente en un procesamiento de datos eficiente. Me interesa más facilitar la diversificación, en lugar de intentar crear una aplicación revolucionaria que reciba toda la atención.

 

Evrone: Sí, claro. La diversidad de Python es legendaria. Con tantos lenguajes de programación, a los desarrolladores nos gusta etiquetarlos. Erlang suele etiquetarse como «lenguaje de telecomunicaciones», Clojure es un «Lisp moderno», etc. Si tuvieras que asignar una etiqueta corta al lenguaje Elixir, ¿cuál elegirías?

José: Si tuviera que asignar una etiqueta corta, diría que Elixir es ideal para todo lo que se ejecuta en un socket, como servidores web, dispositivos IoT, sistemas distribuidos, streaming de audio/vídeo, etc. Al hacer cualquier acción que dependa de la red, si tus datos entran y salen, Elixir será una opción excelente. Así que imagino que una etiqueta corta podría ser «lenguaje para la comunicación».

 

Evrone: ¡Es un buen argumento de venta para desarrolladores de software! La popularidad de un lenguaje se ve influenciada por la adopción de las grandes empresas. ¿Cuáles son los argumentos de venta de Elixir para este tipo de empresas? ¿Te importaría compartir algún caso de éxito con nosotros?

José: Al principio, sabía que tendría que hablar sobre el lenguaje, asistir a eventos, dar conferencias y escribir materiales. He estado haciendo eso desde entonces. Pero no creo que exista una respuesta específica para poder vender a grandes empresas. Se pueden adoptar distintos enfoques. Me considero afortunado porque he tenido cofundadores y socios que sabían moverse bien en un ámbito de ventas. Yo vengo del lado técnico y, cuando hay personas con experiencia en los negocios, se encargan del lado comercial, y juntos seguro que todo funcionará mejor. Por eso es importante recibir la opinión de todos. Nunca intentamos centralizar, ya que cada persona puede aportar una perspectiva distinta.

 

Evrone: Sí. Vender es difícil, así como asignar nombres. En realidad, nos encontramos por casualidad varias veces con una pregunta sobre el origen del nombre en los foros de Elixir. ¿De dónde proviene el nombre «Elixir»? Encontramos una referencia a Potion, el lenguaje creado por _why the lucky stiff. ¿Lo conoces? ¿Podrías revelar el origen de un nombre que suena tanto a juego de rol?

José: Solo conocía a _why the lucky stiff por el software que ha creado. Nunca lo he conocido en persona, participaba activamente en Ruby antes que yo. Bueno, el nombre de Elixir no está relacionado con Potion. Me gustó Elixir porque es breve, pero no demasiado. No se usa para nada más en programación. Hay libros y perfumes, pero nada técnico. Además, empieza con la misma letra que Erlang. Si hay algún tipo de lista alfabética, estará relativamente cerca de la parte superior. Es elegante y también tiene seis letras como Erlang. Así que me dije «¿por qué no?»

 

Evrone: Genial. ¿Cómo medirías la curva de aprendizaje para los desarrolladores que quieren aprender a usar Elixir? ¿Es un lenguaje adecuado para desarrolladores principiantes que solo tienen uno o dos años de experiencia? ¿Qué necesitan los nuevos desarrolladores para disfrutar al máximo del lenguaje que has creado?

José: Muy buena pregunta. Algunas personas pueden ser muy productivas y comprender rápidamente los conceptos, mientras que a otras les cuesta más. En mi opinión, creo que Elixir tiene un modelo mental que es más sencillo de comprender que la orientación a objetos, por ejemplo. Pero cada persona aprende y estudia de una forma distinta.

Siempre comparo esto con mi amigo Hugo (Hugo Baraúna). Nos conocimos en la universidad y tenemos dos métodos de aprendizaje completamente distintos. Yo soy más el tipo de persona que me metería en una cueva prácticamente sin ninguna fuente de iluminación e intentaría explorar para ver si llego a algún sitio. Soy un alumno impaciente. En cambio, Hugo es una persona muy estructurada. Si tiene que explorar una cueva, antes necesitaría proveerse de una lámpara específica y todas las herramientas adecuadas. Crearía estructuras de todo antes de avanzar ni siquiera un paso.

Sé que hay gente que ha intentado enseñar Elixir a personas que no tenían ninguna experiencia en programación. Y han tenido éxito. Hay gente que proviene de JavaScript, Python, Ruby, .NET, Java, etc., que les gusta mucho y son productivos. En cambio, a otros les resulta complicado. He escuchado a algunos que intentan aprender a usar Elixir por segunda o tercera vez, después de no conseguir un progreso específico la primera vez. La segunda vez, resulta un poco más fácil. Después, solo necesitan una vez más para que todo tenga sentido.

La buena noticia es que nos encontramos en un momento en el que hay una gran cantidad de recursos de aprendizaje en la comunidad. Si eres un programador nuevo, es probable que las guías de introducción en el sitio web de Elixir avancen demasiado rápido y no profundicen. Pero tenemos libros adecuados para principiantes, como Introducing Elixir, de O'Reilly y Joy of Elixir de Ryan Bigg. Programming Elixir es un buen recurso para usuarios que provienen de lenguajes dinámicos, como Ruby, Python o JavaScript.

Elixir in Actionde Saša Juric, explica cómo enseñar Elixir desde una perspectiva de sistemas. No explica el uso de Elixir como un lenguaje de programación, sino Elixir como herramienta para desarrollar sistemas. También hay presentaciones, cursos en línea, etc. Si eres como yo, que no tiene mucha paciencia para leer y simplemente te gusta probar cosas, hay muchos lugares donde puedes realizar ejercicios prácticos. Como tenemos tantos recursos, puedes probar un par de ellos y ver cuál te funciona mejor.

 

Evrone: Sabemos que Elixir se inspira en Ruby, Clojure y Haskell. En retrospectiva, ¿hay algo más que te sirvió de inspiración?

José: Sí. Los tres principales fueron Ruby, Erlang y Clojure. No solo implementamos características de esos lenguajes, sino que también coincidimos con su filosofía. Heredamos toda la infraestructura de Erlang. En relación con Clojure, compartimos formas similares de afrontar algunos problemas, como los protocolos. Y Ruby es similar en cuanto a la sintaxis, las bibliotecas estándar y la forma en que asignamos nombres a los objetos. De esos tres lenguajes principales, obtuvimos ideas para características, pero también ideas sobre la filosofía y cómo debería ser un lenguaje de programación. Usamos un poco de todo, de Haskell, Python y F#.

 

Evrone: Los entrevistadores siempre preguntan cuál es el mayor éxito y el mayor fracaso de diseño de un lenguaje. Pero, según nuestra experiencia, creemos que es mucho mejor preguntar simplemente sobre casos de éxito de diseño. ¿Cuál ha sido el mayor éxito de diseño de Elixir?

José: Muy buena pregunta. Cuando empecé a desarrollar Elixir, diseñé un prototipo que tenía muchos fallos. Era el tipo de persona que se perdía en la cueva, con muy poca luz, lanzando cosas para ver lo que servía. Después de fracasar, obtuve la idea de lo que quería conseguir con el lenguaje. El punto inicial era Erlang, y quería crear Elixir sobre este punto.

Tenía dos objetivos: extensibilidad y productividad. El objetivo de la productividad era centrarse en tener herramientas muy buenas. Hay otros lenguajes, como Ruby, que se centran en las herramientas y en la experiencia de desarrollo. Y un ejemplo muy reciente es Go, que tiene un énfasis especial en ofrecer herramientas muy buenas desde el principio. La extensibilidad se reducía a dos aspectos. Uno eran los protocolos. El problema con los protocolos es el polimorfismo. He analizado cómo distintos lenguajes intentan solucionar este problema. Clojure soluciona este problema de una forma que se adaptaría mejor a la máquina virtual de Erlang. Así que adopté ese método.

Otro factor de la extensibilidad era la metaprogramación. Probé varios métodos para implementar la metaprogramación en Elixir. Al principio, el modelo se basaba en Ruby. Pero Ruby intenta cambiar de forma dinámica los objetos en tiempo de ejecución, y eso no funcionaba para la máquina virtual de Erlang. Después de compilar el código, lo que quieres es que el código siga siendo estático.

Después, probé con lenguajes de Lisp, como Clojure, cuya metaprogramación se basa en el árbol de sintaxis abstracta (AST). Disfruté mucho con la experiencia, pero no quería implementar Lisp. Ese camino ya estaba muy trillado y varias personas habían hecho lo mismo para la máquina virtual de Erlang. Quería hacer algo distinto. Así que me decidí por introducir una sintaxis de mayor nivel, con una representación de AST sencilla que los desarrolladores pudieran usar para crear metaprogramas. Y, por un tiempo, ¡pensé que ese había sido mi mayor éxito de diseño!

Sin embargo, más tarde supe que John McCarty, el inventor de Lisp, ya había pensado en eso. Y creó SLisp, que es básicamente lo que todo el mundo denomina hoy en día Lisp. Y también introdujo MLisp, una sintaxis de mayor nivel. Así que mi idea en realidad tenía 50 años, pero creo que Elixir es uno de los pocos lenguajes que la ponen en práctica.

Así que imagino que podría decir que mi mayor éxito de diseño fue buscar lo que podría funcionar en la máquina virtual de Erlang de la forma más coherente.

 

Evrone: Elixirforum.com es muy popular. Desde tu punto de vista, ¿en qué sentido crees que es único este recurso para la comunidad de Elixir? ¿Crees que marca la diferencia tener tu propia plataforma de la comunidad, en comparación con otros lenguajes y ecosistemas que usan listas de distribución de correo, grupos, Reddit y Stack Overflow? ¿Cómo se creó? ¿En qué medida es importante para el desarrollo del lenguaje?

José:  Siempre he intentado que Elixir sea un esfuerzo de la comunidad. No he intentado centralizarlo, quería darle a todos espacio o la oportunidad para marcar la diferencia, crear sus propias contribuciones e implicarse de la forma en que quisieran. Tenemos muy pocos espacios oficiales controlados por el equipo de Elixir. Así que siempre hemos acogido a todas las personas que querían crear sus propios espacios.

Incluso hay barreras idiomáticas. Por ejemplo, sé que hay una importante comunidad brasileña de Elixir en Telegram. Por lo tanto, es más importante dejar que esos espacios se desarrollen por su cuenta y lo hagan de una forma saludable y que sea coherente con los estándares y objetivos que tenemos para la comunidad.

Con el foro de Elixir ocurrió algo similar. Aston creó el foro, y es genial tener un nuevo espacio. Él fue quien consiguió que creciera y se convirtiera en lo que es hoy en día. Es uno de los sitios que visito de vez en cuando para ver si hay algo con lo que puedo ayudar. Aunque no deja de ser otro sitio más de la comunidad, y hay muchos.

 

Evrone: Es increíble. ¿Qué IDE recomendarías usar a los desarrolladores de Elixir?

José: Bueno, no le doy mucha importancia al editor que uso. Diría que he usado TextMate 1.0 durante más o menos una década, incluso después de que dejara de mantenerse. Tan solo dejé de usarlo cuando el nuevo sistema operativo ya no era compatible. Entonces, migré a Sublime Text, pero no uso muchas de las características del editor. Tengo una tecla de acceso rápido para dar formato al código, pero eso es prácticamente todo. Conozco a mucha gente que usa Visual Studio Code por Elixir Language Server. Hay muy buenos desarrolladores que trabajan en Language Server y consiguen que la integración sea cada día mejor. Así que ese parece ser el tipo de preferencia general.

 

Evrone: Genial. La siguiente pregunta es técnica. ¿Qué piensas sobre el nuevo paradigma «async», en comparación con la «transmisión de mensajes»? Sin tener en cuenta los problemas de estabilidad y el rendimiento, ¿cuál crees que es mejor para la mente de un desarrollador?

José: El problema con «async/await» es que se implementan de forma distinta en cada lenguaje. Algunos implementan «async/await» porque quieren proporcionar simultaneidad basada en E/S. Otros no, y es necesario realizar este tipo de distinción. Así que es mejor dar un paso atrás.

Al hablar sobre nuestro software, hay dos tipos de simultaneidad que debemos tener en cuenta: la simultaneidad basada en CPU y la simultaneidad basada en E/S. Los lenguajes como Erlang y Go demuestran que no es necesario que «async/await» tenga una simultaneidad basada en E/S. Es completamente innecesario. Desde esa perspectiva, no me gusta el modelo de «async/await» cuando se usa para proporcionar la simultaneidad basada en E/S, ya que no es necesaria. Esto acrecienta las dudas basadas en E/S en relación con el software, y es lo que hace que mi vida sea más complicada, en lugar de hacerla más fácil. Porque eso es algo que el lenguaje tendría que haber solucionado, y no debería obligarme como desarrollador a solucionarlo. Por otra parte, Elixir tiene un modelo de «async/await», pero es simplemente una función útil para la simultaneidad basada en CPU.

Quiero ampliar esto, ya que es el motivo por el que me emocioné con Erlang. El motivo por el que me enamoré de Erlang es que, mientras todos intentan dar solución a la simultaneidad, Erlang usa la misma abstracción para proporcionar simultaneidad y también distribución. Puedo tener dos entidades que se ejecuten en máquinas distintas, y se pueden comunicar entre sí. Esta misma abstracción también proporciona un modelo para pensar sobre errores y la tolerancia a errores. En relación con la E/S, no es necesario escribir devoluciones de llamada ni invertir el flujo de control: el entorno de ejecución se encarga de todo automáticamente.

Eso es lo que realmente me entusiasma de Erlang. Es una extensión del modelo de actor. Es el modelo de actor, pero con tolerancia a errores. Es algo que encapsula varios elementos y, como desarrollador, me permite tener menos cosas en mi cabeza. No tengo que aprender a usar distintas herramientas o modelos válidos para aplicar un concepto específico. Tengo una única abstracción que lo controla todo, y creo que es una solución muy elegante.

 

Evrone: ¿Cuál crees que sería el mejor de los casos para el futuro de Elixir? ¿Cómo te imaginas que será el lenguaje dentro de 10 años, si todo va bien?

José: No suelo pensar en eso. Crear un lenguaje de programación es un gran esfuerzo, y muchos de esos esfuerzos fracasan. En cierto sentido, también sabía que sería una gran inversión de tiempo y dinero. No quería generar una gran expectativa porque, si no funcionaba, sería como decir lo siguiente: «Vaya, ha fracasado… Pero es normal, era lo que se esperaba». Así que eso fue lo que hice al principio. Pero me esforzaré al máximo. Quería crear un lenguaje diverso que no dependiera de una única aplicación revolucionaria, sino que tuviera distintas áreas y dominios con los que el lenguaje pudiera funcionar. Y quería tener una comunidad abierta.

Después de todos estos años, mi plan a largo plazo sigue siendo prácticamente el mismo. Y aún me intereso por ver cómo el lenguaje puede diversificarse en nuevos dominios.

Por ejemplo, ocurren muchas cosas con el aprendizaje automático, y creo que sería increíble que Elixir formara parte de eso. En el aprendizaje automático, cuando quieres reconocer si algo es un perro o un gato, no se usa una única pregunta-respuesta del tipo «ah, esto es un perro o es un gato». Hay que dividir la pregunta en varias propiedades. ¿Tiene orejas el gato? ¿Tiene hocico el perro? Así que lo que tienes que hacer en realidad es tener aprendizaje distribuido, con distintos nodos para centrarte en características específicas y, al final, llegar a una conclusión específica.

Esto sería fantástico para Elixir. Porque el lenguaje es muy eficaz en este tipo de aprendizaje distribuido y simultáneo, donde tienes que coordinar muchas cosas que ocurren al mismo tiempo.

 

Evrone: Si pudieras retroceder en el tiempo y darle un único consejo técnico a tu yo más joven cuando empezaste a desarrollar Elixir, ¿cuál sería?

José: Para serte sincero, no lo sé. No quiero decir que no tenga ningún consejo, pero los viajes en el tiempo son muy complicados. ¿Y si viajo en el tiempo, doy el consejo y, por error, le enseño a mi yo más joven a estropearlo todo? ¿Cómo puedes estar seguro de que, si vuelves al pasado y lo cambias, el resultado será mejor o peor? A veces, hay cosas que es mejor aprenderlas por las malas.

 

Evrone: Cierto. ¿Qué lenguajes crees que son competidores de Elixir y por qué?

José: En general, diría que otros lenguajes dinámicos. Pero, si analizamos cada dominio específico en el que se usa Elixir, podría tener un competidor distinto. Si hablamos sobre la web, obviamente será JavaScript o Ruby. En relación con el procesamiento de datos, es más probable que compitamos con JVM. Pero, en general, diría que otros lenguajes dinámicos porque, dadas sus propiedades, los lenguajes dinámicos suelen parecerse.

 

Evrone: Trabajas mucho en el lenguaje, su ecosistema y la comunidad. ¿Qué haces para conciliar la vida laboral y personal sin llegar a quemarte?

José: Hay muchos aspectos relacionados. Mi principal consejo es apagarlo todo, como si tu ordenador siempre estuviera en el modo «no molestar». De esa forma, puedes centrarte y mantener la integridad. La consecuencia de trabajar desde casa es que las personas lo hacen todo en remoto y dependen cada vez más de una forma de comunicación en línea. Soy muy proactivo al intentar reducir la cantidad de cosas que necesitan mi atención. Si hay información importante, probablemente me llegará de una u otra manera, así que no me preocupo.

Por ejemplo, antes estaba muy activo en Twitter, pero más tarde decidí eliminar Twitter de mi vida. Solía seguir a mucha gente que me proporcionaban conocimientos porque publicaban tuits sobre novedades. Me preocupaba que, después de abandonar Twitter, ya no pudiera recibir esa información. Pero, en realidad, todo sigue igual.

He trabajado en remoto durante más de una década. Cuando llegó el 2020, muy poco cambió para mí. Tampoco tengo notificaciones en el teléfono porque, de lo contrario, me resultaría muy fácil distraerme. Sales con los amigos y, de repente, aparece una notificación y quieres mirarla. Intento no tener cosas que me distraigan o que vayan a desviar la atención sobre lo que estoy haciendo y lo que se supone que tengo que hacer en cada momento.

Evrone: ¡Es un consejo realmente útil! Ha sido un placer hablar contigo. ¡Gracias!

Conclusión

Hemos disfrutado hablando con José aprendiendo sobre su método para crear Elixir y cómo desarrolló del lenguaje. También nos gustaría dar las gracias a Ruby Conf Taiwan por la imagen usada en este artículo. En Evrone, usamos Elixir con frecuencia para crear soluciones personalizadas que se adapten a las necesidades únicas de nuestros clientes. Nos encanta poder aprender de un creador de tecnología, ya que refuerza nuestra experiencia y nos proporciona más herramientas que podemos usar para desarrollar productos nuevos e innovadores. Si tiene una idea para un proyecto que se beneficiaría de Elixir, estaremos encantados de ayudarle. Díganos cómo ponernos en contacto con usted y le ayudaremos a hacer realidad su proyecto.

 

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.