Programación sin orientar

Jose Luis Gomez
Programación no programada

La programación funcional era, o incluso sigue siendo, una gran desconocida para gran parte del sector tecnológico. La famosa programación orientada a objetos, erigida como adalid de la modernidad tecnológica era vista como único paradigma de programación válido tanto en el entorno profesional como en el entorno educativo.


 

¿Qué diferencia existe entre la programación funcional y la programación orientada a objetos?

 

En términos llanos, la programación orientada a objetos fue ideada para entornos en los que hay que tratar con información muy cambiante y se basa en la clasificación de la información a tratar por tipos. De este modo nos brinda un sistema de clases y herencias con los que resulta muy sencillo agrupar esos “tipos” de información (objetos) con las mismas características y definir un conjunto de normas (clases) para que la información similar sea tratada de igual manera. Incluso, unos tipos de información pueden heredar varios aspectos de otros con los que guarde cierto parecido y personalizar sólo algunos aspectos.

Teclado

Como aspecto negativo, en estos entornos resulta realmente delicado hacer nuevas operaciones con los mismos “tipos” de información. Es decir, añadir funcionalidades suele implicar modificar mucho código múltiples clases diferentes.

 

¿Qué ocurre cuando llevamos a la práctica estos aspectos?

 

En los ecosistemas web, una vez puesta en producción una aplicación web, no es habitual que sea necesario añadir nuevos tipos de información con los que lidiar. Por ejemplo, en un e-Commerce una vez creado un conjunto de recursos CRUD (los habituales Crear, Leer, Actualizar y Borrar) para tratar con usuarios, fabricantes, productos, facturas, etc. no es habitual crear nuevos tipos de información. Pero, por otro lado, sí es muy habitual, y cada vez más, crear nuevos procedimientos para tratar esa información y añadir nuevas funcionalidades.

 

¿Cómo encajan los lenguajes funcionales en estos ecosistemas?

 

La programación funcional fue ideada, casi en términos antagónicos a la orientación a objetos, para tratar procesos en los que los “tipos” de información apenas varía, pero la forma de tratarla sí evoluciona rápidamente. En resumen: es sencillo añadir nuevas funcionalidades pero resulta tedioso añadir nuevos tipos de información a posteriori.

Además, ciertos tipos de lenguajes funcionales son especialmente útiles en entornos en los que la concurrencia gana mucho protagonismo. En otras palabras, el entorno ideal para un proyecto desarrollado con lenguajes funcionales son aquellos en los que existen unos tipos de información estables, en los que es necesario añadir funcionalidades regularmente y en los que existen muchas operaciones simultáneas de poca carga para la CPU. Efectivamente, ¡una aplicación web moderna es la candidata perfecta para la programación funcional!

 

Entonces ¿por qué la industria no refleja todavía este cambio?

 

Porque aún está en sus inicios. La programación funcional no es en absoluto un concepto nuevo, pero su uso extensivo está empezando a despegar recientemente. El auge de lenguajes como Clojure, Rust o Lisp (especialmente en sus dialectos Common Lisp o Scheme) da buena muestra de ello. Es destacable el caso de Erlang, un clásico en el mundo de las telecos. Erlang es un lenguaje funcional (concurrente más bien, pero funcional al fin y al cabo) creado por Ericsson en la década de los años 90 para gestionar la programación de switches de telefonía siguiendo unas estrictas premisas que ya vimos en el anterior artículo de El Internet de las “Muchas” Cosas. Destaca entre todos el buque insignia de Ericsson: el switch AXD 301, el famoso caso de éxito capaz de conseguir una disponibilidad de nueve nueves, es decir, 99,9999999%. A día de hoy Erlang cuenta con otros  grandes casos de éxito a sus espaldas como los dos millones de conexiones concurrentes por máquina de WhatsApp, el núcleo que da vida a los universos online para millones de jugadores en World of Warcraft, parte del sistema EC2 de Amazon e, incluso, el motor del chat de Facebook con más de 100 millones de usuarios mensuales. Además de, por supuesto, soportar bajo equipamiento de Ericsson el 50% del tráfico de telefonía en todo el mundo.

Código binarioComo el lector informado sabrá, en el segmento web no hay apenas demanda de profesionales ni consultoría de Erlang. Esto se debe, muy probablemente a que su farragosa sintaxis y excesiva rigidez no resultan atractivas a los nuevos profesionales ni ayudan a competir contra las opciones más extendidas. Es aquí donde vuelve a aparecer un fenómeno muy aclamado en esta pequeña guerra de lenguajes orientados a objetos contra lenguajes funcionales: Elixir.

Elixir es un lenguaje funcional que corre sobre BEAM, la eficiente y más que estable máquina virtual de Erlang. Este lenguaje fue creado por José Valim, uno de los programadores principales del núcleo de Ruby On Rails, de donde toma prestada gran parte de su sintaxis y productividad.

 

El despegue de Elixir

 

Es bastante llamativo ver en el entorno de Ruby cómo Elixir va ganando adeptos, relevancia e, incluso, muchos desarrolladores y consultoras empiezan a tener mucha más demanda de proyectos con Elixir, especialmente en la bahía de San Francisco. Asimismo los grupos de usuarios y meetups proliferan a buen ritmo por todo el mundo. En España Elixir Barcelona fue el primer grupo en formarse y, más recientemente, su equivalente en la capital Madrid Elixir nos ha sorprendido con una muy alta participación desde su primera ponencia a cargo de uno de los imprescindibles del circuito startup:  el siempre interesante Javier Cuevas.

Para poder competir con Ruby, Elixir necesitaba su propio “on Rails”, es decir, su framework web donde resultara atractivo realizar las tareas habituales de una app web, una API, etc. Y de esta idea nació Phoenix, una de las grandes promesas para los próximos años. A día de hoy cuenta con un gran auge y las pruebas de rendimiento, en las que llega a soportar 2 millones de conexiones concurrentes por máquina la equiparan a Erlang deparándole un futuro muy prometedor.

Incluso en el entorno front-end, pese a no estar en el mismo espectro de estos lenguajes de programación, también se toman prestadas muchas ideas de la programación funcional dejándose influenciar por ese “sabor funcional” tan de moda que, también, resulta especialmente útil de cara a mantener consistente el estado de las aplicaciones. Como hacen, por ejemplo, React y React Native, dos de las librerías JavaScript más en boga en la actualidad amparadas bajo la tutela de Facebook.

Podríamos profundizar durante horas acerca de muchos de los aspectos que hemos tratado en este artículo. Por eso espero tus comentarios en este post y Redes Sociales para desarrollar series de artículos que resulten aún más interesantes. ¡Gracias por participar!

Sobre este Autor

Ing. Telemática | CEO B2CODE | CTO Hialucic |

1 Comentario

Puedes enviar comentarios en este post.

Enviar una respuesta

No hay comentarios