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: il giusto livello di teoria e tantissime sessioni di coding. Lavoreremo con TypeScript.
Obiettivo del corso: capire in modo semplice e pragmatico come applicare concretamente tecniche e principi di pure functional programming sfruttando Typescript.
Target audience
Il workshop si rivolge a software developer professionisti, sia nel Back-end che nel Front-end, con un livello di esperienza medio/alto con linguaggi mainstream tipizzati come Java/Kotlin/C#, e ovviamente TypeScript, e che siano già entrati in contatto con il mondo funzionale (e concetti come 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 i 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
- costruzione di un’applicazione completa con infrastruttura, dominio e testing.
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 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 – Learning Objectives
- Mettere in pratica i concetti di Functional Programming
- Definire i vincoli di dominio grazie all’uso del type system
- Scegliere se e quali Monad utilizzare per uno specifico use case
- 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 Typescript o un particolare framework/libreria!
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!
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.
Linguaggio di programmazione – TypeScript
Useremo Typescript (TS) come linguaggio di programmazione con il supporto delle librerie:
- fp-ts (https://github.com/gcanti/fp-ts): astrazioni per la programmazione funzionale.
- effect (https://github.com/Effect-TS/effect): functional effect system.
- ts-pattern (https://github.com/gvergnaud/ts-pattern): supporto al pattern matching esaustivo.
Per partecipare a questo corso è richiesta una conoscenza intermedia di TypeScript. I partecipanti devono avere familiarità con:
- tool chain tsc, ts-node, ts-jest, npm/yarn, ecc.
- primitive types: string, number, any, Array, ecc.
- define custom type alias e interface
- spread operator and destructuring
- the many ways to define a function
- use high-order functions (come array map or filter)
- union, literal and tagged union types
- type narrowing
- generic types and functions.
Un buon punto di partenza è la lettura del libro, gratuito e disponibile online, Typescript Handbook (https://www.typescriptlang.org/docs/handbook/intro.html).
Requisiti tecnici
Il workshop prevede che le esercitazioni avvengano sul tuo portatile, quindi avrai bisogno di installare/avere sul tuo laptop:
- Git (ed eventuali client grafici) per effettuare il clone del repository (https://github.com/doubleloop-io/applied-fp-workshop-ts) o di un suo fork.
- NodeJs, una versione LTS sia della serie 18.x che 20.x.
- Una versione recente di NPM oppure Yarn,
- un IDE, come WebStorm oppure un editor come Sublime, Visual Studio Code, Vim o Emacs con i relativi plugin/language server protocol installati.