«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
Applied Functional Programming workshop by Matteo Baglini is aimed at teaching you how to put functional programming into practice.
It is aimed at software developers who already know this paradigm and want to make a jump forward in its adoption.
We’ll be doing a lot of coding sessions in order to learn how to use the mathematical theories needed to build the right abstractions, including the famous Monads.
The goal of the workshop: learning how to apply pure functional programming straight after the workshop.
Target audience
Professional software developers with a medium/advanced level of experience programming with mainstream languages (such as Java/C#/JavaScript/PHP) and not new to the functional world (e.g. high-order functions, Option/Stream type, list comprehension combinators).
During the workshop we’ll be constantly referring to some advanced topics from the most used programming languages (such as generics and subtype polymorphism), meaning that this workshop is not suitable for beginners.
Topics
The ingredients we need to reach our goal are:
- understanding what’s the impact of working with referential transparency
- design big systems as if they were small composable units
- express constraints and interactions through the type system
- model behaviours and data of the domain through modules, functions and algebraic data types
- modularise the responsibilities through type classes
- get an in-depth knowledge of the main functional structures: Functor, Applicative, Monad, Foldable e Traversable
- choose the right Monad for the actual problem
- how to survive in a world full of side effects.
Agenda
Day 1 – Let’s cover the basics:
- A refresh of scala: case classes, object, trait and implicit parameter
- Model date through algebraic data types (ADT)
- Use the basic effects: Option, Try, Either and Future
- Master the key combinators: map, flatMap and fold
- Abstract the effect and type class pattern.
Day 2 – Let’s build an application from scratch (part 1):
- Hexagonal architecture
- Model date and domain’s behavious
- Use the signatures of the functions to drive the design
- A monad for each occasion.
Day 3 – Let’s build an application from scratch (part 3):
- Let’s introduce the infrastructure: persistence, configuration, logging
- Manage the different monads (Monad stack)
- Test of the different applicative levels.
Why should I buy a ticket?
Join this workshop to get a throughout knowledge of the basic principles, and have a direct experience of what it means to do software development with functional programming.
Matteo will provide you with the tools so that you’ll be able to evaluate this programming style in the most objective way: whether you’re ready for the jump it’s up you!