FOUNDATIONS OF FUNCTIONAL PROGRAMMING IN SCALA

Foundation of Functional Programming in Scala is a comprehensive, self-paced online course with no prerequisites, which helps you to become a confident, productive, and powerful functional Scala developer.

The course comprehensively covers the foundations of functional programming in Scala, including functional data modeling, functions and how to combine them, generic types and generic functions, and performing actions with external systems in a testable way. The focus of all material is on solving real-world problems in a practical and pragmatic way.

With simple explanations that are free of confusing jargon, professionally produced HD videos, skill-building exercises with full solutions, and beautiful infographics that demystify complex concepts, this course allows you to unlock your full potential as a functional Scala developer.

UNLOCK YOUR INCREDIBLE POTENTIAL AS A SCALA DEVELOPER


  • CODE WITH CONFIDENCE

    Be able to confidently read and write functional Scala code and understand the design of libraries.

  • THINK FUNCTIONALLY

    Learn functional mindset from an experienced developer whose successful career spans more than a decade.

  • BOOST YOUR CAREER

    Functional Scala is growing fast and Scala jobs offer higher salaries than nearly all other languages.

  • FILL IN GAPS

    Attain proficiency by filling any gaps in your fundamental knowledge of Scala and functional programming.

  • LEVEL UP

    Master Scala to an intermediate or higher level, giving you an edge for promotions and new jobs.

  • DEMYSTIFY FP

    Learn the concepts behind the jargon as you put functional programming to work solving real problems.

DEVELOPERS AROUND THE WORLD LOVE THE FOUNDATIONS COURSE

“Julien explains the practical benefits of functional Scala beautifully. I recommend his course for experienced and junior developers!”

Vladimir Gorbenko

“Julien’s course is incredibly thoughtful and well-structured, and we all can’t wait to have him back for even more advanced training!”

Ian White

“Coming from 10 years of object-oriented programming, I found functional programming very alien and difficult. Doing a 2-day course with Julien Truffaut has helped me grasp core concepts and use them in my day job. I’d recommend Julien’s courses to anyone interested in functional programming, from beginner to those wanting to perfect their skills!”

Anna-Maria Wykes

FOUNDATIONS IS EXPERTLY-CRAFTED TO ENSURE YOUR SUCCESS

  • ACCELERATED

    Concise, well-organized lectures and exercises help you learn faster and better than books or blog posts.

  • EMPOWERING

    With all answers available in written text and detailed video form, you’ll never get stuck on any exercises.

  • HELPFUL COMMUNITY

    Access a private Slack community, where you can ask questions and discuss functional Scala.

  • NO PREREQUISITES

    Beyond a basic understanding of Scala syntax, you don’t need any background to complete this course.

  • VISUAL LEARNING

    Learn from richly detailed infographics and HD videos that help you “get” concepts faster than text.

  • PRACTICAL

    Learn the concepts behind scary jargon as you use functional programming to solve real problems.

Pricing

Both plans include: video lessons, quizzes, access to code repositories and Slack.
Lifetime access includes: everything from the monthly subscription, plus priority support & priority access to webinars.

30-Day Money-Back Guarantee

Try it risk-free

Synopsis

1. Value functions  

In this section, we'll do a deep dive into the different types of functions available in Scala. We’ll discuss what the difference is between them and when we should use each one.

Objectives

  • Learn the difference between methods and lambdas
  • Learn to generalise a common pattern with a higher-order function
  • Discover property-based testing and common testing techniques
  • Learn the various syntaxes for functions including the use of _ (the underscore character)

2. Generic functions

In Scala, we make functions and data types generic by adding type parameters. This simple technique has a tremendous impact on the design of functional APIs and we'll use it extensively throughout the course. In this section, we will learn how to read and implement interfaces using generic types as well as how to avoid the common pitfalls related to type parameters.

Objectives

  • Use type parameters to write fewer and more efficient tests
  • Understand why we shouldn't pattern match on a generic value
  • Practice working with Scala type inference
  • Learn how to use triple question marks and type parameters to guide the implementation of functions
  • Practice the design of functional APIs
  • Learn how to create and use custom random generators for property-based testing

3. Parallel data processing

Modern applications need to process more and more data in a short amount of time, which has led to the creation of technologies such as MapReduce, Spark and Kafka. In this section, we will cover the fundamentals of parallel data processing and learn why functional programming is such a good fit for it. We'll conclude this module with the analysis of a real-world dataset on global average temperature.

Objectives

  • Learn how to use generic types and property-based testing to explore a problem
  • Understand the risks of recursive functions
  • Familiarise yourself with foldLeft, foldMap and Monoids
  • Identify the difference between parallel and concurrent programs
  • Work with Future from the Scala standard library

4. What is functional programming?

What is functional programming all about? What is the single most important idea behind it? What are its limitations? And why isn't it more popular? You will get the answers to all these questions and much more in this module.

Objectives

  • Understand the three main restrictions of functions in FP compared to other paradigms.
  • Recognize the unique refactoring patterns enabled by functional programming.
  • Learn to distinguish between sealed and open class usages.

5. Actions

In the previous section, we will have learned that functional programming is quite restrictive. For example, we cannot perform actions like sending an email or updating a record in a database. Yet, we need to perform these actions almost daily in our real-world applications. In this section, we will discuss the workarounds functional programmers use to interact with the outside world while respecting functional programming principles. In particular, we will implement a simple IO data type that supports powerful retry strategies and concurrency primitives.

Objectives

  • Learn how to perform actions without breaking functional programming principles
  • Understand the difference between lazy and strict evaluations
  • Discover the differences between Futures and IOs

6. Error Handling

There are many ways to deal with runtime errors. The easiest and most common method consists of throwing exceptions. Unfortunately, this is incompatible with the functional programming paradigm. In this module, we will look at the problems caused by exceptions, and the ways in which we can safely deal with errors in Scala.

Objectives

  • Learn about Option and Either data types and when to use them
  • Discover variance and how it can help type inference
  • Practice how to combine actions (IO) and error handling (Option/Either)

Some of our fantastic clients

ABOUT ME

I am a backend engineer with more than 10 years of experience in companies of all sizes, from start-ups to tech giants like Amazon.

For the last 5 years, I have been running functional programming training workshops with great success. I focus my training on simple functional programming techniques that deliver massive value to companies.

I am the author of the popular open-source library Monocle, an optics library that helps functional Scala developers easily traverse, transform, and access deeply nested data structures.

SUBSCRIBE TO MY NEWSLETTER

Subscribe to my newsletter to learn about functional Scala and be notified about new courses!