Let's Get Functional (Programming)!

Gabriele Lana intervista Matteo Baglini

Una chiacchierata tra due dei nostri trainer di lunga data: Gabriele Lana e Matteo Baglini.

Si parla di sviluppo software, functional programming, Scala… e molto altro. Buona lettura! 🙂

Gabriele: Ciao Matteo, come stai?

Matteo: Tutto bene, grazie. 🙂

Gabriele: Avevo qualche dubbio su quali domande farti e come strutturare questa intervista, stavo complicando troppo la faccenda e sappiamo che questo non è bene.
Poi ho realizzato che io di domande da farti ne avevo a pacchi e tutto è diventato più semplice, quindi ti farò le stesse domande che ti farei se fossimo seduti ad un pub e non ci fosse nessuno ad ascoltarci, ok?

Matteo: Mi sembra un’idea fantastica, anche se ci manca la birra. Chiudiamo un occhio per questa volta. 😀

Gabriele: Quanto riesci ad applicare la programmazione funzionale al tuo lavoro di tutti i giorni?

Matteo: Molto. Alla fine non parliamo di una scelta binaria, o tutto o niente.
Vedo la programmazione funzionale come uno spettro di opzioni applicabili che vanno da micro attività (come modellare i dati tramite Algebraic Data Type) a macro (come separare il dominio puro dal paradiso dei side-effects ovvero l’infrastruttura).
Nel quotidiano riesco ad utilizzare una buona parte di queste opzioni a prescindere da linguaggio e piattaforma.
Questi ultimi, con le loro proprietà, ostacolano o agevolano il programmatore nell’adozione di functional programming.

Gabriele: Quali vantaggi pratici sei riuscito ad ottenere?

Matteo: Una più facile, ma soprattutto prevedibile, composizione dei moduli di un software. Questo offre, a cascata, tutta una serie di altri vantaggi pratici sia per la parte “statica” (la continua manutenzione del codice) sia per la parte “dinamica” (il comportamento in fase di esecuzione).
Infine un linguaggio comune e preciso per comunicare con gli altri programmatori. Puoi sapere o no cos’è un Monoid, ma non possono esistere due interpretazioni differenti del termine.

La domanda da un milione di dollari! (Foto scattata durante la prima edizione di “Applied Functional Programming, Milano, 20-21-22 novembre 2018)

Gabriele: Dal manifesto per la semplicità nello sviluppo del software: “Complexity is the greatest impediment to a software company’s growth and profitability.”    In molti considerano gli strumenti offerti dalla programmazione funzionale più complessi dei problemi che si propongono di risolvere, tu cosa ne pensi?

Matteo: Che ci sono passato anch’io. Credo che il reale problema sia più sulla diffusione e l’insegnamento della programmazione funzionale che non sugli strumenti offerti.
Ci sono molti concetti difficili da capire in profondità, come i Monad, ma molto semplici da mettere in campo e utili all’atto pratico.

Quello che voglio dire è che nel quotidiano si sfruttano strutture complesse nascoste da un’API piccola, semplice e precisa.
Il che mi ricorda uno dei punti su cui insiste di più John Ousterhout nel suo libro “A Philosophy of Software Design”: per ottenere una codebase manutenibile dobbiamo puntare ad avere “Deep modules with Shallow interfaces”.

Gabriele: Dal libro rosso (“Functional Programming in Scala” by Paul Chiusano and Runar Bjarnason) è passato qualche anno e di progetti in giro costruiti con un approccio funzionale iniziano ad essercene, qual è la tua impressione sulla manutenibilità di questi progetti? Le aspettative sono state raggiunte o dobbiamo ancora migliorare?

Matteo: Diciamo che me lo auguro, visto che ho diverse librerie in produzione. 😀
Scherzi a parte, aspettative raggiunte: siamo avanti anni luce in termini maturità rispetto alla data di uscita del libro (pubblicato nel 2014, NdA).
Questo naturalmente non vuol dire che non possiamo fare di meglio. Soprattutto nell’ecosistema Scala, negli ultimi anni c’è stata una continua corsa all’innovazione da parte della community open source.

Gabriele: Scala è un ibrido, da una parte ha permesso a molti di passare gradualmente alla programmazione funzionale, dall’altra non guida chi programma verso una desiderabile coerenza, siamo pronti per un linguaggio come Eta o per te è ancora troppo presto?

Matteo: Non seguo molto da vicino il progetto Eta quindi non saprei indicare quanto è maturo.
Quello che posso dire è che l’approccio di Eta, ovvero linguaggio per “eletti” che gira su un runtime per “tutti”, rappresenta un’ottima strategia. La stessa adottata nel front-end con linguaggi come Elm o ReasonML.
Però nonostante gli sforzi, tutti questi linguaggi, continuano a essere molto di nicchia in confronto ai classici Java/Javascript/PHP/etc.

Credo che le cause principali siano due: 1. il tanto, troppo, vecchio codice da manutenere scritto con linguaggi mainstream; 2. la difficoltà a trovare sviluppatori in grado di lavorare con questi nuovi linguaggi.

Gabriele e Matteo durante il Retreat #2 di Avanscoperta (Bologna, gennaio 2019)

