Sono fondamentalmente d'accordo con la risposta di FrustratedWithFormsDesign , ma è anche chiesto come imparare il nuovo paradigma aiuta a sviluppare le proprie competenze. Posso fare un paio di esempi per esperienza personale.
Dall'apprendimento della programmazione funzionale, sono molto più consapevole di quali concetti con cui lavoro sono più naturalmente considerati come "oggetti" (generalmente dove la mutazione ha un senso) e quali sono più naturalmente considerati "valori" immutabili (penso che ci sia una distinzione importante , toccando dove OO ha senso contro quando FP ha senso, ma questa è solo la mia opinione).
Noto dove il mio codice include effetti collaterali e sono più attento a isolare quei luoghi, rendendo le mie funzioni più "pure". 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 collegata in una lista doppiamente collegata in Haskell, quindi noti cicli un po 'più in quella lingua.) Evitare cicli riduce la quantità di sincronizzazione devi fare in modo che le tue strutture di dati siano internamente coerenti, alleviando l'onere della condivisione di queste strutture tra thread.
Sono più propenso a fare affidamento sulla ricorsione (i costrutti ciclici ricorsivi dello schema sono cose di bellezza). Dijkstra ha toccato l'importanza di questo in Note sulla programmazione strutturata : gli algoritmi ricorsivi si mappano direttamente all'induzione matematica, che suggerisce sia l'unico mezzo per dimostrare intellettualmente i nostri cicli corretti. (Non suggerisco che dobbiamo dimostrare che il nostro codice è corretto, ma che più facile rendiamo possibile farlo da soli, più è probabile che il nostro codice sia corretto.)
Sono più propenso a utilizzare le funzioni di ordine superiore. Articolo di John Hughes, Perché la programmazione funzionale conta . Sottolinea la componibilità che si ottiene impiegando 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 incorporate nelle nuove lingue 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 C ++ ora ha espressioni lambda.