Hacía mucho que no escribía en este blog. La razón principal es que no tenía mucho que decir. Lo poco que podía contribuir lo he ido haciendo en otros ámbitos de internet y no había nada más que añadir con un mínimo interés.
En este tiempo, he seguido profundizando más en la programación funcional de la mano de scala y haskell, he mirado novedades en varios lenguajes (python, typescript,..) y he probado algunas de las tecnologías más populares en estos momentos (docker, angular, raspberry, etc).
Sin embargo, sigo notado que se programa desastrosamente para concurrencia. Un programador, además de saber programar, debería ser capaz de razonar sobre las particularidades del entorno de ejecución que afectarán a su programa. De igual modo que es capaz de usar algoritmos para optimizar el uso de memoria y reducir el consumo de CPU, también debería ser capaz de sincronizar los distintos hilos de ejecución y saber cómo crear “transacciones atómicas”.
Sobre todo, algo a tener claro en concurrencia es que “NO EXISTE UNA SOLUCIÓN PARA TODO”. Cada caso tiene una solución distinta que requerirá de estudio previo y una solución acorde al problema. Y para eso hay que aprender a razonar.
Si no entiendes el problema, el lenguaje no te dará la solución
Personalmente, sigo pensando que debería cambiarse la Enseñanza Tradicional de la Programación. Cambiar lenguajes dinámicos y variables globales por lenguajes funcionales y sistemas de tipos. Aprender nuevos modos de hacer las cosas.
En definitiva:
Más matemáticas y menos ingeniera