Avanscoperta
Applied Functional Programming Workshop

Applied Functional Programming Workshop

Using pure functional programming techniques to solve real-world problems

«Functional Programming is just programming with functions.
Functions are: Total, Deterministic and Pure. The rest is just composition you can learn over time.»

John De Goes

Il corso Applied Functional Programming di Matteo Baglini è strutturato per mettere in pratica la programmazione funzionale. Si rivolge a chi ha già assaporato questo paradigma e vuole fare un salto in avanti nella sua adozione.

Attraverso molteplici sessioni di coding impareremo ad utilizzare le teorie matematiche per costruire le giuste astrazioni, tra cui le famose Monadi.

Obiettivi del corso: applicare a partire dal “giorno dopo” il pure functional programming

Argomenti

Gli ingredienti per raggiungere il nostro scopo sono:

  • capire l’impatto derivante dal lavorare con la referential transparency
  • progettare grandi sistemi come small composable units
  • esprimere vincoli e interazioni tramite il type system
  • modellare comportamenti e dati del dominio tramite modules, functions e algebraic data types
  • modularizzare le responsabilità tramite type classes
  • ottenere una conoscenza approfondita delle principali functional structures: Functor, Applicative, Monad, Foldable e Traversable
  • scegliere la giusta Monad per il problema corrente
  • come sopravvivere in un mondo colmo di side-effects.

Agenda

1° giorno – Gettiamo le basi:

  • scala refresh: case classes, object, trait and implicit parameter
  • modellare i dati tramite algebraic data types (ADT)
  • usare gli effetti base: Option, Try, Either e Future
  • padroneggiare i combinatori chiave: map, flatMap e fold
  • astrarre l’effetto e type class pattern

2° giorno – Costruiamo una applicazione da zero (parte 1):

  • architettura esagonale
  • modellare dati e comportamento del dominio
  • usare le firme delle funzioni per guidare il design
  • una monade per ogni occasione

3° giorno – Costruiamo una applicazione da zero (parte 2):

  • introduciamo l’infrastruttura: persistenza, configurazione, logging
  • gestire le diverse monadi (Monad stack)
  • test dei vari livelli applicativi.

Perché partecipare

Con questo workshop potrai andare a fondo sui principi base e potrai vivere in maniera diretta l’esperienza di sviluppo software della programmazione funzionale.
Matteo ti darà gli strumenti per farti valutare in maniera più oggettiva i pro e contro di questo stile di programmazione: a te poi la decisione finale sul fare o meno il salto! 

Expect to get your hands dirty

La parola chiave di questo workshop è “pratica”: i momenti di teoria saranno pochi, ma essenziali.
Diciamo
30% teoria e 70% pratica.

Metaforicamente parlando, non verrà utilizzato un approccio “a catalogo” dove prima dobbiamo imparare tutti i mattoncini e solo alla fine possiamo provare a costruire la casa.
Piuttosto
partiamo dal costruire la casa e usiamo le difficoltà come leva per introdurre e approfondire i vari mattoncini.

Tecnologia

Useremo Scala come linguaggio di programmazione.

Scala non è un linguaggio che nasce con l’obiettivo di essere pure functional ma la versatilità del suo type-system e il fatto che gira su JVM hanno fatto sì che una vasta community di sviluppatori spingesse il linguaggio in questa direzione.

Inoltre, la natura ibrida di Scala ci permetterà l’introduzione graduale dei concetti.

Per partecipare a questo corso è richiesta, quindi, una conoscenza base di Scala.
Verrà data per scontata la conoscenza di:

  • l’uso di classi, oggetti e traits
  • l’uso di metodi, funzioni, valori e variabili
  • l’uso delle collezioni come: Seq, List, Map, ecc.
  • l’uso di companion object, implicit parameters e uniform access principle.

Se non conosci Scala, il miglior modo per prepararti è:

L’idea non è di diventare esperti ma guadagnare abbastanza confidenza per seguire il workshop senza bloccarsi sulla sinstassi del linguaggio.

Target audience

Sviluppatori e sviluppatrici professionisti con un livello di esperienza medio/alto con linguaggi main stream come Java/C#/JavaScript/PHP già entrati in contatto con il mondo funzionale (per esempio con high-order functions, Option/Stream type, list comprehension combinators).

Durante il workshop faremo largo uso di concetti considerati advanced nei tipici linguaggi di programmazione (per esempio generics e subtype polymorphism) rendendolo non adatto a programmatori alle prime esperienze.

F.A.Q.

Laptop e Strumenti: Devo portare il mio laptop?
Sì, è necessario che porti il tuo computer per questo workshop.

Prerequisiti: Quali sono i requisiti minimi per partecipare a questo corso? Cosa devo installare prima del corso?
Devi avere conoscenza base di Scala. Nel paragrafo Tecnologia sono presenti varie informazioni per colmare questo gap.

