En la página 839 de la segunda edición, Steve McConnell está discutiendo todas las formas en que los programadores pueden "conquistar la complejidad" en grandes programas. Sus consejos culminan con esta declaración:
"La programación orientada a objetos proporciona un nivel de abstracción que se aplica a algoritmos y datos al mismo tiempo , un tipo de abstracción que la descomposición funcional por sí sola no proporcionó".
Junto con su conclusión de que "reducir la complejidad es posiblemente la clave más importante para ser un programador efectivo" (misma página), esto parece ser un desafío para la programación funcional.
El debate entre FP y OO a menudo está enmarcado por los proponentes de FP en torno a los problemas de complejidad que se derivan específicamente de los desafíos de concurrencia o paralelización. Pero la concurrencia ciertamente no es el único tipo de complejidad que los programadores de software necesitan conquistar. Quizás enfocarse en reducir un tipo de complejidad aumenta enormemente en otras dimensiones, de modo que en muchos casos, la ganancia no vale el costo.
Si cambiamos los términos de la comparación entre FP y OO de cuestiones particulares como la concurrencia o la reutilización a la gestión de la complejidad global, ¿cómo se vería ese debate?
EDITAR
El contraste que quería destacar es que OO parece encapsular y abstraerse de la complejidad de los datos y los algoritmos, mientras que la programación funcional parece alentar a los detalles de implementación de las estructuras de datos más "expuestos" en todo el programa.
Véase, por ejemplo, Stuart Halloway (un defensor de Clojure FP) aquí diciendo que "la sobreespecificación de los tipos de datos" es "una consecuencia negativa del estilo idiomático de OO" y está a favor de conceptualizar una libreta de direcciones como un simple vector o mapa en lugar de un objeto de OO más rico con propiedades y métodos adicionales (no vectoriales y no cartográficos). (Además, los defensores del diseño orientado a dominios y OO pueden decir que exponer una libreta de direcciones como un vector o mapa sobreexpone los datos encapsulados a métodos que son irrelevantes o incluso peligrosos desde el punto de vista del dominio).