Avanscoperta
Applied Functional Programming Workshop

Applied Functional Programming Workshop

Tecniche di Functional Programming per risolvere problemi concreti

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:

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.

F.A.Q.

Prerequisiti: Quali sono i requisiti minimi per partecipare a questo corso? Cosa devo installare prima del corso?
È richiesta una onoscenza base di Scala. Nel paragrafo Tecnologia sono presenti varie informazioni per colmare questo gap, informazioni che riportiamo qui sotto:

Il workshop prevede che le esercitazioni avvengano sul tuo portatile, quindi avrai bisogno di installare/avere sul tuo laptop:

Livello del workshop: È un workshop per principianti o per esperti?
L’ago della bilancia pende verso software developer 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à e, come detto, una conoscenza base di Scala.

Io programmo in Java/Kotlin/C#/JavaScript/PHP/ecc, come mi può essere utile questo workshop?
A oggi non crediamo esista un linguaggio che non abbia costrutti della programmazione funzionale. In passato, tra i partecipanti abbiamo ospitato programmatori Java, Kotlin, C#, PHP, JavaScript, TypeScript, Erlang, Elixir.

È sufficiente 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 diversi concetti ortogonali al linguaggio e che potrai sfruttare immediatamente nel tuo attuale stack applicativo.

Ricordati però che, come già detto, è necessario avere una conoscenza minima di Scala per poter partecipare (vedi il paragrafo Tecnologia).

Cosa devo assolutamente avere per potermi iscrivere a questo corso online?
Se possiedi un computer/tablet, una rete stabile (almeno 20 Mbps in download e 10 Mbps in upload), cuffie, microfono e videocamera, allora puoi iscriverti al corso senza problemi. Un paio di settimane prima del corso ti invieremo tutte le informazioni sugli strumenti che useremo e come accedervi.
Per la rete, prova a fare uno Speed Test.
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.

N.B.

Il workshop verrà confermato al raggiungimento dei numeri minimi di partecipanti utili alla sua attivazione. Invieremo comunicazione agli iscritti due settimane prima del workshop al più tardi.

Info pratiche sul workshop

Lingua: italiano.
Numero massimo di partecipanti: 12.
Strumenti e postazione: il corso si svolgerà online e in diretta, attraverso l’uso di alcuni strumenti digitali. A iscrizione avvenuta, riceverai tutti i dettagli su come accedere al corso e interagire con il docente e gli altri partecipanti, e su come prepararti al meglio.

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

 

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!