Il workshop prevede che le esercitazioni avvengano sul tuo portatile, quindi avrai bisogno di avere un laptop con installato:

  • Java JDK versione 8 o superiore
  • Scala, una versione della serie 2.12.x (https://www.scala-lang.org/download/)
  • SBT, una versione della serie 1.x (https://www.scala-sbt.org/download.html)
  • un IDE, IntelliJ (anche community edition) oppure un editor come Sublime, Visual Studio Code, Vim o Emacs.

Livello del workshop: È un workshop per principianti o per esperti?
L’ago della bilancia pende verso programmatori e programmatrici di livello medio/esperto.
Bisogna avere un buon livello di conoscenza del linguaggio e di concetti dell’OOP come per esempio polimorfismo, interfacce ed ereditarietà ed un livello introduttivo di Scala.

Io programmo in Java/Kotlin/C#/JavaScript/PHP/ecc, come mi può essere utile questo workshop?
Ad oggi non crediamo esista un linguaggio che non abbia costrutti della programmazione funzionale.
Basta avere first-class functions oppure costrutti come Future/Promise per essere già mani e piedi dentro al paradigma funzionale.
Partecipando a questo workshop ti porterai a casa un’approfondita conoscenza su molteplici concetti ortogonali al linguaggio e che potrai sfruttare immediatamente nel tuo attuale stack applicativo.
Ricordati però che è necessario avere una conoscenza base di Scala per poter partecipare (Vedi il paragrafo Tecnologia).

Info pratiche sul workshop

Lingua: italiano.
Orari: 9.30 – 17.30
Laptop: Sì, devi portare il tuo laptop. Leggi la sezione FAQ.
Numero massimo di partecipanti: 12
Dress code: Informale.
Compreso nel prezzo: coffee break e i pranzi insieme al docente e agli altri corsisti. Perché anche il networking è importante! :-)

Domande? Dubbi? Scrivici a info@avanscoperta.it.

Testimonials

«A journey of a thousand miles begins with a single step». This is the right single one: three days in the Functional Programming trenches. Thank you Matteo, thank you Avanscoperta!Nicola Fiorillo – Software architect and Developer

Se c’è una persona che può trasmettervi la potenza del functional programming, quello è Matteo. Preparato, instanacabile ma al tempo stesso incredibilmente umile.Francesco Strazzullo – Developer at FLOWING

Il corso di cui ancora non sai di avere bisogno!
Daniele Contini – Senior Software Developer at Facile.it

Si leggono moltissimi articoli che provano a spiegare concetti e teorie spesso troppo astratte per chi si sta avvicinando alla programmazione funzionale.
Matteo parte dalle basi teoriche per poi metterti davanti alle situazioni pratiche in cui i concetti di FP si possono finalmente iniziare ad apprezzare.
Una full-immersion guidata dopo la quale non sarai più lo stesso programmatore!Davide Fedrigo – Software Developer

Le risorse per imparare la programmazione funzionale sono tante, e la sola letteratura non ti dà il giusto feedback su quello che stai imparando. Applied Functional Programming è il corso giusto per imparare i concetti base del Functional Programming e come metterli in pratica sotto la guida attenta di un esperto.Felice Pagano

Durante questo corso Matteo mi ha finalmente dimostrato che i concetti alla base della programmazione funzionale non sono “puramente teorici”, ma possono essere applicati nel lavoro di tutti i giorni.
Con esempi mirati, il corso è un tour “da zero a cento” nel mondo funzionale.
Alessandro Melchiori – Software Architect Codice Plastico

Matteo non delude mai e anche questa volta ha preparato un corso denso di concetti della programmazione funzionale accompagnati da numerosi esempi “real-life”.
Tre giorni in un crescendo continuo! Partendo dai piccoli mattoncini di funzioni fino ad arrivare a interi programmi in cui prevale l’armonia: tutto cio’ che vale per il piccolo vale anche per l’intera applicazione senza eccezioni (nel vero senso della parola :-)).
Insomma se vuoi davvero, una volta per tutte, capire il pensiero funzionale non puoi perderti questo corso.
Emanuele DelBono – Software Engineer

 

Matteo Baglini

Da sempre focalizzato su semplicità e costo del cambiamento in modo da creare codebase che si adattano facilmente alla continua evoluzione del business.

Matteo ha maturato esperienza in molteplici domini ed ambienti tecnologici (web, desktop, embedded, mobile), con una forte attenzione a clean code, design evolutivo ed architettura.

La curiosità ed un costante desiderio di migliorare lo hanno portato a compiere un lungo viaggio fatto di studio e pratica alla scoperta di modi migliori di sviluppare software.

Approfondimenti

Video

Onion Architecture with Functional Programming sauce, talk di Matteo Baglini

Refactoring Legacy Code, intervista a Matteo Baglini con Alberto Brandolini.

Articoli

Let’s Get Functional (Programming)!: Gabriele Lana intervista Matteo Baglini.

I don’t like complicated codeintervista di Matteo Baglini a Michael Feathers.

Come e perché riprendere il controllo di Legacy Code, intervista a Matteo Baglini sul nostro blog.

Chi siamo, in breve :)

Avanscoperta è un ecosistema in espansione fatto di professionisti con una grande passione per l’apprendimento: ci piace imparare cose nuove e scambiare esperienze e idee, esplorando territori finora inesplorati in ambito software, nella sua accezione più ampia possibile.

Selezioniamo con attenzione gli argomenti più rilevanti e i migliori docenti da tutto il mondo, e diamo particolare importanza alle tecniche di insegnamento, preferendo approcci pratici e coinvolgenti.
Unisciti a noi! 🙂

Ti interessa questo corso?

Se hai delle domande specifiche, o vuoi ricevere maggiori informazioni, scrivici. Saremo felici di risponderti!







NEWSLETTER

Vuoi ricevere una volta a settimana i nostri contenuti esclusivi su tecnologia, sviluppo software, business e design?

ISCRIVITI ALLA NEWSLETTER :-)

Iscriviti alla newsletter!