Come presentare al tuo team lo stile funzionale di codifica?


10

Ho una situazione in cui la maggior parte delle persone nel mio gruppo proviene da un background di programmazione orientato agli oggetti con scarsa o nessuna comprensione della programmazione funzionale. Nemmeno le basi come le chiusure.

Qualche suggerimento su quale potrebbe essere un buon modo per introdurli allo stile di codifica funzionale? Un sacco di codice che facciamo può essere abbreviato se facciamo il modo funzionale per i nostri casi specifici.

Ho già tenuto un paio di presentazioni sui paradigmi funzionali e di codifica. Sfortunatamente non usiamo un linguaggio di programmazione funzionale adeguato come Haskell (fondamentalmente il codice legacy è in C, C ++, Java), quindi dobbiamo fare tutto ciò che è lì con questi.


11
Prima di chiedere come, chiedi perché . Stai lavorando a problemi che possono essere risolti più facilmente in uno stile funzionale rispetto a uno stile orientato agli oggetti? OO funziona davvero bene per molte cose (ecco perché ha avuto così tanto successo) e non così bene per gli altri. Dalla tua domanda, fa sembrare una specie di "Voglio fare il nostro codice in stile funzionale solo perché penso che la programmazione funzionale sia interessante, anche se non abbiamo un linguaggio che lo supporti e il team non sa come per farlo!" È una pessima idea. Ricorda, lo strumento giusto per il lavoro giusto.
Mason Wheeler,

2
@MasonWheeler: so perché abbiamo bisogno di funzionalità. Non nel bel linguaggio della cosa del mese. Troppo vecchio per quello.
Fanatic23,

1
Supponiamo che qualcuno conosca Haskell, potresti farlo funzionare nel tuo sistema?
JeffO,

4
Sembra che la programmazione funzionale stia risolvendo un problema che il tuo team non ha riscontrato. Sanno come codificare C, C ++ Java che non sono candidati naturali per la programmazione funzionale (implementare chiusure è semplicemente orribile in questi linguaggi).
James Anderson,

Risposte:


8

