sábado, 16 de marzo de 2019

Teaching Concurrency with Erlang


Erlang como lenguaje de programación me ha demostrado ser una cosa completamente maravillosa. Desde la primera vez que tuvimos el acercamiento en la clase de programación concurrente y paralela me di cuenta de que es un lenguaje con el total potencial para aprovechar los núcleos de un procesador para optimizar los tiempos de ejecución de casi cualquier sistema. Obviamente, y como lo dice el artículo, tiene sus ventajas y desventajas pues, hasta donde he podido notar, en los sistemas de cómputo no hay una bala de plata para nada, siempre existen distintas formas de alcanzar el mismo objetivo. Dicho esto, puedo asegurar que, aunque existen otros lenguajes de programación que permiten el cómputo paralelo y concurrente, Erlang ha demostrado ser de mayor facilidad y mejor aprovechamiento de los recursos que otros como C# o Java.
 
  Si bien es cierto que conocer otros lenguajes de programación nos permite tener más herramientas para seleccionar el más adecuado para determinada situación, creo que Erlang se acomoda bastante bien para un sin número de aplicaciones. Lo importante es conocer sus ventajas y desventajas, así como practicarlo lo suficiente para extraer su máximo potencial. He tenido la oportunidad de cursar la materia con el profesor Ariel y me parece que los ejercicios que nos ha dejado son lo suficientemente retadores para que aprendamos del potencial de Erlang y nos demos una idea de hasta dónde puede llegar. Pero para esto tenemos que tener bien claras las limitaciones del lenguaje, así como los conceptos de concurrencia, paralelismo y (aunque aún no hemos tenido oportunidad de utilizarlo) sistemas distribuidos.
 
  Finalmente quiero agregar que podría ser de mucha utilizar relacionar un poco más el lenguaje con aplicaciones más reales, adicionales a los ejercicios retadores que propone el profesor, de forma que podamos tener de primera mano la experiencia de utilizar este lenguaje para solucionar un problema real que nos permita verlo como algo funcional.

sábado, 9 de marzo de 2019

Joe Armstrong on Erlang


Una vez leídos los capítulos 1 a 4 del libro de Joe Armstrong pude entender, en su mayoría, cómo funciona el lenguaje Erlang, pero en su podcast hace algunas afirmaciones que me dejan intrigado. Una de las cualidades más relevantes del sistema es la concurrencia manejada por el mismo lenguaje de programación, pero no por el sistema operativo, esto se lleva a cabo a partir de una implementación del System Runtime muy pesada y completa. Básicamente el sistema operativo se encarga de manejar archivos y sockets, pero todos los procesos que se crean y el manejo de mensajes de un proceso a otro lo hace el mismo sistema.

   Es interesante que a Joe y su equipo de trabajo se les ocurriera hacer el sistema utilizando la visión que tienen del mundo concurrente, sabiendo que las tareas que realizamos en el día a día son concurrentes y no secuenciales. Se dedicaron a definir los procesos como objetos y manejar la transmisión de información a través de mensajes, de la misma forma en que se hace en el mundo real. Esto les permitió eliminar los problemas de deadlocks, starvation, race condition y el acceso a memoria, porque ya no existe la memoria compartida en este lenguaje de programación, en su lugar de utiliza información inmutable. Todas las variables son declaradas una sola vez y no pueden cambiar su valor, lo que permite que sea más fácil manejar la información entre procesos.

   Ahora bien, la simplicidad con la que se desarrolló el sistema utilizando como base que los programadores saben lo que están haciendo, me impresionó. Saber que solamente hay que programar el happy path y que el programa automáticamente funcionará de manera concurrente me parece maravilloso. Nos facilita el trabajo a los programadores para hacer uso de los nuevos procesadores que salen ya con multinúcleo. Aprovechamos estas herramientas para crear código más entendible, más corto, más funcional, más eficiente y que requiere menos tiempo y esfuerzo.