May 16, 2018

¿Qué es Elixir?

Elixir es un excelente lenguaje de programación funcional, orientado al desarrollo de infraestructura concurrente y robusta.

Para todos aquellos que estamos interesados en el mundo del desarrollo de software, es muy probable que hayamos escuchado sobre Elixir. Sin embargo, por distintas situaciones, la mayoría de los desarrolladores no le han dado la debida importancia a esta herramienta tan poderosa.


Elixir es un lenguaje de programación creado en el 2011 por José Valim. Según su página en internet, lo describen como un …lenguaje dinámico y funcional diseñado para construir aplicaciones escalables y mantenibles. Pero, ¿qué significa esto? Y, ¿qué tiene de diferente este lenguaje con respecto a todos los demás? Para responder estas preguntas, voy a analizar punto por punto ciertos elementos que según mi parecer, son los más destacables del ecosistema de Elixir.

Let it crash!

Este es uno de los postulados más importantes de Elixir.

Hace una semana estaba viendo las diapositivas de una conferencia que dio Fred Herbert titulada “The Zen of Erlang”. Si me pidieran que lo resuma, lo haría de la siguiente manera.

Toda aplicación va a fallar en algún momento, pero si sabemos hacer que nuestro sistema falle inteligentemente, entonces dejemos que eso suceda.

Si no lo sabes, Elixir es un lenguaje que utiliza la máquina virtual de Erlang (similar a cómo Kotlin utiliza la máquina virtual de Java); por lo que todos los fundamentos sobre los que desarrollamos nuestros sistemas en Elixir, tienen su base en aquel lenguaje de programación que ha existido por más de 30 años.

Por otro lado, una forma de notar claramente la intención del lenguaje en cuanto a sistemas que toleren fallos sin problemas, es dando un vistazo a la librería estándar. Ahí mismo podrás encontrar distintos elementos que han sido creados para monitorear y proteger la integridad de todos los procesos que ejecutamos, tales como los Supervisor.

Son pocos los lenguajes que incluyen como parte de su núcleo tales herramientas para desarrollar sistemas distribuidos tan robustos y resistentes a fallos. Todo eso en conjunto, hace de Elixir una excelente opción cuando se trata de construir infraestructura que esté funcionando 247, con una enorme cantidad de tráfico.

Logo de Elixir.
Logo de Elixir.

Extensibilidad

La sintaxis de Elixir está basada en el lenguaje Ruby, por lo que muchos conceptos fueron tomados de ahí, incluyendo la metaprogramación. Para aquellos que no saben lo que es metaprogramación, podemos definirla como “código que genera más código”.

Esto es algo muy sencillo y muy común de realizar en Elixir, gracias a que es un lenguaje compilado (a bytecode). De esta forma, el lenguaje nos abre muchas puertas a la hora de desarrollar herramientas que en muchos otros lenguajes son imposibles, o muy complicadas de crear.

Uno de los mejores usos que se le da a la metaprogramación, es la capacidad de crear DSL’s (Lenguajes de Dominio Específico por sus siglas en inglés). Un DSL es básicamente un lenguaje de programación que se utiliza en situaciones muy particulares.

En Elixir, podemos ver esto reflejado en muchas librerías, como por ejemplo Ecto, que nos sirve para comunicación con bases de datos. Esta librería utilliza la metaprogramación para que mediante ciertos comandos, podamos modelar las tablas y relaciones que tendrá nuestra base.

Y esto no se trata exclusivamente de DSL’s, sino de una amplia gama de oportunidades que los desarrolladores de Elixir estamos utilizando para generar herramientas muy poderosas.

Comunicación entre Procesos

Hoy en día muchos lenguajes (si no la mayoría) han desarrollado técnicas y librerías que sirven para que los distintos programas puedan hacer uso de más de un proceso, o para utilizar varios hilos; aprovechando las increíbles capacidades de los procesadores que existen. Sin embargo, son pocos los que realmente logran hacer esto de una forma realmente sencilla y eficiente para los programadores; y aún cuando lo logran, muchas veces caemos en pérdidas de información por un uso ineficiente la memoria, o las famosas race conditions.

