Desde hace algún tiempo, vengo escuchando sobre Elixir y la verdad no le había prestado atención porque con Ruby tenía lo suficiente para hacer lo que necesitaba. Sin embargo, últimamente he estado sintiendo presión social para aprender Elixir

Elixir es un lenguaje dinámico y funcional diseñado para construir aplicaciones escalables y mantenibles.

Creo que el mejor recurso para aprender que es Elixir es yendo directamente a la fuente, por lo que recomiendo leer (completo) Elixir-School

No había tenido previamente ninguna experiencia con Functional Programming (al menos no conscientemente) y Ruby me acostumbro a ver todo como un objeto por lo que tuve que hacer un esfuerzo en romper el OOP. Hay una serie de artículos de Charles Scalfani(@cscalfani) que me ayudaron bastante a comprender este tema: So You Want to be a Functional Programmer

Hay que dedicarle un tiempo a esa sección y derrepente sentirás que la programación funcional es más natural que la orientada a objetos. Llegados a este punto, hay que leer obligatoriamente la guía “Elixir Getting Started Guide” mientras lo leía, se me hacía necesario aplicar algunos elementos para entender mejor su funcionamiento, por lo que empecé a utilizar Exercism para realizar algunos ejercicios. También realicé completo el elixir-koans lo cual es muy util para entender algunos comportamientos.

La sintaxis de Elixir está inspirada en Ruby y esa es una de las cosas que más me agrada, lo otro que le da un plus es que la comunidad apenas está creciendo, por lo que representa una oportunidad para aportar en el desarrollo.

Aqui dejo un ejemplo del famoso HolaMundo para Ruby y Elixir respectivamente

# Con Ruby
module HolaMundo
  def self.hola(quien = "Mundo")
    puts "Hola #{quien}!"
  end
end

Luego en irb

001> HolaMundo.hola "Mijail"
Hola Mijail!
=> nil

Con Elixir no es muy diferente, sólo que en vez de module se usa defmodule (las clases no existen), para cada inicio de bloque hay que usar do, los valores predeterminados de una variable se definen con \\ y para usar puts hay que hacer referencia al módulo que lo contiene IO a menos que lo hagas con alias pero no voy a profundizar en eso por ahora.

# Con Elixir
defmodule HolaMundo do
  def hola(quien \\ "Mundo") do
    IO.puts "Hola #{quien}!"
  end
end

Luego en iex

iex(1)> HolaMundo.hola "Mijail"
Hola Mijail!
:ok

Como pueden notar, se parecen tanto que parece lo mismo, de verdad recomiendo empezar ya a aprender Elixir.

Actualmente estoy leyendo “Elixir in Action” para profundizar un poco más en el tema.

OJO: Recomiendo también unirse al canal en #Slack elixir-lang