Course Outline
Introduction
- Who uses Scala?
- Developing large-scale, purely-functional programs
Overview of Functional Programming in Scala
- Higher-Order Functions
- Combinators
- Polymorphic Functions
Mastering Scala Types
- Product types & Sum types
- Supertypes & Subtypes
- Universals & Existentials
- Higher-Kinded Types
- Type Lambdas
Mastering Scala Type Classes
- Classes & Instances
- Tricks with Implicits
- Polymorphic Constraints
Case Study: Highly-stateful programs with complex external systems
Coding Exercise
Working with Data
- Immutable Data & Recursion
- Catamorphisms & Church Encoding
- Fixed-Point Data
- Recursion Schemes
Advanced Pattern Matching in Scala
- Deep matching
- Using extractors
Case Study: Scala and Big Data
Coding Exercise
Using Functional Patterns
- Options, Eithers & Validations
- Semigroups & Monoids
- Functors
- Applicatives
- Monads
- Foldables & Traversables
- Lenses
Working with Effects
- IO
- State
- Reader
- Combining Effects
Case Study
- TBD
Coding Exercise
Functional Architecture
- Modern Architecture for FP
- Reified Computation & Deferred Evaluation
- Compositional Evaluators
- Optimization Techniques
- Purely Functional Mocking
Libraries and DSLs
- Custom control structures with by-name parameters
- Building well-designed libraries and internal DSLs
Functional Exception Handling
- Traditional exception handling
- Functional exception handling
- Using Try with For comprehensions
Final Coding Exercise and Evaluation
Closing Remarks
Requirements
- Hands on experience in Scala programming
- Familiarity with pattern matching and traits
Audience
- Scala programmers who wish to learn the more advanced and nuanced features of Scala
Testimonials
The course is not easy for beginners but Richard was very friendly and gave one-to-one time to everyone who was stuck.
- Johnson and Johnson EMEA Development Centre
Good visibility on akka
- Johnson and Johnson EMEA Development Centre
Richard, he was very nice and patient which was much needed
- Johnson and Johnson EMEA Development Centre
Ability to talk to Fulvio about his experience with other technologies like Spark, Kafka etc - it was fantastic discussion during breaks.