¿Puede la programación funcional llegar a ser tan importante como OOP en el mundo de la ingeniería de software?

Estoy colocando mi apuesta en FP continuando su impulso. FP ha existido durante muchos años, con una adaptación lenta hasta hace unos años. Estamos en un momento de transición que creo que continuará hasta que la industria aprenda más sobre la programación funcional.

En algún momento, las personas aprenderán a reconocer el ruido de Internet de aquellos que expresan sus opiniones por ignorancia obvia. Leí tanta basura y falsedades sobre lo que FP puede y no puede hacer. Por ejemplo:

  • FP no se puede usar para control de bajo nivel. He escrito software embebido de un Beaglebone Black en un lenguaje funcional, con máquinas de estado complejas, requisitos de tiempo casi en tiempo real y control de hardware
  • FP requiere matemáticas de alto nivel. Lo siento, no tengo una licenciatura en matemáticas y nunca he estudiado cálculo lambda. Tampoco puedo reducir una expresión lambda compleja. Pude recoger la programación funcional rápidamente, 25 años con programación imperativa.
  • FP es para puristas que tomarán el camino por encima de preocupaciones pragmáticas como el rendimiento y la complejidad. De nuevo, no es cierto. Claro, hay algunos fanáticos en la comunidad FP. ¿Esto significa que no hay ninguno en otras comunidades de programación? Cualquier programador respetable también tomará decisiones para resolver mejor los problemas que se les asignan.

No estoy seguro de cómo se convertirá el FP convencional, pero estoy bastante seguro de que si se convierte en mainstream, no será con lenguajes de paradigmas múltiples. Sí, ahora son populares, lo que cabría esperar durante un período de transición. Después de todo, todos queremos mitigar el riesgo y el paradigma múltiple es una solución perfecta.

El problema con los lenguajes de paradigmas múltiples es que es una solución que utiliza compromisos en un intento de hacer felices a todos. El problema con el compromiso es que es una solución para perder. Utilizo FP porque me proporciona las abstracciones y el soporte para producir efectivamente un software concurrente altamente confiable que es más fácil de escribir, probar, leer y mantener que todos los lenguajes que no son FP que he usado en el pasado. El habilitador principal para esto es la separación de estado, comportamiento y tiempo. Algo que no sé que alcanzaría en un lenguaje de paradigma mixto.

Estoy de acuerdo en que todo lo que puede hacer con FP se puede lograr con lenguajes de procedimiento y OO, incluidos sistemas altamente concurrentes. Pero, de nuevo, todo lo que resuelvo con OO, lo puedo resolver con un lenguaje de procedimiento y todo lo que puedo hacer con un lenguaje de procedimiento, lo puedo hacer con lenguaje ensamblador. Pero a qué costo en desarrollo, costo y complejidad.

Los lenguajes y paradigmas de programación nunca mueren realmente, simplemente se desvanecen silenciosamente en segundo plano. No se trata de que FP se haga cargo, sino de que se convierta en una opción convencional. A medida que más personas experimenten los beneficios de la PF, creo que la adopción aumentará.

La respuesta depende del contexto. Si las universidades de todo el mundo comienzan a producir muchos ingenieros con mentalidad de programación funcional, entonces sí, la programación funcional se volvería tan importante como la orientación a objetos. Scala es un idioma con perilla que puede rotar de un extremo (funcional [4]) a otro (orientar objetos).

En mi opinión personal, me gusta la programación funcional debido a la simplicidad [1], la forma limpia de capturar la recursión [2] y el buen flujo de información mediante la composición de funciones. Puede leer más sobre lo que la programación funcional puede ofrecerle en términos de modularidad y reutilización [3].

[1] Bienvenido al sitio web de SICP

[2] https://www.cs.ox.ac.uk/jeremy.g

[3] https://www.cs.kent.ac.uk/people

[4] scalaz / scalaz

Ya está en camino. Qué tan lejos llegue ese camino depende de varios imponderables.

Algunos signos de la creciente importancia:

  • Más y más idiomas han ido agregando abstracciones funcionales a lo largo de los años.
  • Cuando Java finalmente hizo lo mismo (sintaxis de Lambda, Streams API), eso confirmó la creciente importancia de las abstracciones funcionales. Java está curada de manera muy conservadora, por lo que tenía que haber una clara demanda.
  • La programación funcional reactiva ha inspirado una serie de marcos para lenguajes imperativos
  • El número de trolls en Quora y otros sitios que intentan gritar FP en cada oportunidad (un par de ellos responden esta misma pregunta). Eso realmente no fue una cosa hasta que el perfil de la programación funcional fue elevado por el interés y la demanda.

Lo que es difícil de predecir es si esto conducirá a un aumento en el uso de lenguajes de programación explícitamente funcionales o simplemente verá prácticas de abstracción y abstracciones más funcionales adoptadas en los lenguajes actuales.

Creo que hay al menos dos cosas que deben surgir antes de que los lenguajes FP reales puedan hacer avances más significativos.

  1. Una historia clara para el modelado de dominio táctico con abstracciones de FP. El diseño estratégico impulsado por el dominio no depende de OOP, pero casi toda la literatura sobre la implementación táctica es completamente de naturaleza OOP.
  2. Un lenguaje FP cuya sintaxis y semántica tienen más principios y son más consistentes que los de Scala, aunque no requiere, como Haskell, que requiera abstracciones complejas y sintaxis especial para imprimir un resultado.

El primero es necesario para tranquilizar a Enterprise sobre la planificación de proyectos a gran escala. El segundo, bueno, quieres que la gente quiera usarlo.

Ambas cosas son posibles. Los componentes para el primero ya están aquí. El segundo … los idiomas que no son como otros idiomas han surgido y se han convertido en éxitos antes. Python es un buen ejemplo (del fenómeno, no de FP).

Nadie puede predecir el futuro, aunque eso no ha detenido a los sospechosos habituales haciendo cola para decir “Las cosas continuarán tanto como son, porque ya tenemos en su mayoría lo mejor de todas las cosas posibles”, la cosa más fácil y menos perspicaz que nadie pueda digamos, una apuesta segura a corto plazo y hay poco riesgo de que los rastree en un par de décadas si se equivocaron. Algunos de ellos son lo suficientemente mayores como para recordar cuándo OOP era un nicho de interés, burlado por gran parte de la industria, con comentaristas sabios que decían cosas como “La programación procesada estructurada será la tecnología dominante durante muchos años por venir” y “OOP tiene sobrecarga de rendimiento terrible. Nadie necesita esas capas adicionales de abstracción ”, por lo que deberían saberlo mejor.

Los cambios tecnológicos ocurren por accidente con más frecuencia que por diseño. Java fue una tecnología disruptiva una vez, seguro que ahora no lo es. Las circunstancias cambian.

Entonces sí, tal vez. Nadie sabe si sucederá o no.