I sono sostanzialmente d'accordo con la risposta di FrustratedWithFormsDesign , ma hai anche chiesto in che modo l'apprendimento del nuovo paradigma aiuta a sviluppare le proprie capacità. Posso dare un paio di esempi dalla mia esperienza.
Da quando apprendo la programmazione funzionale, sono molto più consapevole di quali concetti con cui lavoro sono più naturalmente considerati come "oggetti" (generalmente dove la mutazione ha senso) e che sono più naturalmente considerati come "valori" immutabili (penso che ci sia una distinzione importante, che tocca dove OO ha senso se FP ha senso, ma questa è solo la mia opinione).
Ho notato dove il mio codice include effetti collaterali, e sono più attento a isolare quei luoghi, rendendo più funzioni "pure" delle mie funzioni. Ciò migliora notevolmente la testabilità del mio codice OO.
Sono più consapevole dei cicli nella mia rappresentazione dei dati. (Ad esempio, non penso che tu possa scrivere una funzione per convertire una lista concatenata in una lista doppiamente collegata in Haskell, quindi ti accorgi di un ciclo un po 'più in quella lingua). Evitare i cicli riduce la quantità di sincronizzazione è necessario che le strutture dei dati siano coerenti internamente, riducendo il carico di condivisione di queste strutture tra i thread.
Sono più propenso a ricorrere alla ricorsione (i costrutti di loop ricorsivo dello schema sono cose di bellezza). Dijkstra ha toccato l'importanza di questo in Note sulla programmazione strutturata - gli algoritmi ricorsivi mappano molto direttamente all'induzione matematica, che egli suggerisce è l'unico mezzo per dimostrare intellettualmente i nostri anelli corretti. (Non suggerisco di provare il nostro codice corretto, ma più facilmente riusciremo a farlo da soli, più è probabile che il nostro codice sia corretto.)
Sono più propensi a utilizzare le funzioni di ordine superiore. Il documento di John Hughes, Perché la programmazione funzionale è importante . Sottolinea la composabilità ottenuta dall'utilizzo di tecniche di programmazione funzionale, le funzioni di ordine superiore svolgono un ruolo importante.
Inoltre, come accennato nella risposta di Jetti , scoprirai che molte idee FP sono state incorporato nei nuovi linguaggi OO. Ruby e Python forniscono entrambe molte funzioni di ordine superiore, ho sentito LINQ descritto come un tentativo di portare il supporto per le comprensioni monadiche in C #, anche il C ++ ora ha espressioni lambda.