La programmazione funzionale: un'opportunità, secondo openmind

La programmazione funzionale: un'opportunità, secondo openmind

Michele Riva dell'italiana openmind ha parlato di programmazione funzionale a Codemotion Milano, descrivendo i vantaggi prnicipali derivanti dall'uso di questo paradigma per limitare la complessità e facilitare il lavoro degli sviluppatori

di pubblicata il , alle 11:01 nel canale Innovazione
openmind
 

La programmazione funzionale nasce negli anni '50 come alternativa ai linguaggi imperativi comunemente utilizzati. Alla base del concetto di programmazione funzionale c'è il concetto di utilizzo delle funzioni come argomento e come risultato di altre funzioni, come avviene nel lambda calcolo. Caratteristiche intrinseche e limitazioni implementative hanno a lungo rilegato la programmazione funzionale al mondo accademico e hobbistico. Ma questa realtà sta mutando e la programmazione funzionale è sempre più utilizzata, grazie alle sue proprietà di sicurezza e adattabilità ad ambienti paralleli. Ne ha parlato Michele Riva, ingegnere del software presso openmind, al Codemotion di Milano tenutosi a fine ottobre.

OpenMind e la programmazione funzionale: un paradigma sempre più diffuso

Michele Riva di openmind a Codemotion 2019

Per lungo tempo la programmazione funzionale è stata ritenuta inadatta a svolgere compiti nel "mondo reale". Ma già oggi è possibile vedere i risultati dell'utilizzo di linguaggi funzionali: WhatsApp utilizza Erlang e gestiva 900 milioni di utenti con solo 50 sviluppatori nel 2015; il 90% traffico Internet a livello mondiale passa per switch il cui software è scritto in Erlang; Facebook ha migrato quasi interamente Messenger verso ReasonML; Firefox ha parti scritte in Rust, che supporta la programmazione con il paradigma funzionale. Questo paradigma di programmazione ha già un impatto reale sulle vite quotidiane di moltissime persone.

Ma qual è il vantaggio principale della programmazione funzionale? La chiarezza e la scrittura di codice conciso sono i principali vantaggi dei linguaggi funzionali, assieme alla maggiore adattabilità ad ambienti concorrenti (multithread, ad esempio). Questi elementi, messi insieme, rendono il codice più semplice da mantenere ed evolvere, nonché meno a rischio di contenere bug: codice più leggero e conciso è più facile da leggere ed analizzare, e dunque è più facile trovare problemi. Ciò in aggiunta a ciò, i linguaggi stessi offrono meno opportunità per i problemi di verificarsi per via di come sono strutturati.

“Molte grandi aziende", commenta Michele Riva, "stanno lentamente migrando da linguaggi di progammazione object-oriented/imperativi a linguaggi funzionali. Questo essenzialmente perché i software scritti con linguaggi “mainstream” diventano sempre più difficili da testare, mantenere, estendere e meno resilienti. Twitter, ad esempio, ha superato notevoli problemi di scalabilità migrando buona parte della propria codebase da Ruby a Scala, un linguaggio di programmazione funzionale.”

openmind si occupa, tra le altre cose, di trasformazione digitale e vede nei linguaggi funzionali un'opportunità importante: per gestire la sempre maggiore complessità del mondo moderno è necessario concentrarsi su ciò che conta, anziché sui dettagli implementativi che rendono più difficile l'analisi, la scrittura e la manutenzione del codice. Utilizzare paradigmi di programmazione più gestibili, dunque, è quasi un imperativo.

Ulteriori informazioni su openmind sono reperibili sul relativo sito Web.

15 Commenti
Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - info
cignox105 Novembre 2019, 11:12 #1
Posso capire la loro utilitá. Ma devo dire che, per quel pochissimo che ho usato Ocaml (o uno simile, é passato tanto tempo) l'ho trovato sia come sintassi che come utilizzo molto meno divertenti dei linguaggi derivati come sintassi dal C.

