Functional Design Patterns Course

Functional Design Patterns Course

Learn how to improve your design using Functional Programming

Online course

We are now in the Functional Programming age and many Object-Oriented Programming languages have embraced at least some parts of the Functional Programming paradigm.
Many developers are eager to use this new paradigm but they’re still struggling on how to switch from OOP design to FP design.

Is it possible to keep using the 4 Rules of Simple Design even when using Functional Programming paradigm in order to simplify the design of your application?

In this online course with Uberto Barbini, we will learn how to proceed from a typical OO Hexagonal design to a purely functional one with concrete examples.
Notions such as Categories, Functors and Monads will naturally emerge from our code and we will discuss them thoroughly.

Target Audience

The ideal participant has a good experience with Object Oriented programming and some exposure to Functional Programming but wants to know more.

No special knowledge of functional libraries or languages is required.


The main goal of the course is to teach how to model your application using morphisms and categories rather than object-oriented stateful entities.

It’s important to understand that functional programming is about mindset and reasoning, not languages and tools.


  • Introduction to functional programming
  • The basis of Category Theory
  • Generics as data builder
  • Higher Order Functions
  • Monoids and Monads
  • Laziness and ADT.


Module 1 (or first session – day one)

  • The 4 principles
  • Introduction to functional programming
  • Morphisms and Categories
  • Exercise Kata
  • Designing with Categories
  • Using Functors
  • Homework.

Module 2 (or second session – day two)

  • Discussion of homework
  • Advanced examples
  • How to integrate with legacy code
  • Functional Concurrency
  • Functional Testing
  • Functional Debugging.

Learning Objectives

By the end of the workshop, you will…

  • Know how to apply 4 principles of simple design to functional programming
  • Be able to model a problem using transformations in a pure functional way
  • Be able to practice the concepts learn right away in your day-to-day job
  • Have a better understanding of Category Theory concepts
  • Have written a fair amount of functional code.

Expect to get your hands dirty

In this course, we will take a full hands-on approach to functional programming and category theory.

Participants are expected to solve some coding and design exercises and to work on their own on a homework assignment between the two sessions.

We believe that the best way to learn something is to practice it yourself, so the whole course is task-oriented, with practical exercises.

On the second day, there will be space for discussion on problems brought from participants, so if you have encountered problems trying to adopt functional programming, please have them ready as we’ll be discussing them.


Is there anything I need to do before the workshop?
In order to fully benefit from this workshop, you could watch some videos of related talks (list will be given in advance)
You could also give a look at the Kotlin languages: example discussed are in Kotlin, there will be explanations but a bit of familiarity with the language would be beneficial. Your own exercises and homework can be done in any language.

What language will this workshop be in?
In English.

Anything to do prior to the workshop (books to read, stuff to install)?
You need a computer with a developing environment ready for your language of choice.

Practical Info

Language: English

Length: 2 hours + 2 hours
Laptop and setup: Check out the FAQ section

Uberto Barbini

Uberto is a polyglot programmer and independent consultant, with more than 20 years experience designing and building successful software products, currently working with financial institutions in London.

He is a very passionate and opinionated programmer, he enjoys public speaking and blogging.

About us

Avanscoperta is a growing community of professionals learning together, exchanging experiences and ideas, exploring uncharted territories.

We carefully select the most relevant topics and the best trainers and thought leaders worldwide with an eye to the most engaging teaching techniques.
Are you ready to learn with us? ?

Are you interested in this course?

If you have any specific questions, or if you want to receive more information on dates, content or offers about this course, drop us a line. We'll gladly get back to you!


    Get exclusive content from experts in software development, technology, business and design!


    Subscribe to our newsletter!