Abstract
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.
Impareremo a utilizzare le teorie matematiche per costruire le giuste astrazioni, tra cui le famose Monadi, e lo faremo con varie sessioni di coding.
Il workshop mantiene un’impostazione estremamente pratica: poche slide e introduzioni, tantissimo codice.
Obiettivo del corso: applicare nel day-by-day tecniche di pure functional programming.
Target audience
Il workshop si rivolge a software developer professionisti con un livello di esperienza medio/alto con linguaggi mainstream come Java/C#/JavaScript/TypeScript/PHP e che siano già entrati in contatto con il mondo funzionale (per esempio concetti quali immutabilità, high-order functions, manipolazione di List tramite map/flatMap/reduce).
Durante il workshop faremo largo uso di concetti considerati avanzati nei tipici linguaggi di programmazione (come generics e subtype polymorphism), rendendo questo corso non adatto a chi sta iniziando il suo percorso nel mondo della programmazione.
Argomenti
Alcuni degli argomenti che tratteremo:
- capire l’impatto derivante dal lavorare con la referential transparency
- progettare grandi sistemi come small composable units
- modellare comportamenti, vincoli e dati del dominio tramite modules, functions e algebraic data types
- ottenere una conoscenza approfondita delle principali functional structures: Functor, Applicative, Monad, Foldable e Traversable
- come sopravvivere in un mondo colmo di side-effects.
Agenda
Sessione 1 – Gettiamo le basi:
- Programmazione funzionale – introduzione e benefici
- Scala refresh – case classes, objects, traits
- Building blocks – modules, functions e algebraic data types.
Sessione 2 – Side-effects (parte 1):
- Side-effects – come introdurli in un sistema privo di essi
- Funzioni pure, map e flatMap – padroneggiare i combinatori chiave
- Ricreiamo Option – sviluppo di una Monade built-in da zero.
Sessione 3 – Side-effects (parte 2):
- Custom Monad – sviluppo una Monade non built-in da zero
- Catalogo Monadi – vediamo le differenti semantiche
- Funzioni apply, fold, sequence, traverse – altri combinatori chiave.
Sessione 4 – Costruiamo una applicazione da zero (parte 1):
- Hexagonal Architecture – introduzione
- Type-Driven Design del dominio – approccio bottom-up
- Implementazione – riempiamo gli “spazi vuoti”
- Micro testing – test del solo dominio.
Sessione 5 – Costruiamo una applicazione da zero (parte 2):
- Hexagonal Architecture – dependency inversion principle
- Infrastruttura – persistenza, configurazione, logging
- Combinare Monadi – gestire/unire/convertire le diverse monadi.
Sessione 6 – Costruiamo una applicazione da zero (parte 3):
- Runtime loop – collegare dominio ed infrastruttura
- Macro testing – acceptance test dell’applicazione
- Run it – vediamola in esecuzione
- Wrap up – note finali.
Perché partecipare
Con questo workshop potrai andare a fondo sui principi base della programmazione funzionale e potrai vivere l’esperienza di sviluppo software in stile funzionale grazie a esercizi, esempi e discussioni in gruppo.
Matteo ti darà gli strumenti per farti valutare in maniera più oggettiva i pro e contro della programmazione funzionale: a te poi la decisione finale sul fare o meno il salto!
Tecnologia
Useremo Scala come linguaggio di programmazione. Essendo un linguaggio estremamente ibrido, Scala ci permetterà l’introduzione graduale dei concetti portando a casa risultati.
Per partecipare a questo corso è richiesta, quindi, una conoscenza base di Scala. Il miglior modo per prepararti è studiare l’ABC del linguaggio seguendo questo piccolo tutorial: https://docs.scala-lang.org/tour/basics.html
L’idea è di guadagnare abbastanza confidenza prima di entrare in aula (digitale) per poter poi seguire il workshop senza bloccarsi sulla sintassi del linguaggio.
Il workshop prevede che le esercitazioni avvengano sul tuo portatile, quindi avrai bisogno di installare/avere sul tuo laptop:
- Java JDK versione 8 o 11 (https://www.oracle.com/java/technologies/javase-jdk11-downloads.html)
- Scala, una versione della serie 2.13.x (https://www.scala-lang.org/download)
- SBT, una versione della serie 1.4.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.
Come si svolge
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.
Partiamo invece dal costruire la casa e usiamo le difficoltà come leva per introdurre e approfondire i vari mattoncini.
Il corso si svolgerà online e in diretta per un massimo di 12 persone: il docente e tutti i partecipanti saranno in video conferenza e avranno a disposizione una serie di strumenti digitali per interagire tra di loro e lavorare hands-on.
Nonostante la modalità online, il corso mantiene il suo approccio interattivo e partecipativo.
Per questo motivo, è richiesto che tutti i partecipanti abbiano la telecamera accesa per tutta la durata del workshop per una migliore fruizione e comunicazione.
Non sarà un corso passivo, fatto solo di slide e video pre-registrati.
Applicheremo alcuni principi del metodo Training from the back of the room, con prevalenza di attività su lectures.
Alle poche definizioni teoriche si affiancano numerosi esercizi ed attività pratiche.
La condivisione tra i partecipanti ed il supporto del trainer completano il quadro formativo.