Ammetto peró che alcune proprietá (come l'assenza di side-effects) siano davvero interessanti. In C/C++ c'é il const, ma molti altri linguaggi non hanno neppure quello...
pabloski05 Novembre 2019, 11:47 #2
Originariamente inviato da: cignox1
Posso capire la loro utilitá. Ma devo dire che, per quel pochissimo che ho usato Ocaml (o uno simile, é passato tanto tempo) l'ho trovato sia come sintassi che come utilizzo molto meno divertenti dei linguaggi derivati come sintassi dal C.

Ammetto peró che alcune proprietá (come l'assenza di side-effects) siano davvero interessanti. In C/C++ c'é il const, ma molti altri linguaggi non hanno neppure quello...


Il problema è che il const non t'impedisce di manipolare strutture dati globali e nemmeno d'implementare funzioni impure.

La programmazione funzionale va molto oltre e, nel farlo, garantisce pure la thread safety.

Ed è quest'ultima la ragione per cui TUTTI i linguaggi stanno implementando costrutti funzionali.
phmk05 Novembre 2019, 12:59 #3

Chissà se e quando...

Ci passano Windows ed Office ...
LukeIlBello05 Novembre 2019, 13:22 #4
boh ma che è sta roba.. io mi ricordo del LISP come linguaggio funzionale, ma sta roba qui mai sentita.. "costrutti funzionali"... traducendo?
mirkonorroz05 Novembre 2019, 18:06 #5
La prima volta che ho sentito di Erlang era perche' Wings 3D era (ed e') scritto in tale linguaggio.
frank808505 Novembre 2019, 18:08 #6
il punto è capire se un linguaggio lazy ci serva davvero per quello che stiamo facendo,
e se davvero ci serve poter definire funzioni al volo senza una definizione formale come nei linguaggi imperativi (java ha copiato il concetto di lambda espressione nella versione 8)
altre importanti vantaggi da aggiungere? io trovo che quando il codice deve leggerlo qualcun altro una definizione 'classica' di un metodo sia sempre più comprensibile
p.s io sono fermo ad Haskell quindi non so se introduce novità importanti l'Erlang
zappy06 Novembre 2019, 18:23 #7
articolo incomprensibile per chi già non è un programmatore esperto.
Slater9107 Novembre 2019, 13:13 #8
Originariamente inviato da: zappy
articolo incomprensibile per chi già non è un programmatore esperto.


Oddio, ho fatto di tutto per semplificare la cosa: non ho parlato di thread safety, di assenza di effetti collaterali, di funzioni lambda e così via, che sono in realtà la parte più caratterizzante dei linguaggi funzionali. L'unica parte che magari non è immediatamente comprensibile a chi non abbia programmato è "il concetto di utilizzo delle funzioni come argomento e come risultato di altre funzioni, come avviene nel lambda calcolo", ma basta cercare cos'è una funzione per capire questo concetto di base. Semplificare più di così non è possibile (e non è certo una cosa da programmatori esperti, dato che io stesso non lo sono).
È ovvio che per comprendere un articolo sulla programmazione in una testata specialistica bisogna avere un minimo di basi della materia specifica, così come per leggere un articolo su Le Scienze bisogna avere almeno un'infarinatura delle principali materie scientifiche o per leggere un articolo di commento a una nuova architettura di CPU bisogna avere delle basi di conoscenza sui principali elementi (clock, cache, core, controller di vario genere sono solo alcuni dei concetti minimi che si dà per scontato che chi legge un articolo del genere conosca). Non è possibile spiegare tutto da zero ogni volta: un po' di sforzo devono farlo anche i lettori, che magari possono imparare qualcosa di nuovo facendo delle ricerche in proprio.
pabloski07 Novembre 2019, 16:02 #9
Originariamente inviato da: frank8085
non so se introduce novità importanti l'Erlang


il modello di programmazione concorrente basato su attori

del resto Erlang nasce principalmente per quello
recoil07 Novembre 2019, 16:06 #10
Originariamente inviato da: Slater91
Oddio, ho fatto di tutto per semplificare la cosa: non ho parlato di thread safety, di assenza di effetti collaterali, di funzioni lambda e così via, che sono in realtà la parte più caratterizzante dei linguaggi funzionali. L'unica parte che magari non è immediatamente comprensibile a chi non abbia programmato è "il concetto di utilizzo delle funzioni come argomento e come risultato di altre funzioni, come avviene nel lambda calcolo", ma basta cercare cos'è una funzione per capire questo concetto di base. Semplificare più di così non è possibile (e non è certo una cosa da programmatori esperti, dato che io stesso non lo sono).
È ovvio che per comprendere un articolo sulla programmazione in una testata specialistica bisogna avere un minimo di basi della materia specifica, così come per leggere un articolo su Le Scienze bisogna avere almeno un'infarinatura delle principali materie scientifiche o per leggere un articolo di commento a una nuova architettura di CPU bisogna avere delle basi di conoscenza sui principali elementi (clock, cache, core, controller di vario genere sono solo alcuni dei concetti minimi che si dà per scontato che chi legge un articolo del genere conosca). Non è possibile spiegare tutto da zero ogni volta: un po' di sforzo devono farlo anche i lettori, che magari possono imparare qualcosa di nuovo facendo delle ricerche in proprio.


questo sicuramente e per quanto mi riguarda qualche articolo come questo ci sta, poi non so se il target medio del sito è interessato a questo genere di argomenti ma immagino che un'idea ce l'abbiate voi

niente Codemotion per me quest'anno quindi mi sono perso il talk ma è un argomento che ogni tanto salta fuori e che mi interessa anche se devo ammettere che nella mia code base non ne faccio largo uso, per ora

Devi effettuare il login per poter commentare
Se non sei ancora registrato, puoi farlo attraverso questo form.
Se sei già registrato e loggato nel sito, puoi inserire il tuo commento.
Si tenga presente quanto letto nel regolamento, nel rispetto del "quieto vivere".

La discussione è consultabile anche qui, sul forum.
 
^