Scala Advanced, Part 3 - Functional Programming, Performance
4.6 (24 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
186 students enrolled

Scala Advanced, Part 3 - Functional Programming, Performance

Advanced Functional Programming, Macros, Parser-Combinators, Performance, Profiling, Optimizing
4.6 (24 ratings)
Course Ratings are calculated from individual students’ ratings and a variety of other signals, like age of rating and reliability, to ensure that they reflect course quality fairly and accurately.
186 students enrolled
Created by Dick Wall
Last updated 1/2020
English
English [Auto]
Price: $19.99
30-Day Money-Back Guarantee
This course includes
  • 5 hours on-demand video
  • 1 article
  • 2 downloadable resources
  • Full lifetime access
  • Access on mobile and TV
  • Certificate of Completion
Training 5 or more people?

Get your team access to 4,000+ top Udemy courses anytime, anywhere.

Try Udemy for Business
What you'll learn
  • Advanced Functional Programming, Tail Calls, Trampolines, Functors, Monads, Applicative Functors, Different Monad Patterns
  • Macros, Scala Compiler Phases, Abstract Syntax Trees, Quasiquotes, When and how to use macros
  • Parser Combinators, External DSLs, Grammar Translation, Transformers, Parsing, Packrat Parsers
  • Performance Optimization, JVM Performance Tricks, Profiling, Visual VM
Course content
Expand all 96 lectures 04:54:19
+ Module 13 - Functors, Monads, Applicative Functors
26 lectures 01:31:11
Module 13 - 03 - Options Recap
04:02
Module 13 - 04 - Implementing Option
03:57
Module 13 - 05 - A Functor
02:51
Module 13 - 06 - A Monad
01:53
Module 13 - 07 - Optional In Use
03:06
Module 13 - 08 - Guards, withFilter
04:40
Module 13 - 09 - Testing the Guard
00:24
Module 13 - 10 - Functor Laws
06:44
Module 13 - 11 - Monad Laws
06:58
Module 13 - 12 - Applicative Functors
02:21
Module 13 - 13 - Applicative Functors with Functions
08:22
Module 13 - 14 - Cartesian Syntax and Alternatives
02:38
Module 13 - 15 - Functor/Monad Patterns
02:09
Module 13 - 16 - IO
06:03
Module 13 - 17 - Composing IO
02:20
Module 13 - 18 - Reader
02:22
Module 13 - 19 - Writer
02:51
Module 13 - 20 - State
05:24
Module 13 - 21 - Free
02:54
Module 13 - 22 - Free ADT
03:59
Module 13 - 23 - Free Composition
02:46
Module 13 - 24 - Free - A Full Program
01:22
Module 13 - 25 - Free, the Interpreter
03:57
Module 13 - 26 - Running Free
04:27
Module 13 Quiz
3 questions
+ Module 14 - Macros
18 lectures 56:15
Module 14 - 03 - First Rule of Macros
02:27
Module 14 - 04 - Scala Compiler Phases
06:46
Module 14 - 05 - Abstract Syntax Trees
04:50
Module 14 - 06 - Macro Overview
03:05
Module 14 - 07 - A Demo Macro
01:54
Module 14 - 08 - Setting Up the Pieces
04:04
Module 14 - 09 - A Macro That Does Nothing
03:54
Module 14 - 10 - Macro With Generic Type Parameters
01:13
Module 14 - 11 - Quasiquotes
06:07
Module 14 - 12 - Doing More with Quasiquotes
03:09
Module 14 - 13 - A Function Describing Macro
02:23
Module 14 - 14 - Narrowing the Return Type
01:32
Module 14 - 15 - Compiler Warnings and Errors
07:04
Module 14 - 16 - Creating a Compiler Warning
00:16
Module 14 - 17 - Macro Limitations
03:29
Module 14 - 18 - Final Words
02:29
Module 14 Quiz
4 questions
+ Module 15 - Parser Combinators
16 lectures 35:44
Module 15 - 03 - External DSLs
03:59
Module 15 - 04 - A Basic Grammar
02:40
Module 15 - 05 - Simple Parser Combinators
02:28
Module 15 - 06 - Token Parsers
00:27
Module 15 - 07 - Types and Transformers
01:43
Module 15 - 08 - Richer Types
02:05
Module 15 - 09 - StatementLine ADT
01:43
Module 15 - 10 - Next and Goto
03:20
Module 15 - 11 - BNF Translation
02:46
Module 15 - 12 - The Print Statement
01:09
Module 15 - 13 - The For Statement
02:26
Module 15 - 14 - Complete Line, and Parsing
01:56
Module 15 - 15 - Trying It Out
03:42
Module 15 - 16 - Packrat Parsers
02:47
Module 15 Quiz
4 questions
+ Module 16 - Performance and Optimization
21 lectures 01:11:50
Module 16 - 03 - When and Where to Optimize
03:56
Module 16 - 04 - First Things First
02:28
Module 16 - 05 - Collections
03:59
Module 16 - 06 - Vector vs List
03:27
Module 16 - 07 - List Head vs Tail Operations
03:30
Module 16 - 08 - Arrays
01:49
Module 16 - 09 - Register Based Arithmetic
01:52
Module 16 - 10 - Timing Runs
01:51
Module 16 - 11 - Bitwise Operations
01:31
Module 16 - 12 - While Loops and Tail Calls
02:03
Module 16 - 13 - While vs TailRec
01:46
Module 16 - 14 - Library Calls
00:45
Module 16 - 15 - sqrt, Trancendentals
02:32
Module 16 - 16 - Other Performance Gotchas
01:12
Module 16 - 17 - Find the Hot Spots
01:12
Module 16 - 18 - VisualVM
01:31
Module 16 - 19 - Using VisualVM
19:59
Module 16 - 20 - Profiling Demo
09:48
Module 16 - 21 - Caching
03:48
Module 16 Quiz
4 questions
Requirements
  • You should be a developer with day to day working experience of Scala
  • It is recommended that you complete Parts 1 and 2 of the Escalate Scala Advanced course
  • You may also wish to consider following parts 1-3 of the Escalate Applied Scala course if you have trouble following these concepts
  • You will need a sufficiently powerful computer and to follow the included setup instructions to run the hands-on exercises
Description

The Escalate Software Scala Advanced course is intended for experienced Scala developers looking to improve their skills, particularly for library and API design and development. It covers topics needed to be effective in producing high quality, correct, powerful and flexible Scala libraries that are still easy to use by others.

Part 3 covers advanced functional programming concepts and patterns, use of Macros, how to write external DSLs with the parser-combinator library, and how to effectively optimize code by analyzing performance:

  • Functional Programming Building Blocks: ADTs, trampolines, recursion, functions

  • Functional Programming Patterns: Functors, Monads, Applicative Functors

  • Common Functional Patterns: IO, Reader, Writer, State, Free

  • Macros and Quasiquotes

  • External DSLs and Scala's Parser-Combinator Library

  • Profiling and Optimization

  • Code Performance Considerations

It is recommended that you complete Scala Advanced parts 1 and 2 before taking this part. While not strictly necessary, we may assume knowledge from parts 1 and 2 in some of the explanations that could be hard to follow unless you know the material.

This is the final part of the Advanced Scala course. We hope you enjoyed the course and that the material proves useful.

Who this course is for:
  • Scala developers looking to improve their skills, write libraries and APIs for others
  • Developers wanting to improve their knowledge of more advanced functional programming concepts
  • Developers wishing to learn how to save time and money by profiling and optimizing applications
  • Anyone who wants to be able to parse and use external DSLs in Scala