Come introdurre la tua squadra nello stile funzionale della codifica?

9

Ho una situazione in cui la maggior parte delle persone nel mio gruppo proviene da uno sfondo di programmazione orientato agli oggetti con poca o nessuna comprensione della programmazione funzionale. Nemmeno basi come 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à dato un paio di presentazioni sui paradigmi funzionali e di codifica. Sfortunatamente non usiamo un linguaggio di programmazione funzionale come Haskell (fondamentalmente il codice legacy è in C, C ++, Java), quindi dobbiamo fare tutto ciò che è lì con questi.

    
posta Fanatic23 18.04.2012 - 18:54
fonte

7 risposte

8

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

Puoi anche guardare una Real World Functional Programming di Petricek che è un ottimo modo per iniziare a pensare funzionalmente in la mia opinione.

    
risposta data 18.04.2012 - 19:00
fonte
7

I tuoi colleghi codificano al di fuori del lavoro?

Considerando che non fai FP nella tua azienda, convincere chiunque a imparare una nuova lingua / paradigma quando non fanno nulla al di fuori delle loro attività di lavoro diretto sarà quasi impossibile.

Se lo fanno, allora trova progetti interessanti che gradiranno che siano correlati alla programmazione funzionale e mostrali. Non sei nella posizione di imporre un cambiamento, quindi dovrai seminare i semi se ti interessi a livello personale. È così che mi è stato presentato - concesso dal mio migliore amico che lavora con me.

Al di fuori di questo, molte persone scrivono strumenti interni per semplificare le piccole attività. Prova a scrivere alcuni di loro in un linguaggio funzionale. Chiunque voglia vedere il codice sarà esposto alla bellezza (auspicabilmente / possibilmente) del codice e probabilmente ti chiederà di farlo quando lo faranno. Questa è un'opportunità per vendere l'idea.

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

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

E infine ... potresti trovarti nell'azienda sbagliata se sei così appassionato di scrivere codice funzionale. Non cambierai il modo in cui tutta la tua azienda scrive software, specialmente se stanno facendo soldi e ancor più specialmente non in un tempo ragionevolmente breve.

Questo è tutto per venderlo agli sviluppatori ... la gestione è completamente un'altra bestia.

    
risposta data 18.04.2012 - 19:32
fonte
2

Passare dalla programmazione funzionale imperativa alla pura è un grande cambiamento con una curva di apprendimento ripida. Suggerirei di provare una transizione meno rapida, e in tal caso hai molte opzioni. Ad esempio, Python supporta le list comprehensions e le espressioni del generatore , Ruby supporta funzioni di ordine superiore tramite blocchi di codice, ecc. Visto che hai citato Java, se tutti voi avete uno sfondo Java e volete una programmazione funzionale completa supporto, puoi provare Scala .

    
risposta data 18.04.2012 - 19:42
fonte
2

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

Alla fine, questo sta andando a rubare il resto della tua squadra.

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

    
risposta data 18.04.2012 - 23:24
fonte
2

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

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

    
risposta data 19.04.2012 - 09:24
fonte
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 a immergermi nel profondo con Ocaml e poi Haskell e Just did not Get It. Poi ho provato Scala e ho scoperto che avrei potuto iniziare a utilizzare le cose funzionali in un ambiente OOP / Java-ey constrongvole in cui avrei potuto facilmente ricorrere a uno stile imperativo familiare quando un approccio funzionale mi sfuggiva. Qualcuno potrebbe lamentarsi della natura "multiparadigm", "ibrida" del linguaggio: non sarai mai costretto ad allungare te stesso per andare "puramente funzionale", ma direi che significa che puoi essere pragmatico per le cose e sapere che lo farai essere in grado di ottenere cose reali fatte facilmente in qualche modo quando è necessario.

Da un paio di anni in poi (e più di 200 versioni di Eulero Scala di Scala in Scala) l'incontro con il funzionale ha decisamente influenzato il mio Python (molto più uso di mappe, filtri, riduzioni, lambda, itertools, list comprehensions e funzioni di passaggio intorno di quanto avessi mai pensato prima) e in misura minore C ++: forse un po 'più di tentativo di usare le trappole funzionali di STL, ma l'impatto principale è che sono molto più a mio agio nell'utilizzare la mappa / ridurre i costrutti di TBB e mi piace davvero come sfruttare l'immutabilità può domare la complessità nel codice multithreaded.

Quindi personalmente, se fossi in te, starei cercando di introdurre Scala in alcuni dei tuoi sviluppi nel mondo Java, preferibilmente mostrando alcuni esempi di ciò che semplifica enormemente qualcosa e producendo i benefici che rivendichi. Quello che succede dopo è l'intera faccenda di "sostenere" nuove idee e guidare il cambiamento ... il che potrebbe sembrare un problema molto più grande.

    
risposta data 18.04.2012 - 23:24
fonte
1

Vorrei raccomandare un approccio graduale usando Scala. E consiglierei di iniziare con il libro dei creatori di Scala, "Programmazione in Scala, 2a edizione" . Questo libro è FANTASTICO introducendo lentamente la programmazione funzionale da uno a (FP) usando Scala. E nel mostrare il passaggio verso FP, non rifiuta OO. In effetti, lo sfrutta. Sto facendo il mio secondo passaggio attraverso di esso ora.

In sostanza, Scala consente di eseguire Java / OO "senza punto e virgola". E poi si può provare un po 'di FP senza dover fare del male. Ad esempio, nell'addestrare me stesso a fare FP, in genere mi concentrerò sulla trasparenza referenziale a livello di metodo di classe, ma i miei metodi hanno comunque molti var-s, mutabilità e imperativo, come è necessario per me fare un primo passaggio a un'implementazione. Quindi, mi concentro su rielaborare lentamente ogni metodo per spostarlo verso la pura FP. E uso anche il sito gemello per StackOverflow, CodeReview, per ottenere aiuto con la mia transizione mentale / mentale. Ecco un esempio di un post recente che ho fatto facendo proprio questa cosa.

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

    
risposta data 19.04.2012 - 17:27
fonte

Leggi altre domande sui tag