Elixir es completamente distinto en este sentido. La máquina virtual de Erlang lleva años implementando procesos, y es excelente a la hora de mantener la información íntegra y disponible. No es algo raro encontrarnos con programas que implementen cientos, o miles de hilos; y lo mejor es que cada uno de ellos es extremadamente ligero, por lo que no verás fácilmente saturado tu CPU o la memoria de la computadora.

Pero lo más interesante, es cómo se comunican los procesos entre sí. Cada proceso tiene su propio “buzón de mensajes” (por llamarlo de alguna forma), y para comunicarse entre ellos, un proceso debe estar esperando recibir algo. Entonces, una función manda un mensaje, y el proceso que estaba esperando, lo recibe. Y así de simple es la forma en la que estos se comunican.

Aunque podría destinar un artículo entero a este tema, e incluir la forma en la que la memoria está resguardada, el funcionamiento del garbage collector, su implementación en sistemas distribuidos, entre otras cosas; por ahora sólo quería darte una muestra de lo fácil que es el intercambio de información en Elixir..

¿Eso es todo?

Ya te mencioné las cosas que creo son más extraordinarias de Elixir, sin embargo, esa no es la parte más divertida. Lo más entretenido de Elixir, y probablemente lo más atractivo para los desarrolladores es que tiene un paradigma muy distinto a lo conocido. Deberás aprender a dejar de pensar en la Programación Orientada a Objetos, y comenzar a idear funciones que solucionen lo que necesitas.

También descubrirás que puedes vivir sin el clásico if / else; que existe algo llamado pattern matching que te permitirá obtener información y asignar variables al igualar valores como {:ok, resultado} = foo("bar"); y podrás crear código mucho más legible, abandonando las funciones anidadas funcion(foo(bar())) y utilizando pipes bar() |> foo() |> funcion().

Y eso es solo el comienzo, porque realmente puedo asegurarte que Elixir es un lenguaje que te presentará muchos retos, pero sobre todo te ayudará a solucionar problemas de maneras muy eficientes.

¿Cómo comienzo con Elixir?

Si he logrado convencerte de utilizar Elixir, probablemente quieres saber cómo puedes aprender el lenguaje. Es por eso que he preparado una lista de materiales que considero que te servirán mucho, según lo que te acomode más.

Si te gusta leer 📚:

  • Documentación de Elixir: Está muy bien organizada, y aunque puede ser difícil de entender todo al principio, probablemente en algún punto te será de mucha utilidad.
  • Programming Elixir: Un libro escrito por Dave Thomas, que te enseñará desde lo más básico, hasta conceptos avanzados de Elixir, muy recomendable 👌
  • Joy of Elixir: Una introducción muy amigable a Elixir. Muy bueno si conoces poco de programación.

Si te gustan los videos 📽:

  • LearnElixir.tv: Una serie de videos que te enseñarán todo lo que necesitas saber para comenzar en este lenguaje y terminar construyendo sistemas que implementan todo el ecosistema de Elixir.
  • LittleAlchemist.io: Un canal de YouTube con algunos videos que te servirán para comenzar a familiarizarte con el lenguaje, de una forma muy fácil de entender. También es muy recomendable 👌
  • Elixir Tutorial: Un video que en tan solo 1 hora te enseñará los conceptos más importantes de Elixir.

Si te gusta practicar 💻:

  • Elixir School: Este es el único material en español, desafortunadamente no hay mucho contenido en nuestro idioma. Una serie de lecciones que puedes ir practicando en tu propio equipo para conocer a fondo Elixir.
  • Exercism.io: Una plataforma donde puedes realizar retos en Elixir que te permitirán conocer el lenguaje. Va desde lo más simple, hasta ejercicios un poco más complejos.

Esto es principalmente un preámbulo para poder publicar contenido mucho más especializado, y más avanzado de Elixir. Probablemente en el futuro comenzaré con una serie de pequeños cursos (tanto artículos como en video), para aquellos que quieren comenzar a trabajar con Elixir, y que prefieren el contenido en idioma español, ya que es muy escaso.

Por lo tanto, si te interesa este lenguaje, mantente al tanto de mi blog, y mis redes sociales. Muy pronto se vendrán muchas cosas nuevas al respecto.

Keep coding… ⌨

Otros posts similares: