¿Por qué algunas personas odian tanto la programación funcional?

No me gusta la programación funcional debido a la cantidad de personas que la usan en exceso, simplemente porque es genial, mostrar lo inteligentes que son, o porque se convierten en fundamentalistas que quieren que todo el código sea funcional, ya que esa es la única manera verdadera.

Para no generalizar, muchas veces puede ser útil utilizar elementos de programación funcional para mejorar la legibilidad y el mantenimiento del código. Escribir una lambda pequeña para pasar como un comparador a una función de clasificación, por ejemplo, mejora la ubicación del código y generalmente implica una sintaxis fácil de entender. El curry también puede ser una buena solución para escribir código más simple sin duplicar la lógica en todo el lugar.

La cuestión es que la gente hará todo lo posible para demostrar a los demás (ya ellos mismos) lo inteligentes que son. He visto mapas encadenados con filtros en los que agregar algo a esa lógica implicaba un malabarismo complejo para mantener, en lugar de escribir un simple bucle for.

¿Realmente importa que hayas hecho algo en una larga línea de código en lugar de 5? Especialmente si ese one-liner le toma a alguien más unos minutos para entenderlo. Las personas pueden abusar de la PF de muchas formas para crear monstruos que solo sus creadores comprenden. Es mucho más difícil joder un bucle for.

Escribir en sintaxis simple y clara es una habilidad similar para explicar conceptos avanzados a un niño de seis años. No hay mucho espacio para mostrar tu habilidad, pero aún así necesitas que comprendas profundamente lo que está sucediendo.

Al final, necesita hacer que el código funcione , y hacerlo mientras permite que otros puedan modificarlo fácilmente en el futuro . La programación funcional, si se usa solo cuando es necesario, ayuda con esto. El uso excesivo puede llevar fácilmente a proyectos personales dentro de una base de código más grande, y la mayoría de las personas no pueden usar solo los conceptos de programación funcional mínimos requeridos.

Algunas motivaciones comunes que he visto.

  • El resentimiento de un insulto percibido
  • Orgullo herido
  • Aversión a la abstracción (y orgullo de no usarla)

Hay una idea errónea generalizada de que la FP es solo para la magia súper inteligente y compleja que requiere un grado de Matemáticas para comprender. También está el hecho inevitable de que, al intentar explicar las posibles ventajas de la PF, implica que el imperativo no es tan bueno en algunas cosas. incluso si evita escrupulosamente hablar sobre algunos de los inconvenientes de la programación imperativa.

Así que algunas personas sienten que su inteligencia y habilidad están siendo insultadas, lo que no les da una sensación cálida y confusa.

Algunas personas no son tan personalmente insultadas como defensivas de las herramientas en las que han invertido mucho esfuerzo. Estaban orgullosas de dominar esas herramientas y no les gusta que se empañen, o incluso escuchar la implicación de que parte de ese esfuerzo podría tener sido mejor dirigido a otros lugares.

La aversión a la abstracción es una cosa deprimentemente común entre los desarrolladores (de la misma manera que la aversión a la automatización es fácil de encontrar entre los administradores de sistemas). En la década de los 90, cuando la POO aún era algo nuevo en el mercado, escuché a muchos desarrolladores atacarlo como una complicación inútil. ¿Qué estaba mal con la programación de procedimientos? La misma reacción se aplica a menudo a FP.

Puede encontrar muchas personas que son grandes admiradoras del lenguaje de procedimiento u OOP que es su herramienta de trabajo diario, pero que ni siquiera hacen un buen uso de las capacidades de abstracción (por ejemplo, los codificadores Java que siempre usarán el estilo C para los bucles en lugar de los genéricos). ). Ellos realmente piensan que la verdadera habilidad está en construir cada estructura de control cuidadosamente a mano, que

para (i = 0; i xs [i] = xs [i] * 2
}

es mejor en todos los sentidos que

mapa xs {_ * 2}

que la abstracción es perezosa, engañosa, complica las cosas, esconde la verdad, etc. Sea cual sea el nivel de abstracción con el que se sientan cómodos en el idioma de su elección, van a odiar la PF.

Porque algunas personas son ignorantes. Lo más probable es que el razonamiento se pueda rastrear hasta que “parece que no puedo envolver mi cabeza alrededor de él, por lo que debe ser estúpido”.

Una respuesta similar se aplica a “¿Por qué a algunas personas les gusta tanto la programación funcional?”.

Funcional, OOP, mecanografiado fuerte, mecanografiado suelto, nativo, interpretado, jit, detallado, conciso, antiguo, nuevo … son solo rasgos.

Diferentes idiomas / plataformas heredan esos rasgos.

Utilice la herramienta adecuada para realizar el trabajo.

A veces, el equipo y la plataforma preexistentes son el factor más importante para decidir cuál es la herramienta adecuada.

Incluso Cobol puede ser la herramienta adecuada, si tiene un equipo de ingenieros que solo conocen a Cobol.

Dicho esto, si la mayoría del equipo simplemente no tiene tiempo ni ganas de aprender programación funcional, y la administración no está realmente ansiosa por reemplazar al equipo … probablemente no sea la herramienta adecuada.

Veamos. Tenemos una lista de cadenas definidas como:

Lista list = Arrays.asList (“Funcional”, “programación”, “es”, “inteligente”);

Y queremos saber el número total de caracteres en esa lista.

Por supuesto, podríamos intentar hacerlo de la manera disfuncional de la programación:

int suma = 0;
para (String str: list)
suma = suma + str.length ();

Pero esto es demasiado código repetitivo para resolver un problema tan simple. Algunas personas también podrían argumentar que este código es difícil de entender.

Entonces, FP viene con una forma mejor y mucho más simple de hacer las cosas de la manera correcta:

int sum = list.stream ()
.map (s -> {
return s.length ();
})
.mapToInt (x -> x)
.suma();

Como podemos ver, las personas que odian la programación funcional no tienen ninguna razón para hacerlo. A primera vista, podemos entender completamente lo que hace el código anterior, incluso si se toma fuera de contexto , sin sudar. Todo gracias al poder de la FP.

Ahora, en serio. De hecho, he visto este código y eso es lo que me inspiró a responder. Como dijo Mihai Ciucu, uno de los problemas con la PF es la forma en que las personas abusan / lo usan.

Soy un gran fan de la programación funcional. Sin embargo, el paradigma es muy diverso, y creo que si lo hubiera abordado de una manera diferente, podría haberlo rechazado como algo incómodo.

El mero punto de la programación funcional es restringir el uso del lenguaje a las descripciones y evitar realizar comandos o imperativos. La ventaja de este enfoque es que ya no necesita preocuparse por el estado en el que se encuentra actualmente su programa, porque todo el estado se vuelve explícito. De esta manera, puede componer las partes de su programa sin ninguna restricción (además de asegurarse de que los tipos utilizados coincidan, que los sistemas de tipos presentes en muchos idiomas de PF ya verifican).

Sin embargo, cuando leo cosas sobre programación funcional, a menudo siento como si la programación funcional se tratara de mónadas y otros conceptos sofisticados de la teoría de categorías, y de escribir programas en un estilo sin puntos, usando algunos símbolos que nadie sabe cómo pronunciar. No lo es. Aprender estos conceptos puede ser un buen entrenamiento para el cerebro, pero de lo contrario, son solo una barrera contra la adaptación de nuevas personas a los proyectos existentes, en particular, si necesita aprender nuevos conceptos bajo la presión del tiempo, entonces simplemente se frustrará. Y empezar a odiarlos.

No los odio, pero no siento que disfruten de ellos la primera vez.
El concepto y la sintaxis me confundieron cuando comencé.
Como después de hello world, traté de hacer un bucle for. Pero no tienen para bucle, tienen mapa, reducir, filtrar. Yo estaba como: “¿Qué es esto? ¿Qué están haciendo dentro de esa función? ¿Por qué no hacen simplemente un bucle obvio? “.
¡Sí! Fui tan estúpido.

No entienden qué es la programación funcional y lo que dice. Se ha agravado porque muchos de los promotores más ruidosos de FP tampoco tienen idea de lo que es.

La programación funcional no es:

1- Encadenar funciones juntas.

2- Sobre quitar todos los elementos de OO. El único concepto “OO” que se mitiga es la mutación. Irónicamente, el uso excesivo de la mutación también va en contra del OO.

3- Pensar en términos de verbos en lugar de sustantivos.

No es nada de esto. Es simplemente una perspectiva de cómo cambian las cosas con el paso del tiempo. FP simplemente dice que las cosas no pueden ser destruidas. Esta destrucción de variables está en estado de mutación.

De lo contrario, FP tiene exactamente las mismas cosas disponibles en todos los otros idiomas que ama y adora, incluidos, entre otros, herencia, polimorfismo, bucle, etc.

Entonces, sí, si alguien te dice que odia la PF y citan cualquiera de las razones anteriores, están hablando desde la ignorancia.

Bueno, es cuestión de gustos. A algunos les gustan las cosas limpias y ordenadas con las que puedes razonar y mantener con confianza, y están dispuestos a aprender una nueva forma de pensar acerca de la codificación.
Otros, como piratear una gran bola de barro , son realmente buenos para mantener una tonelada de estados mutables en su cabeza y tienen la ventaja de la seguridad laboral garantizada.

PS: Probablemente al creador de PHP también le disguste la programación funcional. ¿Por qué debería importarte?

Probablemente porque es otro nuevo paradigma para aprender; mucha gente odiaba la programación orientada a objetos, y aunque no hay muchos desarrolladores que trabajan, incluso recuerdan el debate, mucha gente odiaba la programación estructurada cuando se introdujo.

La gente de TI se enorgullece de sus logros intelectuales; para algunos, un nuevo paradigma implica que su trabajo hasta la fecha (que hizo el trabajo muy bien gracias) es de alguna manera defectuoso. Para otros, es solo otra tecnología nueva, y si bien puede simplificar marginalmente algunos casos de uso, es difícil ver por qué se debe hacer un esfuerzo por aprender.

Personalmente, es solo otra herramienta en la caja de herramientas. Pero después de más de 40 años de programación, la caja de herramientas se está poniendo un poco pesada.

Si bien nunca he conocido a alguien que no le guste la programación funcional, ciertamente hay personas que no les gusta nada nuevo, incómodo o desafiante, y puedo ver cómo a alguien así le puede disgustar la PF.