Na página 839 da segunda edição, Steve McConnell está discutindo todas as maneiras pelas quais os programadores podem "conquistar a complexidade" em grandes programas. Suas dicas culminam com esta afirmação:
"A programação orientada a objetos fornece um nível de abstração que se aplica a algoritmos e dados ao mesmo tempo , um tipo de abstração que somente a decomposição funcional não fornece".
Juntamente com sua conclusão de que "reduzir a complexidade é indiscutivelmente a chave mais importante para ser um programador eficaz" (mesma página), isso parece um grande desafio à programação funcional.
O debate entre FP e OO é frequentemente enquadrado pelos proponentes do FP em torno das questões de complexidade que derivam especificamente dos desafios de concorrência ou paralelização. Mas a simultaneidade certamente não é o único tipo de complexidade que os programadores de software precisam conquistar. Talvez o foco na redução de um tipo de complexidade a aumente bastante em outras dimensões, de modo que, em muitos casos, o ganho não valha o custo.
Se mudarmos os termos da comparação entre FP e OO de questões específicas como concorrência ou reutilização para o gerenciamento da complexidade global, como seria esse debate?
EDITAR
O contraste que eu queria destacar é que o OO parece encapsular e abstrair da complexidade dos dados e dos algoritmos, enquanto a programação funcional parece encorajadora, deixando os detalhes de implementação das estruturas de dados mais "expostos" ao longo do programa.
Veja, por exemplo, Stuart Halloway (um proponente do Clojure FP) aqui dizendo que "a superespecificação dos tipos de dados" é "consequência negativa do estilo OO idiomático" e favorecendo a conceitualização de um AddressBook como um vetor ou mapa simples em vez de um objeto OO mais rico com propriedades e métodos adicionais (não-vetoriais e não semelhantes a mapl). (Além disso, os proponentes OO e Design Orientado a Domínio podem dizer que a exposição de um Catálogo de Endereços como vetor ou mapa superexpõe os dados encapsulados a métodos irrelevantes ou até perigosos do ponto de vista do domínio).