Applied Functional Programming in Scala by John A. De Goes

Applied Functional Programming in Scala

John A. De Goes


Applied Functional Programming in Scala is an intensive, two-day workshop that teaches attendees to effectively use functional programming in Scala to build high-performance, correct-by-construction software that’s easier to reason about, easier to test, easier to compose, and easier to change safely. Taught by John A. De Goes, a CTO whose company is built on functional programming in Scala, attendees will gain mastery of practical techniques in functional programming. If you are struggling with effectively using functional programming in Scala to solve real world problems, then this is the workshop for you.


Adoption of the Scala programming language has grown tremendously in recent years, partially because of the number and quality of libraries written in Scala (including Spark, Akka, Play, Shapeless, scodec, and many others). Yet, the language is broad and complex, containing many features not present in many other common programming languages (implicits, higher-kinded types, declaration-site variance, type lambdas). Most problems have many different and completely incompatible solutions, and the best choice is not obvious. Although the majority of Scala developers know the basics of the programming language, they struggle to translate simple examples of functional programming (like pattern matching and collection processing) into the large-scale code bases and real world problems they work on every day. This course is designed to help Scala developers tackle the most complex problems in the largest code bases using the tremendous real world power of functional programming.


After attending this workshop, attendees will understand how to scale functional programming techniques to real-world problems, including complex state management, input/output, concurrency, resource management, and much more. Attendees will develop a newfound appreciation for how to write simpler code that is correct-by-construction, using techniques in functional programming and the strong type system of the Scala programming language. Companies whose Scala teams are struggling to feel comfortable with the complex language, or who have yet to attain the mastery required to reduce defects and increase productivity, are encouraged to send their developers to this workshop. Functional programming in Scala can be a tremendous competitive advantage for developers who have been properly trained.

Concepts & Skills

  • Algebraic data types, higher-kinded types, universals & existentials

  • Type lambdas

  • Higher-order functions, function combinators, polymorphic functions

  • Type classes, polymorphic constraints

  • Data, recursion, recursion schemes, fixed-point data

  • Options, eithers, validations

  • Semigroups, monoids

  • Functors, applicatives, monads

  • Foldables, traversables

  • Optics

  • Effect monads, monad transformers, finally tagless

  • Concurrency, asynchronicity, resource management

  • Reified computation, free monads

  • Compositional interpreters, purely-functional mocking


This course assumes prior knowledge of basic programming in Scala.

Course Outline

Day 1 - Fundamentals

  • Programming with Functions

    • Mathematical Functions

    • Parametric Polymorphism

    • Composition

    • Recursion, Corecursion

  • Types of Terror

    • Algebraic Data Types

    • Higher-Kinded Types

    • Type Lambdas

    • Generalized Algebraic Data Types

  • Type Classes

    • Structure without Inheritance

    • Generic Reasoning with Laws

    • No Names, No Problems

  • Functional Programming for Realz

    • Values Everywhere

    • Pure State

    • Functors, Monads, & All the Rest

    • Optics

Day 2 - Functional Scala

  • Effects

    • Input/Output

      • Integration

      • Resource Management

      • Concurrency

    • Abstraction

      • Finally Tagless

      • Onion Architecture

      • Free Things

  • Type-Driven Design

    • Precision Spaces

    • Business Domain

  • Application Development Workshop

Instructor Bio

John A. De Goes has been writing Scala software for more than eight years at multiple companies, and has assembled world-renowned Scala engineering teams, trained new developers in Scala, and developed several successful open source Scala projects.


Known for his ability to take very complex concepts and explain them simply, John has taught numerous workshops and classes, including several highly-regarded workshops on Scala. John moonlights as an instructor for LambdaConf, but his primary job is Chief Technology Officer of SlamData, an open source software company using pure functional programming to redefine analytics for modern data.