Abstract
Il corso Applied Functional Programming di Matteo Baglini è strutturato per mettere in pratica la programmazione funzionale. Si rivolge a chi ha già assaggiato questo paradigma e vuole fare un salto in avanti nella sua adozione.
Anche se trattiamo argomenti astratti e matematici, tra cui le famose Monadi, il workshop mantiene un’impostazione estremamente pratica: poche slide e introduzioni, tantissimo codice con varie sessioni di coding. Lavoreremo in Scala.
Obiettivo del corso: capire in modo semplice e pragmatico come applicare concretamente nel day-by-day tecniche e principi 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 funzioni di map/filter/reduce/etc).
Faremo uso di concetti considerati avanzati nei suddetti linguaggi di programmazione (come generics), 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 somma di small composable units
- modellare comportamenti, vincoli e dati del dominio tramite modules, functions e algebraic data types
- ottenere una conoscenza delle principali functional structures: Functor, Applicative, Monad, Foldable e Traversable
- come sopravvivere in un mondo colmo di side-effects.
Programma
Il workshop ha l’obiettivo di fornire ai partecipanti una padronanza pratica dei principali concetti e principi alla base della pure functional programming, per sfruttare al massimo queste tecniche nel quotidiano con il proprio linguaggio di programmazione e stack tecnologico.
Insieme studieremo e utilizzeremo strutture funzionali (ADT, Monad, etc) mentre realizziamo un’applicazione completa seguendo i buoni pattern di design e separazione delle responsabilità.
Ogni sessione è supportata dal codice che verrà scritto durante il workshop lavorando in piccoli gruppi autonomi e rivisto insieme al supporto del trainer.
Agenda
Sessione 1 – Gettiamo le basi
- Programmazione funzionale – introduzione e benefici
- Building blocks – modules, functions e algebraic data types.
- Pattern matching e multiple dispatch
Sessione 2 -Costruiamo una applicazione da zero (parte 1)
- Introduzione all’applicazione
- Vediamo i differenti layer architetturali
- Type-Driven Design del dominio – approccio bottom-up
- Implementiamo i comportamenti del dominio
- Micro testing – test del solo dominio.
Sessione 3 – Side-effects
- Side-effects – come introdurli in un sistema privo di essi
- Functor e Monad – padroneggiare i combinatori chiave
- Custom Monad – sviluppo una Monade non built-in da zero
- Catalogo Monadi – vediamo le differenti semantiche
- Applicative, Foldable e Traversable – vediamo altri combinatori.
Sessione 4 – Costruiamo una applicazione da zero (parte 2)
- Esponiamo il dominio tramite infrastruttura
- Macro testing – acceptance test dell’applicazione
- Run it – vediamola in esecuzione
- Wrap up – note finali.
Cosa impareremo
- Mettere in pratica i concetti di Functional Programming
- Applicare tecniche di pure functional programming nel day-by-day
- Un’approfondita conoscenza su diversi concetti ortogonali al linguaggio di programmazione e che potrai sfruttare immediatamente nel tuo attuale stack applicativo
- Warning: non è un corso per imparare Scala!
Perché partecipare
Con questo workshop potrai andare a fondo sui principi alla 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
Per partecipare a questo corso è richiesta una conoscenza base di Scala. Basta un minimo di conoscenza prima di entrare in aula (digitale) per poter poi seguire il workshop senza bloccarsi sulla sintassi del linguaggio.
Disclaimer: Buona parte dei partecipanti delle passate edizioni non aveva alcuna conoscenza pregressa di Scala e nessuno ha incontrato difficoltà durante il workshop.
Il miglior modo per prepararti è studiare l’ABC del linguaggio seguendo questi tutorial:
- Tour of Scala Basics: https://docs.scala-lang.org/tour/basics.html
- A 10-Minute Introduction to Scala: https://itnext.io/a-10-minute-introduction-to-scala-d1fed19eb74c
- Scala Tutorial (serie di micro video): https://youtube.com/playlist?list=PLS1QulWo1RIagob5D6kMIAvu7DQC5VTh3
Il workshop prevede che le esercitazioni avvengano sul tuo portatile, quindi avrai bisogno di installare/avere:
- Java JDK versione 11 o successive (https://www.oracle.com/java/technologies/javase-jdk11-downloads.html)
- Scala, una versione della serie 3.1.x (https://www.scala-lang.org/download)
- SBT, una versione della serie 1.6.x (https://www.scala-sbt.org/download.html)
- IntelliJ (anche Community Edition https://www.jetbrains.com/idea/download/) con lo Scala plugin (https://plugins.jetbrains.com/plugin/1347-scala)
- oppure Visual Studio Code (Vim o Emacs) con Scala Metals (https://scalameta.org/metals/).
Come si svolge
La parola chiave di questo workshop è “pratica”: i momenti di teoria saranno pochi, ma essenziali. Diciamo 30% teoria e 70% pratica.
Costruiamo una applicazione da zero e usiamo le difficoltà che incontreremo via via 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.
Infine, la condivisione tra i partecipanti ed il supporto del trainer completano il quadro formativo.