¿Qué es la programación funcional y por qué es tan especial?

Cuando activas tu modo programador y picas la primera línea de código en el proyecto, aunque no lo sepas, vas a convertirte en arquitecto de software ya que tendrás que elegir la mejor forma de organizar tu código. Quedarte con uno de los 3 paradigmas predominantes, sabiendo que no habrá una vuelta a atrás, buscar aquella forma que mejor se adapte al tipo de proyecto y el equipo. Tus opciones son:

La programación orientada a objetos esta sobrevalorada

Es tradición que en escuelas y universidades te den un primer acercamiento con un lenguaje imperativo, como puede ser C/C++, Java, Python o PHP. Sin una formación adecuada, los alumnos engordan sus ficheros haciendo que crezcan sin un fin aparente. Lo cual es natural ya que primero deben romper mano con los elementos esenciales como las variables, bucles, condicionales, arrays… Cuando llegan, o llegamos, a crear los primeros programas son imposibles de mantener. No recuerdan bien como funciona por no existir límites ergo modificar una sola línea provocaría una reacción en cadena imposible de predecir por la mala estructura. Por descontado realizar testing es desconocido e inútil por su parte. ¿Cómo se ayuda al alumno? ¿Qué hacen los profesores? Dar un paradigma capaz de separar todo el código en secciones y sea compatible con el lenguaje: programación orientada a objetos.

El paradigma no es gratuito, esta llena de conceptos propios: abstración, herencia, poliformismo, interfaces… Si eres capaz de esforzarte en asimilar todo esa locura de herramientas, ¿para que irte a otro paradigma? Es utilizado por casi cualquier lenguaje moderno, muchos Frameworks lo utilizan como base y hay muchos compañeros que pueden ayudarte. Puede que en este punto, y justo en este preciso momento, caigas en la trampa de pensar: “La programación orientada a objetos es la mejor, no necesito aprender otros paradigmas”. Justo aquí te puedes perder la magia de la programación funcional.

Si piensas de esa manera me gustaría que te hicieras las siguientes preguntas:

La realidad es que no usamos OOP, lo admiramos e intentamos alcanzarlo pero no es práctico en tu día a día. Después de todo cuando desarrollamos pequeños script no hay la necesidad de liarnos ha hacer un objeto con su constructor e interfaces, y cuando el proyecto es grande hacemos uso de algún Framework.

¿Eso significa que no debemos aprenderlo? Tienes que saber todas sus entrañas por muy profundas que que sean. Es útil, no hay paradigma inútil, y gran parte del software esta estructurado de esta manera. Javascript no deja de intentar acercarse creando abstraciones compatibles. Pero conocer algunos conceptos básicos de la programación funciona, no hace falta que aprendas Monadas, harán tu trabajo más limpio y sencillo.

¿Qué ventajas posee la programación funcional respecto a la programación orientada a objetos?

Pros

Contras

Versión escritorio