Elixir, 7 pasos para iniciar tu viaje

¡Hablemos de Elixir! Elixir es un lenguaje de programación funcional creado por José Valim para construir sistemas concurrentes y escalables: “a dynamic, functional language for building scalable and maintainable applications”.

15 min read

¡Hablemos de Elixir!

Elixir es un lenguaje de programación funcional creado por José Valim para construir sistemas concurrentes y escalables:

“a dynamic, functional language for building scalable and maintainable applications”.

https://elixir-lang.org/

Su primera versión fue liberada en 2012. Desde entonces, se le han agregado nuevas funcionalidades y mejoras hasta llegar a su versión actual. Se trata de un lenguaje de programación relativamente joven, pero bien establecido y que ha ganado aceptación rápidamente gracias a su sintaxis agradable y a que tiene una curva de aprendizaje corta. Elixir está respaldado por una tecnología que ha funcionado en sistemas reales desde los años ochenta, la BEAM.

Elixir corre sobre la máquina virtual de Erlang, la BEAM.

Más adelante profundizaremos en la máquina virtual. Por ahora, me gustaría mencionar algunas características que hacen de la BEAM una tecnología sólida y una gran opción para el desarrollo de sistemas:

  • Soporta simultáneamente millones de usuarios y transacciones.
  • Cuenta con un mecanismo para detectar fallos y te permite definir estrategias para recuperarse de ellos.
  • Te brinda los elementos necesarios para desarrollar sistemas capaces de operar sin interrupciones o, en su defecto, con el mínimo de ellas.
  • Posibilita hacer actualizaciones de un sistema en tiempo real, sin detenerlo y de manera “invisible” para los usuarios finales.

Elixir hereda estas propiedades de la BEAM. A esto sumamos que el lenguaje tiene una sintaxis muy agradable, es fácil de aprender, existen muchos recursos alrededor de él (como blogs y podcasts) y su comunidad es increíble. Entonces, crear un proyecto desde cero para practicar y aprender requiere muy poco tiempo y esfuerzo.

Conocí Elixir por casualidad en 2018. El proyecto con el que lo aprendí me hizo sufrir un poco, porque se trataba de un lenguaje totalmente diferente a los que había conocido hasta ese entonces (orientados a objetos). Una vez que descubrí todo lo que Elixir ofrecía, mi experiencia se volvió muy disfrutable. En algún momento del año pasado me pregunté qué hubiera pasado de no haberlo descubierto. 

¿Me hubiera llamado la atención en algún momento? ¿Es una opción recomendada para alguien que está aprendiendo programación? ¿Requiere experiencia previa? 

Así que pregunté a otros desarrolladores en Twitter: 

A continuación algunas respuestas:

Es difícil llegar a una conclusión definitiva, pues escoger este lenguaje de programación como primera opción o no dependerá de los gustos y la experiencia de cada quien. Algunas de las respuestas hablan sobre sus ventajas, y esos puntos positivos me motivaron a escribir esta serie.

Así que, sin más que agregar, bienvenido a Elixir, 7 pasos para iniciar tu viaje.

A lo largo de siete capítulos abordaremos la historia, los aspectos técnicos relevantes y por qué ha ganado popularidad rápidamente este lenguaje de programación. También te contaré cómo ha sido mi experiencia en los proyectos en los que he participado.

¿Qué temas cubrirá esta serie?

  1. La máquina virtual de Erlang, la BEAM
  2. Entendiendo procesos y concurrencia
  3. Bibliotecas y frameworks
  4. Pruebas y debugging 
  5. La comunidad de Elixir
  6. Programación funcional vs Programación orientada a objetos
  7. ¡Mi primer proyecto con Elixir! 

¿A quién está dirigida esta serie?

  • Personas sin experiencia en ningún lenguaje de programación que están en búsqueda de su primera opción para explorar. 
  • Personas con experiencia previa en otros lenguajes de programación que quieran experimentar con Elixir.

