Elixir

Por que aprender programación funcional en 2017

by Ivan Alvarez

Las computadoras de hoy en día se encuentran provistas de múltiples procesadores y la tendencia nos muestra un incremento año tras año. El código que estamos escribiendo hoy, muy problablemente nunca corra en sistemas de un solo procesador, por lo que si queremos realmente obtener el mayor provecho de estos recursos, debemos diseñar software que haga un uso intensivo de la concurrencia y por lo tanto mantener ocupados a cada uno de los procesadores.

Los lenguajes de Programacion imperativa como C, C++, C#, Java, Python, Ruby entre otros, nos proveen de herramientas como hilos, semáforos, sincronización, soluciones que nos permiten ejecutar código en paralelo, sin embargo la realidad es que estos mecanimos nos han causado más problemas que beneficios.

Por otra parte los lenguajes de programación funcional como Closure, Haskell, Scala, Elixir examinan estos problemas desde una perspectiva diferente y proporcionan soluciones menos complejas y menos propensas a errores que nos permiten crear programas concurrentes de una manera más sencilla. Es por eso que es de suma importancia comprender aquellos conceptos que están detrás de la programación funcional, revisemos algunos de ellos.

Estado inmutable

Esto significa que una vez que una variable ha sido ligada a un valor ésta no puede ser redefinida.

Funciones de orden superior

Son aquellas que cuentan con las siguientes características:

  • Pueden recibir funciones como parámetros.
  • Pueden devolver funciones como resultado.

Una función que hace ambas cosas o alguna de ellas se le llama función de orden superior.

Funciones como ciudadanos de primera clase

Esto significa que las funciones desempeñan el papel más importante, ya que todo se conceptualiza alrededor de ellas. Las funciones en la programación funcional pueden ser pasadas como parámetros, asignadas a variables o recibidas como el resultado de una función.

Funciones sin efectos secundarios

Esto quiere decir que si ejecutamos el código de una función, siempre devolverá el mismo resultado para el mismo argumento cuando sea llamada multiples veces, es decir para mismas entradas mismas salidas sin importar el momento del tiempo en que se ejecute la función.

Todas estas son características que los lenguajes funcionales comparten nos permiten escribir código que podemos distribuir en diferentes procesadores sin preocuparnos de sincronizar el estado y enfrentarnos con efectos secundarios.

Al momento de querer llevar estos conceptos a la práctica podemos darnos cuenta de que existen varias opciones en el mercado como F#, Haskell, Scala, Closure, sin embargo mi recomendación es que le des una oportunidad a Elixir, un lenguaje relativamente nuevo con una sintaxis amigable inspirada en Ruby que te hace sentir cómodo para dar tus primeros pasos.

Para finalizar este primer post me gustaría platicarte un más poco sobre este lenguaje de programación. Por ahora lo más importante que debes saber es que Elixir es un lenguaje dinámico de propósito general diseñado para crear aplicaciones escalables y mantenibles. Se ejecuta en la máquina virtual de Erlang lo que nos permite aprovechar el ecosistema y la madurez que esta plataforma ha alcanzado.

En nuestro siguiente post darémos nuestros primeros pasos utilizando Elixir comenzando por su instalación, familiarizándonos con la BEAM(maquina virtual de Erlang) y conociendo los primeros comandos que nos permitan contar con una base sólida y sentirnos cómodos para continuar esta larga jornada en el aprendizaje de la programación funcional.

Ivan Alvarez