Quali sono alcune buone pratiche quando si cerca di insegnare la programmazione dichiarativa ai programmatori imperativi?

13

Mi sono offerto di fare un po 'di allenamento in F # presso la mia azienda e sembravano mostrare un certo interesse. In genere sono programmatori VB6 e C # che non seguono la programmazione con troppa passione. Detto questo, mi sembra che sia più facile scrivere codice corretto quando si pensa in una questione funzionale, quindi dovrebbero sicuramente trarne beneficio.

Qualcuno può offrire alcuni consigli su come dovrei avvicinarmi a questo?

idee

  • Non concentrarti sulla sintassi, ma concentrati su come utilizzare questa lingua e gli idiomi che promuove.
  • Prova a pensare ad esempi che sono difficili da scrivere in modo imperativo, ma si traducono in codice elegante se scritti in modo dichiarativo.
posta ChaosPandion 21.09.2010 - 21:21
fonte

4 risposte

5

La programmazione funzionale è una strana bestia per me. Ho imparato F # e Haskell, ho scritto alcuni semplici programmi e mi piace usarli, ma non ho mai avuto il "lampo di rivelazione" di cui alcune persone parlano. Ma lentamente, ho notato che sempre più stavo scrivendo un codice che doveva essere immutabile, suddividendo i compiti in funzioni più piccole e cercando di utilizzare i delegati molto di più. È una cosa che, se ti piace, si insinua nel tuo lavoro perché il valore di quelle tecniche è evidente.

Ora, più praticamente per l'allenamento: Trovo che due concetti fanno davvero clic su Programmazione funzionale come stile per me.

In primo luogo, lo stile FP si basa sulla struttura dei dati, non sulla composizione come in OOP. Ho guardato qualcosa come List in C # come un trucco intelligente per generare liste di caratteri sicuri, qualcosa che ha composto il tipo (stringa) nell'altro tipo (elenco). Dopo aver appreso FP, guardo i generici più come i Monad ora. List è una forma strutturata che il codice può assumere e decora le stringhe.

In secondo luogo, e forse più utile ai programmatori C # / ASP, è l'idea che FP funzioni sulla ricorsione e sulla ripetizione, mentre l'OOP lavora su mutabilità e loop. Tendo a pensare al ciclo di vita della pagina ASP come a una specie di FP ora: ogni richiesta viene elaborata da zero per l'intero ciclo di vita, quindi l'intera pagina è, in effetti, un grande programma che ricorre lentamente. Se riesci a restringere questa nozione, hai un'idea migliore di come un programma imperativo può essere strutturato attorno a loop di funzioni che contengono dati, operano su di essi e restituiscono nuovi dati invece di modificare quelli vecchi.

L'ostacolo più difficile, almeno per me, da superare con questo approccio è che sprofondare nella sensazione di sprecare tonnellate di risorse quando si usano oggetti mutabili farebbe risparmiare una tonnellata di memoria. In GC ci fidiamo e ho solo dovuto imparare a lasciare andare i problemi di rendimento finché non ho visto il programma girare e verificare se ce ne fossero, e in tal caso utilizzare un profiler per vedere esattamente dove si trovavano i problemi.

    
risposta data 12.10.2010 - 21:24
fonte
1

Vorrei raccomandare:

risposta data 23.09.2010 - 17:43
fonte
1

Molti linguaggi di programmazione imperativi (Ada, C / C ++, Turbo Pascal, FoxPro) hanno la capacità di definire il puntatore a funzioni o nomi letterali della procedura che possono essere valutati (e le procedure denominate dopo il letterale invocato) in fase di esecuzione.

L'esempio tradizionale è qsort in C. Basandosi sul fatto che è possibile definire algoritmi che eseguono algoritmi altri su strutture dati. Ovviamente questa è solo una parte di ciò che è la programmazione funzionale. Ma ho scoperto che questo è un buon punto di partenza per far sprofondare l'idea.

Una volta che è entrato, puoi iniziare a scavare in altre cose (immutabilità, condividere-niente, ecc.)

    
risposta data 13.10.2010 - 01:00
fonte
1

Can anyone offer up some advice on how I should approach this?

Certo:

  • Scegli con cura i tuoi esempi in modo che il tuo codice F # risolva non solo un problema elegantemente, ma anche molto più elegantemente di quanto sia possibile con C # / VB . La corrispondenza del modello e l'inferenza del tipo sono i tuoi amici qui.

  • Utilizza un esempio per evidenziare i vantaggi della nuova funzionalità trovata in F #, ad es. flussi di lavoro asincroni, modelli attivi.

  • Non abbiate paura di fornire esempi impuri utilizzando strutture di dati mutabili quando appropriato. F # è impuro per un motivo.

  • Non presentare F # come una panacea. Descrivi le applicazioni per le quali F # non è adatto così come quelle per le quali è molto più adatto di altri linguaggi .NET.

  • Indica i campioni di giocattoli che possono studiare e i progetti di successo del mondo reale che hanno utilizzato F # (Bing AdCenter, Halo 3 ecc.).

  • Spiega tutto in termini di come F # può aiutarli a risolvere i problemi più facilmente. Evita i dibattiti religiosi. Sii positivo su F #, non negativo su altre lingue. Armali con fatti e prove, ma lascia che traggano le loro conclusioni.

risposta data 29.12.2010 - 20:14
fonte

Leggi altre domande sui tag