Welcome! This page contains direct links to all of the videos in my 100% Free Scala and Functional Programming (FP) Video Training Courses. When I say “100% Free”, I mean that there are no ads and no paywalls — all of the videos below are completely free to watch.
As always I want to thank Ziverge for making this possible! This videos take a long time to create, and I wouldn’t have the time to create these without Ziverge being a sponsor. If you ever want to thank the people at Ziverge, be sure to give them a call when your programming team needs assistance on programming projects. They work with Scala, Rust, A.I., Python, and much more.
ALSO FREE: Here’s a link to the free PDF for my book: Learn Functional Programming The Fast Way!
Introduction to Scala 3 (video course)
These are the free videos in my free Introduction to Scala 3 video course:
- Introduction to Scala 3
- Your Setup
- The Scala REPL
- A Scala 3 “Hello, world” Example
- Scala Variables (val, var, and more)
- Strings
- String Interpolators
- Multiline Strings
- Numeric Data Types
- Mathematical Expressions
- if/then/else Expressions
- Expression-Oriented Programming (EOP)
- Tuples
- Choosing a Collections Class
- Vector Class, Part 1
- Vector Class, Part 2
- List Class, Part 1
- List Class, Part 2
- ArrayBuffer, Part 1
- ArrayBuffer, Part 2
- ‘for’ Loops
- ‘for’ Expressions
- try/catch/finally
- while Loop
- foreach Method
- map Method
- filter Method
- Map Class
- Set Class
- Ranges
- Importing Code, Part 1
- Importing Code, Part 2
- Enums, Part 1
- Enums, Part 2
- Introduction to Domain Modeling
- Classes: Constructors
- Classes: Members and Accessor Methods (Getters)
- Classes: Mutator Methods (Setters)
- Classes: Auxiliary Constructors (and Default Parameter Values)
- Traits: Using Traits As Interfaces
- Traits: Adding Concrete Behaviors
- Objects: Singletons, Part 1
- Objects: Singletons, Part 2
- Objects: Companion Objects
- Objects: apply Methods in Companion Objects
- Case Classes
- match Expressions, Part 1
- match Expressions, Part 2
- Functions and Methods
- Functions: Defaults for Input Parameters
- Functions: Named Parameters
- Functions: varargs Parameters
- Functions: Generic Input Parameters
- Functions: Toplevel Functions
- Functions: Functional Error Handling
- Functions: Passing Functions Into HOFs
- Functions: Multiple Input Parameter Groups
- Command Line Scripts
Advanced Scala 3 (video course)
These are the free videos in my free Advanced Scala 3 video course:
- Free “Advanced Scala 3” Video Training Course
- Higher-Order Functions, Part 1
- Higher-Order Functions, Part 2
- Higher-Order Functions, Part 3
- Higher-Order Functions, Part 4
- Receiving “Code Blocks” as Input Parameters
- Multiple Parameters Groups and Call By Name Parameters
- Extension Methods, Part 1
- Extension Methods, Part 2
- Partially-Applied Functions
- Partial Functions
- Using case Statements Where a Function Is Expected
- Introduction to Scala Types, Part 1 (Bounds)
- Introduction to Scala Types, Part 2 (Variance)
- Using Generic Type Parameters with Methods
- Classes That Use Generic Type Parameters, Part 1
- Classes That Use Generic Type Parameters, Part 2
- Bounds
- Union Types
- Intersection Types
- Opaque Types
- Multiversal Equality
- Modular Programming with Traits
- Writing apply Methods to Create Constructors
- Writing unapply Methods to Enable Pattern Matching
- Term Inference with given and using
Introduction to Functional Programming (video course)
These are the free videos in my free Introduction to Functional Programming video course:
- Introduction to Functional Programming (video course)
- Contents and Outline
- A Look at Java/OOP Code and Data Types
- Is Java/OOP Code That Simple? (stats)
- Immutable Things
- Pure Functions
- Pure Functions Cannot Lie
- Pure Functions: One Place The Side Door Is Okay
- Expression-Oriented Programming
- What is Functional Programming?
- Solving Problems With Pure Functions, Types, And EOP
- App 1: Implementing The Word Count App (Part 1)
- App 1: Implementing The Word Count App (Part 2)
- App 1: Implementing The Word Count App (Part 3)
- One More Thing: Algebraic Substitution
- A Quick Look at Parallel Programming
- Recap: Java/OOP vs Pure Functions
- A Change To The wc Application
- Functional Error Handling (FEH)
- FEH: Option
- FEH: Try
- FEH: Either
- FEH: allCatch
- Implementing wc with Try
- Recap, and What’s Next
- App 2: To-Do List (TDL)
- App 2: The Database Class
- App 2: insert Database Function
- App 2: selectAll Database Function
- App 2: delete Database Function
- JIT: Understanding Errors in for-Expressions
- App 2: Prompt the User
- App 2: Read User Input
- App 2: Show Help Text
- JIT: Using Option and Try in for-Expressions
- JIT: for Loops, Generators, and Guards
- JIT: Code Blocks (Closures)
- JIT: Recursion
- App 2: Handling User Input
- App 2: InputProcessor Class
- App 2: Implementing handleUserInput
- App 2: Handling Quit
- App 2: Handling Help
- App 2: Handling View
- App 2: Handling Add
- App 2: Handling Delete
- App 2: Handling the Default Catch-All Case
- App 2: Lessons Learned
- App 2: Using Either Instead of Try
- How Either Relates to ZIO
- JIT: What’s an IO?
- JIT: IO and Algebraic Substitution
- JIT: IO, Option, Try, Either, and for-Expressions
- ZIO and the Power of IOs (Part 1)
- ZIO and the Power of IOs (Part 2)
- Bonus: The Mindset of a Functional Programmer
- Bonus: The M Word
Functional Programming In Depth
These videos are from my free Functional Programming In Depth video course:
- Who This Course Is For
- Goals: Soft Goals
- Goals: Concrete Goals
- Disclaimer: Not a Cookbook
- Rules for Programming
- The Great FP Terminology Barrier
- FP Is Like Unix Pipeline Commands
- A First Look At State
- A Review of Case Classes
- Writing A Class To Be Used In A for Expression
- Creating A Custom Sequence Class
- Using Sequence In A for Loop
- Sequence: Writing map To Work As A Single Generator
- Sequence: Enabling Filtering In for
- Sequence: Enabling Multiple Generators In for
- A Summary Of The for Expression Lessons
- What To Think When You See That Opening Curly Brace
- flatMap Naturally Leads To for Expressions
- for Expressions Are Better Than getOrElse
- Starting To Glue Functions Together
- The “Bind” Concept
- Using Our Custom ‘Binding’ Class In for Expressions
- Making Our Class More Generic
- Creating A ‘Debuggable’ Class
- Details On How Debuggable Works
- Debuggable: Using List Instead Of String
- Pure Functions: A Review
- Pure Functions: They Cannot Lie
- Note: Using A for Expression As A Function Body
- ZIO 2: Getting Started
- ZIO 2: From flatMap To for Expressions
- ZIO 2: A Small Application
- The End