Adaptarse convenientemente… o morir
Internet de las cosas (IoT), el móvil, big data, blockchain y la inteligencia artificial están cambiando totalmente las reglas del juego. Por lo tanto, nuevas reglas necesitan de nuevos paradigmas. La expectativa es que, en los próximos años, concretamente en 2021 haya 28 mil millones de dispositivos conectados. Ericsson estima que los dispositivos conectados del IoT tendrán una tasa de incremento compuesto anual del 23% entre 2015 y 2021. Se trata por tanto de un negocio con un crecimiento interanual del 15,6 por ciento. Considerando el mismo período anterior, en el año 2020 los ingresos del IoT serán de 1.290 mil millones de dólares.
El concepto Internet de Todo fue definido en la compañía Cisco y explica que: “El Internet de Todo consiste en reunir personas, procesos, datos y cosas para conseguir que las conexiones de red sean más pertinentes y valiosas que nunca, convirtiendo la información en acciones que creen nuevas capacidades, experiencias más ricas y oportunidades económicas sin precedentes para las empresas, las personas y los países”.
Ahora bien, nuevos desafíos implican nuevas maneras de abordar y resolver los problemas. Reinventar el método implica renovarse y/o reincorporar los paradigmas adecuados. Es pues, en este escenario donde la programación funcional tiene mucho que aportar.
Anteriormente, la memoria era un recurso limitado y por tanto muy costoso, de ahí que tomar una parte de ella y mutarla muchas veces tenía sentido. Las CPU’s pueden tener múltiples núcleos y hoy en día los ordenadores tienen procesadores de 4, 8, 16, 32 y más núcleos. Esto significa que el software necesita utilizar eficientemente tantos núcleos como sea posible, con el propósito de maximizar el uso de los recursos de la máquina, incluyendo la memoria. Es en este preciso momento donde la programación funcional comienza a “marcar a fuego” su importancia y se hace patente la necesidad de tener en cuenta una nueva realidad: PARALELIZAR.
“El nuevo hardware es cada vez más paralelo , razón por la cual los nuevos lenguajes de programación deben soportar abstracciones para manejar concurrencia o morirán”. Joe Armstrong (Erlang) |
La programación funcional, durante mucho tiempo, ha sido relegada -principalmente al ámbito académico- por otros paradigmas, como la orientación a objetos. Ahora ha resurgido, debido a que la programación orientada a objetos comienza a no ser capaz de manejar, de forma efectiva los requisitos de concurrencia, más que nunca necesaria, debido al gran número de conexiones y al enorme volumen de datos que necesita manejar.
La industria de hardware cada día agrega más y más núcleos a los procesadores, como una forma de obtener un incremento en la velocidad y las prestaciones. Sin embargo, no todos los paradigmas de programación y los lenguajes que los implementan, son lo suficientemente eficientes para aprovechar este nuevo escenario.
“El estado mutable compartido es la raíz de todos los males (Shared mutable state is the root of all evil) y lleva a que programas informáticos tengan un comportamiento impredecible y no determinístico cuando hay múltiples núcleos o procesadores en acción”. Martin Odersky ( Scala) |
Consideremos que cuando hay que mutar el estado en múltiples núcleos se ralentiza considerablemente la ejecución de un programa. Si cuatro o más núcleos intentan acceder y manipular el mismo elemento en memoria, existe un riesgo de corrupción de este, a no ser que se apliquen complejos mecanismos de sincronización. Es necesario resaltar que dicha complejidad se incrementa de forma proporcional al número de núcleos que utiliza la CPU. Por la misma razón, para no corromper la memoria, ésta debe ser bloqueada mientras que otra rutina está accediendo a ella, lo cual dificulta el proceso de paralelización del software.
Paralelización es la palabra mágica que permite al paradigma de programación funcional volverse interesante, necesario y quizá imprescindible. Conceptos como escalabilidad y refactorización, soportados técnicamente en las funciones puras, inmutabilidad y evaluación perezosa (lazy), son otras importantes características de los lenguajes funcionales.
Las comunidades de programación funcional de Madrid, presentaron en el último OpenExpo una interesante charla sobre los diversos motivos que justifican una rápida adopción de este paradigma por parte de la industria. Asimismo, los días 26 y 27 del próximo mes de Octubre en la ciudad de Cádiz se llevará a cabo la mayor conferencia en España sobre programación funcional: Lambda World 2017.
Considerar la transición a lenguajes de programación funcional es una inteligente estrategia, que facilitará a empresas y startups afrontar con éxito los desafíos de esta revolución en marcha.