Guieline to unleash your developer's journey using Elixir. 🎇
Pequeña guía introductoria en español sobre Elixir. Si este contenido es útil para ti, considera dejar una ⭐️ para saberlo.
- Elixir pertenece a la familia de los lenguajes de la máquina virtual de Erlang BEAM.
- Erlang es un lenguaje de programación de la familia de
pure message passing
. - Fue un lenguaje construído en el laboratorio de CS de Ericsson en los años 80's.
- La idea inicial era construir una implementación de prolog con
message passing
. - Erlang nace como una solución para crear sistemas de telecomunicaciones.
- Fue creado por Joe Armstrong, Robert Virding y Mike Williams.
Propiedades de un sistema de telecomunicaciones
Concurrency
El sistema debe ser capaz de procesar un alto número de actividades concurrentes.Soft real-time
Las acciones se deben ser procesadas en un punto en el tiempo.Distributed
Los sistemas deben ser distribuídos.Hardware interaction
El sistema usará control de hardware.Large software systems
Los sistemas de software son grandes.Complex functionality
Gran complejidad en las funcionalidades.Continuous operation
Los sistemas deben continuar en operación por muchos años.Quality requirements
Confiabilidad y calidad en los requerimientos de software.Fault tolerance
Tolerancia a fallos.
Los procesos
son un concepto central en la elaboración de sistemas en la BEAM, es la unidad principal de trabajo con el que puedes diseñar soluciones que hagan uso de todas las capacidades de Erlang.
Si quieres conocer más de procesos puedes leer este blog post: Understanding processes for elixir developers | ESL Blog
Sobre los conceptos anteriores está construído Elixir, un lenguaje de propósito general que hereda todas las ventajas de la BEAM, sin embargo Elixir debe considerarse como un lenguaje por aparte, ya que al ser de propósito general y funcional te facilita ciertos caminos para aprenderlo y comenzar a construir aplicaciones con él.
A diferencia de la Orientación a Objetos, Elixir maneja módulos que contienen funciones que ejecutan la lógica de programación.
defmodule Engine.CustomerContext do # Definición de un módulo
alias Engine.Customer
alias Engine.Repo
def create_customer(attrs) do # Función pública
%Customer{}
|> Customer.changeset(attrs)
|> validate_changeset()
|> Repo.insert()
end
defp validate_changeset(changeset) do # Función privada, solo accesible dentro de este módulo
#...
end
end
Una vez que construyes tus módulos, puedes invocarlos entre ellos, de igual forma las dependencias externas son módulos que invocas directamente en tu proyecto. De forma muy sencilla así se ve la interacción entre unos cuantos módulos:
Si bien Elixir es un lenguaje funcional, cabe destacar la importancia de pensar en transformación de datos, es decir, pensar en input
como entrada de información que por medio de una función se transformará en un output
.
Aunque Erlang y la BEAM son tecnologías muy poderosas, Elixir es un lenguaje que te facilita hacer cualquier tarea cotidiana, no necesitas usar concurrencia y distribución desde el inicio, ya que es una opción que te habilita el mismo ecosistema si así lo necesitas. Por lo que Elixir es una gran opción incluso para developers novatos que estén buscando un buen lenguaje de programación.
La gran noticia es que todas las capacidades de la BEAM están disponibles en Elixir, esto quiere decir que en un momento dado puedes comenzar a diseñar componentes que aprovechen estas características, para ello será necesario diseñar en procesos, para lo cuál será necesario aprender cómo funcionan los diseños de OTP que te facilitarán mucho este paso.
Con Elixir es posible crear una aplicación sin pensar en nada de concurrencia y distribución, estos features son una opción que puedes implementar en cierto momento dado, ya que son capacidades que te otorga la máquina virtual de Erlang.
En el 2019 se anunció LiveViews como un nuevo componente para crear features en el front-end usando solamente Elixir y dejándo de lado Javascript. Este proyecto funciona a traves de websockets, cada cliente se conecta a un socket, y por medio de este es como se va actualizando la vista en el navegador.
Este es un buen ejemplo de cómo hacer uso de procesos y OTP para diseñar componentes, ya que detrás de cada conexión por socket, hay un proceso de Erlang que se encarga de administrarlo.
Si deseas comenzar a estudiar Elixir como lenguaje de programación te recomiendo mucho comenzar por lo básico, es decir, por entender el lenguaje como tal, adoptar el estilo de la programación funcional y sentirte cómodo para resolver ejercicios de lógica, aprender Unit Testing te ayudará muchísimo. Una vez que tengas confianza en el lenguaje puedes seguir al uso de Phoenix Framework, conexión a base de datos y despliegue. Con esto cubrirás buena parte para realizar aplicaciones completas, pero te llevará un tiempo. Luego puedes extenderte al estudio de Erlang, procesos y OTP, que en mi opinión es algo más complejo.
Elixir Básico
- Elixir in Action
- Programming Elixir by Dave Thomas
- Programmer Passport Elixir by Bruce Tate
- Elixir Introducción para Alquimistas por Manuel Rubio
- Adopting Elixir
Frameworks
Erlang, la BEAM y OTP
- Designing Elixir systems with OTP
- Concurrent Data processing in Elixir
- Erlang/OTP Un Mundo Concurrente
- Introducing Erlang
- Learn You Some Erlang for great good!
Ejercicios y otros sitios de apoyo
Gleam Lang
Blog Posts by Carlo Gilmar
Conferencias
Erlang Solutions