Elixir es un maravilloso lenguaje de programación, creado por José Valim el 2011 (Brasil) y a sus usuarios les gusta denominarse "alquimistas". Grandes empresas como Pinterest han ahorrado más de 2 millones de dólares al año en costos de servidores gracias a esta grandiosa tecnología.
Para comenzar recomendamos el libro online gratuito Joy Of Elixir donde podrás realizar ejercicios para aprender lo básico del lenguaje. Es importante complementarlo con la herramienta Livebook ya que con ello podrás instalar Elixir fácilmente y ejecutar scripts.
También recomendamos mucho el clásico "Elixir in Action" para aprender más profundamente el ecosistema de Elixir y Erlang.
Elixir es mucho más que un lenguaje de programación para backends. Es todo un ecosistema que sirve para distintos propósitos y cada día hay nuevas herramientas. Ciertamente si decides invertir en esta tecnología, podrás acceder a muchos campos laborales y proyectos entretenidos.
La siguiente tabla muestra algunas de las herramientas disponibles en el ecosistema.
Categoría
Nombre
Descripción
Enlace
AI
Nx
Matrices multidimensionales (tensores) y definiciones numéricas para Elixir. (Similares a Numpy).
Razón Técnica: La Erlang VM (Beam) tiene más de 30 años de evolución en entornos distribuidos y concurrentes, lo que la hace ideal para los sistemas de hoy.
Un ejemplo es el experimento de Leandro donde se probó la cantidad de conexiones TCP. Elixir y Erlang superaron incluso a tecnologías como Go y Rust.
Razón Negocio: Utilizar tecnologías modernas como Elixir permite contratar personas curiosas, lo que es más probable que sean buenos candidatos. La disminución de las dependencias permitirá ahorrar costos a mediano y largo plazo.
Razón Emocional: Elixir y Phoenix son lenguajes y frameworks modernos y fáciles de aprender, lo que los hace entretenidos y permite motivar a las personas a experimentar y generar nuevas ideas o soluciones. Además son bien valorados en el mercado y las ofertas laborales están bien remuneradas.
Razón Profesional: Utilizar Elixir y Phoenix traerá oportunidades laborales novedosas, además de mejorar las probabilidades de destacar en el mercado al utilizar una tecnología con menor cantidad de competencia.
# En Elixir se puede importar solo llamando # al módulo de forma completa # (no depende de la estructura de directorios). # También notar la separación utilizando puntos.importMySuperSpecialProject.HelperModule# Un alias permite utilizar el módulo # sin especificar la ruta completa. # En este caso podremos usar HelperModule.aliasMySuperSpecialProject.HelperModule# También podremos importar una función # en específico desde un módulo.importMySuperSpecialProject.HelperModule,only:[my_function,1]
# Las funciones utilizan el keyword def# similar a Python. Y utilizando bloques do y end# similar a Ruby.defadd(n1,n2)don1+n2end# Las funciones pueden ser asignadas a variables# En su forma larga (con fn)add=fn(a,b)->a+bend# Y en su forma abreviada (usando &)add=&(&1+&2)# Las funciones pueden ser privadas dentro de un módulo# Similar a métodos privados de una clase.defpprivate_add(n1,n2)don1+n2end
o=%{nested:%{prop:"¡Hola!"}}# Esto es lo que se conoce como Pattern Matching# Una herramienta muy poderosa en los lenguajes# funcionales como Elixir.%{nested:%{prop:prop}}=oIO.inspect(prop)# ¡Hola!
Surface UI para React.js Devs
Ahora veremos una pequeña introducción a Surface UI y cómo alguien que conoce React.js puede aprenderlo fácilmente, permitiendo acceder al maravilloso mundo de Elixir y Phoenix.
Para comenzar esta pequeña comparación de tecnologías. Considerando React.js para Server Side Rendering (SSR) en el framework Next.js.
Surface UI es una extensión para LiveView de Phoenix que trae convenciones y herramientas muy similares a las encontradas en frameworks de frontend Javascript como React.js o Vue.js.
React.js permite crear frontends web de forma declarativa en el ambiente cliente con Javascript. Reemplazando la forma imperativa comunmente usada en otras tecnologías como jQuery y HTMx. Actualmente existen herramientas como Next.js que permiten traer esta forma declarativa de crear frontend al servidor, sin embargo estos frameworks de Javascript al nivel de servidor no tienen las mismas características y capacidades ofrecidas por tecnologías que funcionen bajo la BEAM VM.
Phoenix con su herramienta LiveView permite crear frontends web de forma declarativa en el ambiente servidor con Elixir. Sumando la extensión de Surface UI nos permite tener lo mejor de los dos mundos. Primero una excelente y robusta plataforma de servidores y segundo, una forma de crear frontends utilizando convenciones y herramientas de fácil aprendizaje para personas que provengan de ecosistemas como Javascript.
Ejemplo de Módulo Surface
defmoduleMyAppWeb.ExampleLivedouseSurface.LiveView# Importamos nuestro componente# utilizando un aliasaliasMyAppWeb.Components.ExampleComponentdefrender(assigns)do# Renderizamos el HTML final# Con una sintaxis similar a JSX de React.js~F"""
<ExampleComponent>
¡Hola Mundo!
</ExampleComponent>
"""endend
Al igual que React.js podemos definir las propiedades, tanto obligatorias como opcionales de nuestro componente y pasarlas al momento de renderizar el componente.
# Creando el ComponentedefmoduleHoladouseSurface.Component@doc"A quien saludar"propnombre,:string,required:truedefrender(assigns)do~F"""
¡Hola, {@nombre}!
"""endend# Usando el ComponentedefmoduleEjemplodouseSurface.Componentdefrender(assigns)do~F"""
<Hola nombre="JuanPérez" />
"""endend
También podremos hacer uso de Javascript para ciertos eventos que no son necesarios llevarlos al servidor (Por ejemplo animaciones, reproducción de sonidos o utilización de bibliotecas de gráficos como D3).
Para ésto podemos crear un archivo javascript en el mismo directorio de nuestro componente.
De la misma forma que se usa Storybook para React.js, Surface UI cuenta con Catalogue, una ayuda para documentar y ver nuestros componentes de forma fácil y bonita.
Elixir es una tremenda tecnología para invertir en aprenderla y utilizarla profesionalmente, no solo por su sintaxis amigable, también por su cantidad de herramientas y características versátiles que nos permitirán desarrollar y participar en una gran gama de proyectos de distinta índole.
Además el uso de Surface UI permitirá a muchas personas del área frontend Javascript, ingresar al mundo del desarrollo frontend y backend con Elixir, Phoenix y Liveview.