Gabriele: Per ottenere dei buoni risultati, quanta parte è imparare le fondamenta della programmazione funzionale e quanta parte è imparare Scala?

Matteo: Per un neofita su entrambi gli argomenti direi 70/30. Vedo Scala e gli altri linguaggi di programmazione come un adapter per mettere in campo functional programming e non il contrario.
Il grosso dello sforzo è sull’apprendere le fondamenta, fatto quello il resto è in discesa.

Gabriele: Quale percorso di studio consiglieresti per imparare la programmazione funzionale?

Matteo: Da un lato dobbiamo imparare le astrazioni, sia le proprietà in isolamento sia quello che accade quando le andiamo a combinare. Dall’altro per avere un ritorno di investimento dobbiamo capire come queste astrazioni ci permettano di risolvere i problemi quotidiani e come si sposano con il linguaggio/runtime di turno.
Non credo esista un ordine preciso piuttosto un continuo iterare su questi due aspetti: astratto e pratico.

Gabriele: Il workshop “Applied Functional Programming” che terrai il 12, 13 e 14 giugno 2019 a Milano come si colloca nel percorso di apprendimento della programmazione funzionale?

Matteo: Visto che Scala potrebbe non essere il linguaggio quotidiano per i partecipanti, spendiamo un po’ di tempo della prima mattina a scaldare i motori con qualche esercizio pratico sulla manciata di feature del linguaggio che utilizziamo maggiormente (case class/pattern matching/etc).
Da lì a tutta dritta con i fondamenti di functional programming. Iniziamo con una visione del micro trattando con diverse sessioni come fare design e comporre/combinare tipi, funzioni e valori.
Per poi finire sul macro e trattare come fare design e comporre/combinare i layers applicativi con diverse sessioni per sviluppare un’applicazione completa.

Per tutti e tre i giorni le sessioni alterneranno una breve introduzione al tema a una serie di esercizi pratici per andare più in profondità.

Alcuni scatti dalla prima edizione di “Applied Functional Programming” (Milano, 20-21-22 novembre 2018).

Gabriele: A questo punto vado un po’ di più sul personale e su un tema a me caro: qual è la tua routine di studio ed esercizio?

Matteo: Dedico circa un’ora, un’ora e mezzo al giorno alla formazione. Una parte di questo tempo è soggetta a pianificazione, attingendo dalle varie wish-list di libri, articoli, video, codebase da studiare ed esercizi.
Grazie a questa pianificazione ho la garanzia di riuscire a portare avanti lo studio a lungo termine, quello necessario per i temi che richiedono molto tempo e dedizione.

Il resto del tempo lo uso come un buffer libero per riuscire a soddisfare le necessità a breve termine dettate tipicamente da curiosità/interesse/hype del periodo/giornata.

Gabriele: Degli strumenti che usi tutti i giorni nella tua professione, c’è qualcosa di cui non faresti mai a meno? Perché?

Matteo: Tutti e nessuno. Da un lato mi piace curare e affilare i miei strumenti (la shell, VIM, custom shortcut da tutte le parti, persino con Windows) e sento che senza di essi sarei perso.
Dall’altro mi “torturo” cambiando o abbandonando periodicamente quegli stessi strumenti che ho “affilato” al fine di migliorare la mia esperienza e resilienza.

Gabriele: Quali sono le caratteristiche più importanti che cerchi in un programmatore? Quali sono gli aspetti che valuti?

Matteo: Mestiere difficile quello di valutare un programmatore, ma direi le seguenti:

  • la determinazione per continuare a studiare e migliorare nel tempo,
  • la voglia di mettersi in gioco, di rischiare,
  • la passione e cura per quello che fa,
  • il desiderio di confrontarsi e condividere con gli altri.

Gabriele: Domanda finale, giusto per ricordare che non siamo solo codice: Cosa fai per rilassarti e per divertirti?

Matteo: Veramente esiste qualcosa oltre al codice? 😀
Buona parte del tempo libero è dedicato alla famiglia. Quando anche loro mi concedono la libera uscita ecco che entra in gioco la moto. Mi piace sia l’aspetto turismo/viaggi, sia quello sportivo/pista.

Ma se devo proprio dirla tutta sono “addicted” a ogni tipo di mezzo che può essere pilotato, in particolare se ha un motore.

È lui o non è lui? Cerrrto che è lui: il re delle due ruote… Mister Matteo Baglini!

Gabriele: Grazie Matteo per il tuo tempo, ci vediamo allora il 12 giugno a Milano?

Matteo: Ma sì dai, dovrei esserci anch’io. 🙂
Grazie a te, è stato un vero piacere.

Crediti foto: Maicol Rossellini / Unsplash: Gabriel Izgi, Fotis Fotopoulos.

Learn with Matteo Baglini

Matteo è il trainer di Applied Functional Programming Workshop.

La lista completa dei nostri corsi: Avanscoperta Workshops.

Matteo Baglini

Software craftsman, technical coach, clean code addicted and co-founder of doubleloop.io

Gabriele Lana

I proudly call myself "Software Craftsman". I began to love this profession as a child at the end of the '80s and this feelings never left me since then.

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.