Nivel de dificultad: Principantes. 

Documentación oficial de Elixir: 

En cada capítulo te compartiré recursos para profundizar en los temas. Puedes encontrarme en Twitter como @loreniuxmr para aclarar cualquier duda o seguir con la conversación. Y también puedes utilizar los siguientes hashtags para conectar con otros desarrolladores: #MyElixirStatus y #Elixirlang

En la próxima nota hablaremos de la máquina virtual de Erlang, la BEAM, y por qué es tan relevante cuando hablamos de Elixir. ¡Nos vemos!

Bienvenido al primer capítulo de la serie “Elixir, 7 pasos para iniciar tu viaje”.

Sé que está serie promete hablar de Elixir y que seguramente estás aquí porque te gustaría saber más acerca de este lenguaje de programación pero antes de hablar de Elixir, necesitamos hablar de Erlang y su máquina virtual (VM), la BEAM.

La magia detrás de la concurrencia y escalabilidad de un sistema Elixir es gracias a está máquina virtual. El código Elixir que escribes corre en ella. Así que antes de profundizar en las características del lenguaje de programación, tenemos que entender algunos fundamentos.

La máquina virtual de Erlang, la BEAM

¿Qué es Erlang?

Erlang es una plataforma de desarrollo conformada por:

  • El lenguaje de programación con el mismo nombre, Erlang. 
  • El framework OTP. 
  • Una máquina virtual,  la BEAM (Bogdan / Björn’s Erlang Abstract Machine). 
  • Un conjunto de herramientas.

Es importante aclarar que cuando hablamos de Erlang podemos referirnos a la plataforma como tal o únicamente al lenguaje de programación. Si has trabajado con programación orientada a objetos, posiblemente esto te sea familiar, pues lo mismo sucede con Java: Java puede referirse a todo el ecosistema que incluye la JVM o solamente el lenguaje.

Para efectos de esta nota, cuando decimos Erlang, nos referimos a la plataforma a menos que se especifique lo contrario. Dicho eso, ahora si, hablemos un poco acerca de la historia de Erlang.

Erlang es una plataforma de desarrollo creada por Joe Armstrong, Robert Virding, y Mike Williams en los años 80’s en el laboratorio de Ciencias de la Computación de Ericsson, para facilitar el desarrollo de sistemas de telecomunicaciones.

Actualmente es una tecnología que se utiliza para desarrollar sistemas distribuidos, concurrentes, escalables y tolerantes a fallas. Aunque muchos términos hacen referencia a telecomunicaciones, es una tecnología de propósito general que ha demostrado su robustez en sistemas en producción, por más de 30 años.

Si lo piensas, la mayoría de los sistemas hoy en día requieren estas características: ser distribuidos, escalables, concurrentes y tolerantes a fallos, entre otras cosas. Además se espera que puedan recuperarse rápidamente de cualquier falla. Por ejemplo, WhatsApp. En las contadas veces que ha tenido problema, ¿cuánto tiempo pasa antes de que haya quejas en redes sociales? Generalmente los usuarios se quejan inmediatamente. Ahora imagina el margen de error para un sector más crítico como salud o la bolsa, donde hasta el más mínimo detalle puede tener graves consecuencias.

Por cierto, fun fact: WhatsApp utiliza Erlang. 

Pero seamos honestos, es imposible construir un sistema que este cien por ciento libre de errores. Pero lo que si podemos hacer, es definir un mecanismo de recuperación para que esos errores no inhabiliten totalmente el sistema. Esto es lo que nos brinda Erlang por default, todos los elementos necesarios para crear ese mecanismo y sistemas que:

  • Requieran un gran número de usuarios y soporten añadir más en caso de ser necesario.
  • Puedan detectar y recuperarse fácilmente de errores.
  • Siempre envíen una respuesta al usuario, incluso si hay un error interno. Esto es para evitar que se quede en un ciclo interminable o se pause, ya que eso representa incertidumbre para los usuarios.
  • PUedan ser actualizados sin necesidad de detenerlos o interrumpir actividades.
  • Distribuidos.

