Hoy vengo a contaros una historia que se inició cuando volví de las vacaciones y descubrí que necesitaba reactivar la licencia de Matlab. Esto llevó a un lío en el que el servicio informático me desinstaló el programa y me instaló una versión hipervieja, en mi departamento me contaron que no, que no tenía que haber contactado con el servicio informático que la licencia la llevaba otra persona, tuve que desinstalar el Matlab viejo, reinstalar el nuevo y activar la licencia como decía esa persona. En definitiva, dos días de trabajo perdidos.
Si ya detestaba Matlab, esto me llevó a odiarlo aun más y buscar una alternativa libre y viable lo antes posible. Ya había andado con GNU Octave antes, pero no quería pasarme a algo que fuera siguiendo a Matlab (y a su sintaxis incoherente, sus funciones cambiantes de versión a versión y demás mierdas variadas que me sacn de quicio). Así que me puse a investigar lo que según el Fediverso es la mejor alternativa libre: el novedosísimo lenguaje de programación Julia cuya versión 1.0 es de agosto de este mismo año.
Sobre el lenguaje
Dicen sus creadores que cuando diseñaron Julia querían un lenguaje abierto (lleva licencia MIT porque se creó en el MIT), tan rápido como C, tan dinámico como Ruby, homoicónico como Lisp, con una notación matemática tan sencilla como la de Matlab, tan generalista como Python, tan útil para cálculo estadístico como R, con tantas capacidades para trabajar con texto como Perl y tan bueno juntando programas entre sí como un intérprete de comandos. Algo sencillo pero que satisficiera a los expertos, que fuera interpretado y compilado. Poquita cosa, vamos.
Lo presentaron en un paper, cosa que a mí ya me gana, y con unos números bastante espectaculares en el benchmark en el que pulen a Matlab en tiempos de computación y se acercan peligrosamente a C++, que toman como referencia. Del lenguaje poco más os puedo decir porque no entiendo nada más, solo que está escrito en una mezcla de C, C++ y Scheme, cosa que lo hace cuanto menos exótico.
En fin, centrándonos en cómo ponernos ya mismo a programar en Julia, no tenemos más que ir a su página de descargas y elegir nuestro método favorito. Yo, de momento, me he instalado el cacharro en el Windows del trabajo.
Diferencias con Matlab
En mi caso concreto que vengo de Matlab, lo que me interesa saber es cuánto de mi conocimiento actual puedo reciclar y la buena nueva es que ¡mucho! La sintaxis de ambos lenguajes es practicamente igual con algunas pequeñas diferencias a las que me he acostumbrado rápido, por ejemplo:
- Los paréntesis solo se usan para pasar argumentos a las funciones, para elegir elementos de una matriz se usan los corchetes
- No se copian las matrices, cuando hacemos
A = B
si cambiamos B
cambia A
- Para aplicar cierta operación elemento a elemento tenemos el operador splat
...
o la construcción f.(x)
- No se agrandan las matrices automáticamente, lo que nos obliga a prealquilar memoria
- Se pueden tener todas las funciones que se quiera en un mismo archivo
Para los primeros días de locura tenemos hasta un traductor Matlab – Julia que nos ayuda a detectar estas pequeñas diferencias que son difíciles de ver.
Lo que más he notado es que Julia nos obliga a tener buenas prácticas a la hora de programar. Os pongo un ejemplo que me encanta: cuando calculas los autovalores con un método iterativo como Lanczos, te da cada vez cosas diferentes porque empieza con un vector aleatorio si tú, so vago matlabil, no le dices de dónde debe empezar, cosa que deberías hacer porque es tu matriz.
Otro tema chulo y diferente a Matlab es que Julia tiene un gestor de paquetes y debemos decirle explícitamente qué paquetes estamos usando en nuestro script o función con using PAQUETE
. De momento he usado Polynomials
, Plots
, un paquete para cálculo simbólico y otro para matrices dispersas, todos ellos han funcionado muy bien y solo les puedo poner como pega que a veces la documentación es liosa, supongo que porque acaba de salir la versión 1.0. Se pueden además usar paquetes de Python, R o Matlab lo que hace que siempre tengamos recursos para nuestro caso de uso.
Mi entorno juliano actual
Ahora mismo estoy usando la consolilla de Julia (el Julia REPL) en Atom con la extensión Juno. Fui muy reacia a instalar Atom porque consume muchísimos recursos, pero ahora mismo en Windows es la mejor opción. Se instala en nada, tienes todo centralizado y funciona correctamente.
Y tiene un nivel de cuquismo elevado como podéis ver en la siguiente captura de pantalla:
¿Por qué no desde Emacs?
Creedme cuando digo que lo intenté pero fue imposible. La explicación es sencilla: Windows. La mitad de los paquetes que permiten usar Emacs como IDE de Julia no carrulan en Windows. En teoría con instalar julia-mode
y julia-repl
o julia-shell-mode
debería ser suficiente, pero después de horas infructuosas me rendí. Aun así, mereció la pena la investigación porque descubrí ESS, un modo de Emacs oara hacer análisis estadísticos al que espero volver algún día.
Conclusión
Como conclusión os digo que aunque lo he tocado poquito, Julia me encanta, hace lo que yo quiero, es natural programar en él y hay todo tipo de paquetes. Intentaré ir migrando todo mi código de Matlab a Julia e iré compartiendo con vosotros truquillos que vaya descubriendo.
¡En algún momento habrá código que Julia para calcular con elementos finitos gracias a mí! Hasta ese día podéis ir leyendo los enlaces que os dejo en las referencias 🙂
Referencias
Julia: A Fast Dynamic Language for Technical Computing
Julia for Matlab users
Crítica a Matlab en Neuroplausible
How I self-radicalised (an open science manifesto, part 1)
Documentación de Julia
A Deep Introduction to Julia for Data Science and Scientific Computing
Comparación entre Python, Matlab y Julia
Diferencias entre Matlab y Julia
Podcast con los creadores del lenguaje
Chuletilla
Think Julia
Julia Express (pdf)