Luca Bolognese ha realizzato questa fantastica presentazione in cui introduce la programmazione funzionale (per presentare F #) usando un esempio di caffè che è davvero eccezionale e mi ha aiutato molto a presentare la programmazione funzionale ad amici e colleghi.

Puoi anche guardare una programmazione funzionale del mondo reale di Petricek che è un ottimo modo per iniziare a pensare funzionalmente secondo me.


quella presentazione è fantastica .. soprattutto perché è stata data da un vampiro !! LOL !! j / k .. i ragazzi hanno avuto carisma ..
hanzolo,

7

I tuoi colleghi programmano al di fuori del lavoro?

Considerando che non si fa alcun FP nella propria azienda, quindi convincere chiunque ad imparare una nuova lingua / paradigma quando non fanno nulla al di fuori dei loro compiti di lavoro diretto sarà quasi impossibile.

In tal caso, trova interessanti progetti che gli piacerà e siano collegati alla programmazione funzionale e mostrali. Non sei in grado di imporre un cambiamento, quindi dovrai seminare i semi se l'interesse a livello personale. È così che mi è stato presentato - garantito, dal mio migliore amico che lavora con me.

Oltre a ciò, la maggior parte delle persone scrive strumenti interni per semplificare le piccole attività. Prova a scriverne alcuni in un linguaggio funzionale. Chiunque voglia vedere il codice sarà esposto alla bellezza (si spera / possibilmente) del codice e probabilmente ti chiederà quando lo farà. Questa è un'opportunità per vendere l'idea.

Ricorda, ci sono linguaggi funzionali che funzioneranno sul tuo stack (scala / closing entrambi eseguiti su JVM). Non è "puramente funzionale" come lo è Haskell, ma è un buon inizio per un lungo viaggio.

Se hai il controllo sull'assunzione, assumi persone con qualche esperienza funzionale (o almeno interessate alla programmazione funzionale).

E infine ... potresti essere nella compagnia sbagliata se sei così appassionato di scrivere codice funzionale. Non cambierai il modo in cui l'intera azienda scrive software, specialmente se stanno facendo soldi e ancora di più non in un periodo di tempo ragionevolmente breve.

Si tratta solo di venderlo agli sviluppatori ... la gestione è completamente un'altra bestia.


2

Il passaggio dall'imperativa alla pura programmazione funzionale è un grande cambiamento con una ripida curva di apprendimento. Suggerirei di provare una transizione meno rapida e in tal caso hai molte opzioni. Ad esempio Python supporta la comprensione degli elenchi e le espressioni del generatore , Ruby supporta le funzioni di ordine superiore tramite blocchi di codice, ecc. Dato che hai menzionato Java, se tutti voi possiedi un background Java e desideri il pieno supporto della programmazione funzionale, puoi provare Scala .


2

Assumi (o chiedi al capo di assumere) un programmatore funzionale

Alla fine, questo non verrà cancellato dal resto della tua squadra.

Inoltre, come affermato in precedenza, incoraggiarli a scrivere codice in un linguaggio funzionale durante il loro tempo libero non farebbe male.


2

Se la programmazione funzionale renderà davvero la vita molto più facile nei tuoi casi, allora suggerisco di isolare uno di questi casi e di dimostrare ai tuoi colleghi implementazioni equivalenti sia in OO che in linguaggi funzionali.

Se la differenza di complessità è ampia come dici, allora dovrebbe parlare da sola.


2

+1 a faif per menzionare Scala: questo è iniziato come un commento su quella risposta ma è diventato troppo grande ...

Volevo imparare qualcosa sulla programmazione funzionale (proveniente da C / C ++, alcuni Python e Java arrugginito); Ho provato ad immergermi in profondità con Ocaml e poi Haskell e Just Didn't It It. Quindi ho provato Scala e ho scoperto che mi permetteva di iniziare a usare le cose funzionali in un ambiente confortevole OOP / Java-ey dove potevo facilmente tornare allo stile imperativo familiare quando un approccio funzionale mi sfuggiva. Alcuni potrebbero lamentarsi del "multiparadigmo", la natura "ibrida" del linguaggio significa che non sei mai costretto ad allungarti per diventare "puro funzionale", ma direi che significa che puoi essere pragmatico sulle cose e sapere che essere in grado di fare cose reali facilmente in qualche modo quando è necessario.

Un paio d'anni dopo (e oltre 200 soluzioni Project Euler Scala in Scala più tardi) l'incontro con il funzionale ha sicuramente influenzato il mio Python (molto più uso di mappe, filtri, riduzioni, lambdas, itertools, comprensione delle liste e funzioni di passaggio in giro di me ' mai pensato prima) e in misura minore C ++: forse un tentativo un po 'più di usare i trappings funzionali di STL, ma l'impatto principale è che mi sento molto più a mio agio nell'usare la mappa / ridurre i costrutti di TBB e mi piace molto come lo sfruttamento dell'immutabilità possa domare la complessità nel codice multithread.

Quindi, personalmente, se fossi in te, farei un caso per introdurre Scala in alcuni dei tuoi sviluppi nel mondo Java, preferibilmente mostrandone alcuni esempi che semplificano enormemente qualcosa e producono i benefici che rivendichi. Quello che succede dopo è tutto il business di "sostenere" nuove idee e guidare il cambiamento ... il che sembra che potrebbe essere un problema molto più grande.


1
@timeday Molto ben detto. Sono un ragazzo Java / OO. Ho raccolto Scala un anno fa. Ed è stato abbastanza impegnativo per me imparare il FP. Sto facendo un po 'alla volta e ci sto seduto. Non sto cercando di ottenerlo tutto in una volta.
chaotic3quilibrium,

1

Vorrei raccomandare un approccio graduale usando Scala. E consiglierei di iniziare con il libro del creatore di Scala, "Programmazione in Scala, 2a edizione" . Questo libro è FANTASTICO nell'introdurre lentamente alla Programmazione Funzionale (FP) usando Scala. E nel mostrare il passaggio verso FP, non rifiuta OO. In effetti, lo sfrutta. Sto facendo il mio secondo passaggio ora.

Fondamentalmente, Scala consente di eseguire Java / OO "senza punto e virgola". E poi si può provare un po 'di FP senza dover andare su tutto il maiale. Ad esempio, nell'addestrarmi a fare FP, in genere mi concentrerò sulla trasparenza referenziale a livello di metodo di classe, ma lascia che i miei metodi abbiano tutte le var-s, la mutabilità e l'imperativo necessarie per fare un primo passaggio a un'implementazione. Quindi, mi concentro sul rielaborare lentamente ogni metodo per spostarlo verso il FP puro. E uso anche il sito gemello di StackOverflow, CodeReview, per ottenere aiuto con la mia transizione mentale / di pensiero. Ecco un esempio di un post recente che ho fatto facendo proprio questa cosa.

Comunque, buona fortuna per il tuo viaggio FP. :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.