A pagina 839 della seconda edizione, Steve McConnell sta discutendo tutti i modi in cui i programmatori possono "conquistare la complessità" nei grandi programmi. I suoi consigli culminano con questa affermazione:
"La programmazione orientata agli oggetti fornisce un livello di astrazione che si applica contemporaneamente agli algoritmi e ai dati , una sorta di astrazione che la decomposizione funzionale da sola non ha fornito."
Insieme alla sua conclusione che "ridurre la complessità è senza dubbio la chiave più importante per essere un programmatore efficace" (stessa pagina), ciò sembra praticamente una sfida alla programmazione funzionale.
Il dibattito tra FP e OO è spesso inquadrato dai sostenitori di FP intorno alle questioni della complessità che deriva specificamente dalle sfide della concorrenza o del parallelismo. Ma la concorrenza non è certamente l'unico tipo di complessità che i programmatori software devono conquistare. Forse concentrarsi sulla riduzione di un tipo di complessità lo aumenta notevolmente in altre dimensioni, in modo tale che per molti casi il guadagno non vale il costo.
Se spostassimo i termini del confronto tra FP e OO da questioni particolari come la concorrenza o la riusabilità alla gestione della complessità globale, come sarebbe il dibattito?
MODIFICARE
Il contrasto che volevo evidenziare è che OO sembra incapsulare e astrarre lontano dalla complessità dei dati e degli algoritmi, mentre la programmazione funzionale sembra incoraggiare a lasciare più "esposti" i dettagli di implementazione delle strutture di dati durante il programma.
Vedi, ad esempio, Stuart Halloway (un sostenitore di Clojure FP) che qui afferma che "l'eccessiva specificazione dei tipi di dati" è "conseguenza negativa dello stile idiomatico OO" e favorisce la concettualizzazione di una Rubrica come un semplice vettore o mappa invece di un oggetto OO più ricco con proprietà e metodi aggiuntivi (non vettoriali e non mappa). (Inoltre, i sostenitori di OO e Design guidato dal dominio possono dire che esporre una Rubrica come vettore o mappa sovraesporre i dati incapsulati a metodi che sono irrilevanti o addirittura pericolosi dal punto di vista del dominio).