Y todo esto es gracias a la máquina virtual, la BEAM.

¿Qué es la BEAM?

La BEAM (Bogdan / Björn’s Erlang Abstract Machine) es la máquina virtual de Erlang, donde se ejecuta tanto el código de Erlang como de Elixir.

El código Elixir que escribes se compila a archivos bytecode que corren en la máquina virtual, estos archivos tienen la extensión .beam.

Erlang y Elixir no son los únicos lenguajes de programación que se ejecutan en la BEAM. Pero por ahora dejaremos eso de lado para enfocarnos en las características generales de la máquina virtual.

La relevancia de la BEAM radica en el hecho de que es responsable de que un sistema pueda cumplir con todas las características mencionadas anteriormente. 

  • Manejar la concurrencia y el paralelismo de un sistema.
  • Errores con un impacto mínimo al sistema.
  • Manejar un mecanismo de recuperación frente a esos errores.
  • Aprovechar al máximo los recursos de la computadora en la que se ejecuta el sistema.

Estas características se traducen en sistemas confiables, con alta disponibilidad, tolerantes a fallas, escalables y distribuidos.

¿Y dónde entra Elixir?

Elixir en la BEAM

Como mencionamos al inicio del post, Erlang es una plataforma conformada por cuatro elementos. Uno de ellos es el lenguaje de programación Erlang, con el que obviamente se puede escribir código que corra en la máquina virtual. Pero no es la única opción. Existen más lenguajes de programación, y uno de ellos es Elixir.

¿Por qué escoger Elixir? 

Erlang, el lenguaje, es compatible con código Elixir. Esto significa que lo que puedes escribir en Erlang puedes escribirlo en Elixir y viceversa, con la diferencia de que la sintaxis de Elixir y las herramientas se sienten mucho más amigables y accesibles–permitiendote escribir código más concreto, mantenible y limpio, además de tener una curva de aprendizaje corta.

Aunque por supuesto, dependerá del gusto y experiencias de cada persona. Las características de Elixir lo han hecho bastante popular entre desarrolladores, con muchos recursos disponibles en torno a el.

En resumen, con Elixir, puedes aprovechar todo el poder de la BEAM a través de un lenguaje de programación amigable, una comunidad fantástica y mucha documentación y tutoriales al alcance, permitiendote crear un proyecto desde cero con muy poco esfuerzo, y experimentar todas las cosas que te ofrece.

Todo esto es también gracias a los procesos de Erlang, un tema del que hablaremos en el siguiente capítulo.

Siguiente capítulo…

¡Ya sé! que tal vez te estás preguntando por el código. No te preocupes, veremos algunos ejemplos en la siguiente nota, hablaremos de los procesos de Erlang y como implementar concurrencia con Elixir.

Documentación y Recursos

Consejero técnico: 

¡Nos vemos en el siguiente capítulo!

Keep reading

Here’s Why You Should Build Scalable and Concurrent Applications with Elixir

In today's world, when dealing with high levels of system requests, you need applications that can handle them without slowing down. Here’s where Elixir comes in. Elixir is a programming language that is designed to create highly scalable and concurrent applications. Built on Erlang's virtual machine (BEAM), it has been used for decades to build highly reliable and scalable systems.

Here’s Why You Should Build Scalable Systems with Erlang

Building systems in the earlier days of the internet used to be pretty simple. While the system was admittedly pretty limited, the demand to scale past one or two servers

Presentamos el soporte de transmisión en RabbitMQ

¿Quiere saber más sobre el soporte de transmisión en RabbitMQ? Arnaud Cogoluègnes, ingeniero de personal de VMware, desglosa todo lo que hay que saber en la Cumbre RabbitMQ de 2021.