We may earn an affiliate commission when you visit our partners.
Dick Wall

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.

Read more

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.

This course assumes you have day-to-day Scala development skills equivalent to having taken the Scala Advanced course parts  1  and 2 from Escalate Software. If you have trouble understanding or following the concepts in this course because some of the concepts being presented are assuming something you are unfamiliar with, then we would recommend you check out the Applied courses as these will answer many of your questions.

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.

Enroll now

Here's a deal for you

We found an offer that may be relevant to this course.
Save money when you learn. All coupon codes, vouchers, and discounts are applied automatically unless otherwise noted.

What's inside

Syllabus

Prepare to take the course, set up your machine and download materials
Introduction
Use the building blocks of advance functional programming, including tail calls, trampolines and algebraic data types
Read more

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Assumes day-to-day Scala development skills equivalent to having taken the Scala Advanced course parts 1 and 2, indicating a focus on building upon existing expertise
Covers topics needed to be effective in producing high quality, correct, powerful and flexible Scala libraries that are still easy to use by others
Explores advanced functional programming concepts and patterns, such as Functors, Monads, and Applicative Functors, which are essential for building robust and scalable applications
Delves into Macros and Quasiquotes, which are powerful tools for metaprogramming and code generation, enabling developers to write more concise and expressive code
Examines profiling and optimization techniques, which are crucial for ensuring the performance and efficiency of Scala applications in production environments
Requires completion of Scala Advanced parts 1 and 2 before taking this part, which may pose a barrier to entry for some learners

Save this course

Create your own learning path. Save this course to your list so you can find it easily later.
Save

Reviews summary

Advanced scala: functional programming and performance

According to learners, this is a valuable deep dive into advanced Scala topics for experienced developers. Students particularly praise the excellent instructor and the thorough coverage of functional programming concepts, including Monads, Free Monads, and ADTs. The course also covers topics like Macros and Parser Combinators, and touches upon performance analysis and optimization. It is frequently mentioned that this course is definitely not for beginners and requires solid prior Scala knowledge, ideally from Parts 1 and 2. Some feedback indicates that the course could benefit from more practical exercises, especially in the performance section, and a few aspects might feel slightly outdated compared to the latest libraries or practices.
Covers Macros, Parser Combinators, and Performance.
"The sections on Macros and Parser Combinators were particularly interesting and well-explained."
"Good introduction to Scala macros and quasiquotes."
"Learned about writing external DSLs using parser combinators."
"The performance module covered important considerations for writing efficient Scala code."
Strictly requires prior advanced Scala experience.
"Definitely requires strong prior knowledge of Scala; parts 1 & 2 are necessary to follow along."
"This course is clearly not for beginners and assumes a high level of familiarity with core Scala concepts."
"Make sure you have the prerequisites covered; the course moves quickly on advanced topics."
"If you haven't taken parts 1 and 2, you might struggle with some assumed knowledge."
Instructor is highly praised for clarity and passion.
"The lecturer is excellent, providing clear explanations and showing a real passion for the subject."
"The instructor was very knowledgeable and passionate about Scala and the topics covered."
"Excellent teaching, makes complex topics understandable."
"I really appreciated the clear and engaging way the instructor presented the material."
Provides a deep and comprehensive look at FP concepts.
"This course takes a deep dive into functional programming concepts, which is exactly what I was looking for."
"Explores advanced topics like Functors, Monads, Free Monads, and State in great detail."
"Very helpful for understanding complex functional programming patterns in Scala."
"The coverage of advanced ADTs and recursive patterns was particularly strong."
Some parts may feel slightly outdated or lack modern context.
"Some feel the course could benefit from mentioning newer libraries like ZIO/Cats for FP patterns."
"Could use more modern examples or tools like ScalaCheck in the testing/properties section."
"A little outdated in places compared to current best practices in the Scala community."
"Mentioning alternative modern libraries would enhance the course's relevance."
Mixed views on the amount and quality of exercises.
"Could benefit from more hands-on exercises to solidify understanding, especially in the later modules."
"I felt some parts lacked practical examples or assignments to apply the concepts."
"More comprehensive exercises would improve understanding of the advanced topics."
"While the theory is strong, the practical side felt a bit underdeveloped at times."

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Scala Advanced, Part 3 - Functional Programming, Performance with these activities:
Review Functional Programming Concepts
Solidify your understanding of core functional programming concepts before diving into advanced topics. This will make the advanced material easier to grasp.
Browse courses on Functional Programming
Show steps
  • Review the definitions of pure functions, immutability, and referential transparency.
  • Practice writing simple functions using recursion instead of loops.
  • Familiarize yourself with common functional data structures like lists and options.
Read 'Functional Programming in Scala'
Deepen your understanding of functional programming principles with a comprehensive guide. This book will provide a solid foundation for the advanced concepts covered in the course.
Show steps
  • Read the chapters related to functors, monads, and applicative functors.
  • Work through the exercises in the book to reinforce your understanding.
  • Compare the book's examples with the course's examples.
Implement Common Functional Patterns
Reinforce your understanding of functional patterns by implementing them from scratch. This hands-on practice will solidify your knowledge and improve your ability to apply these patterns in real-world scenarios.
Show steps
  • Implement the IO monad with basic operations like reading from and writing to the console.
  • Implement the Reader monad for dependency injection.
  • Implement the State monad for managing stateful computations.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Read 'Scala Cookbook'
Explore practical solutions and recipes for common Scala programming challenges. This book will provide you with a wealth of knowledge and techniques to improve your Scala skills.
Show steps
  • Browse the chapters related to functional programming and macros.
  • Try out the code examples in the book.
  • Adapt the book's solutions to your own projects.
Build a Simple DSL
Apply your knowledge of parser combinators by building a simple domain-specific language. This project will give you practical experience in designing and implementing DSLs.
Show steps
  • Define the grammar for your DSL.
  • Implement the parser using Scala's parser combinator library.
  • Create an interpreter for your DSL.
  • Write tests to ensure your DSL works correctly.
Write a Blog Post on Scala Macros
Solidify your understanding of Scala macros by explaining them in a blog post. This will force you to organize your thoughts and communicate complex concepts clearly.
Show steps
  • Research and understand the different types of Scala macros.
  • Write a clear and concise explanation of how macros work.
  • Provide examples of how macros can be used to solve common problems.
  • Edit and publish your blog post.
Profile Scala Code with JMH
Learn how to use the Java Microbenchmark Harness (JMH) to profile Scala code and identify performance bottlenecks. This will help you optimize your code for speed and efficiency.
Show steps
  • Find a tutorial on using JMH with Scala.
  • Set up a JMH project in your development environment.
  • Write benchmarks to measure the performance of different code snippets.
  • Analyze the results and identify areas for optimization.

Career center

Learners who complete Scala Advanced, Part 3 - Functional Programming, Performance will develop knowledge and skills that may be useful to these careers:
Functional Programmer
A functional programmer specializes in writing code using functional programming paradigms. This course is valuable for a functional programmer who wants to deepen their knowledge and skills in Scala. The course explores advanced functional programming concepts and patterns, including ADTs, trampolines, Functors, Monads, and Applicative Functors. The common functional patterns covered such as IO, Reader, Writer, State, and Free, equips a functional programmer with tools to build robust, maintainable, and testable applications. By taking this course, a functional programmer can significantly enhance their ability to solve complex problems.
Macro Developer
A macro developer specializes in creating and maintaining macros, which are code snippets that generate other code at compile time. This course prepares you to be a Macro Developer. The course offers a module dedicated to macros and quasiquotes in Scala. It discusses compiler phases, abstract syntax trees, and macro limitations. The course walks you through creating a compiler warning. You will also setup pieces that do nothing, macros with generic type parameters, and functions describing macros. This in-depth exploration equips the macro developer with a solid understanding of how to leverage macros to enhance code generation and improve developer productivity.
Performance Engineer
A performance engineer analyzes and optimizes the performance of software systems. This course directly aligns with the responsibilities of a performance engineer. The second half of this course covers profiling and optimization techniques in Scala. The course's modules on collections, arrays, bitwise operations, and library calls provide practical knowledge for identifying and resolving performance bottlenecks. By learning when and where to optimize, a performance engineer can make informed decisions about code improvements and system configuration.
Code Optimization Specialist
A code optimization specialist focuses on improving the performance and efficiency of existing codebases. This course is useful for code optimization specialist as it focuses on profiling and optimizing Scala code. You will explore code performance considerations. You will learn about register based arithmetic, timing runs, bitwise operations, while loops, tail calls, square root functions, and transcendental functions. By understanding these factors, a code optimization specialist can effectively identify and address performance bottlenecks, resulting in faster and more efficient software.
DSL Developer
A domain specific language developer creates specialized programming languages tailored to specific problem domains. This course directly supports the skills needed for this role. The module on constructing and parsing external DSLs in Scala directly addresses the core responsibilities of a DSL developer. The course explores basic grammars, parser combinators, token parsers, and BNF translation. Through this course, a DSL developer learns how to design and implement custom languages that meet the unique needs of a particular domain.
API Developer
An API developer specializes in designing, building, and maintaining Application Programming Interfaces that allow different software systems to communicate with each other. This course is highly relevant, as it focuses on improving skills particularly for library and API design and development. Understanding functional programming concepts and patterns, as taught in the course, facilitates the creation of robust and flexible APIs. The exploration of macros and external DSLs is especially useful for designing expressive and user-friendly APIs. Furthermore, the profiling and optimization techniques in the course aids the API developer in ensuring that the APIs are performant and efficient.
Library Developer
A library developer creates reusable components and modules that other developers can use in their applications. This course can be of use for library developers in Scala. The course focuses on topics needed to be effective in producing high quality, correct, powerful and flexible Scala libraries that are still easy to use by others. You will learn functional programming concepts and patterns. This aids in creating robust and flexible libraries. The exploration of macros and external DSLs is especially useful for designing expressive and user-friendly libraries. Furthermore, the profiling and optimization techniques are relevant.
Backend Developer
A backend developer is responsible for the server-side logic and databases that power applications. This course is valuable for backend developers as it dives deep into functional programming with Scala, a paradigm particularly well-suited for building scalable and maintainable server-side systems. This course explores how to effectively optimize code for backend systems. By understanding functional programming building blocks and patterns, the backend developer can design robust and efficient APIs and data processing pipelines. The skills gained in writing external DSLs and optimizing performance are also essential for a backend developer working with Scala.
Software Engineer
A software engineer designs, develops, and maintains software systems. This course, with its focus on advanced functional programming concepts and patterns in Scala, equips you with the skills to write high-quality, efficient, and maintainable code, which is essential for a software engineer. The course helps you understand functional programming building blocks like ADTs, recursion, and functions. It also delves into functional programming patterns such as Functors, Monads, and Applicative Functors. These patterns enable a software engineer to build robust and scalable applications. Moreover, the coverage of macros, external DSLs, and performance optimization techniques are directly applicable to improving code quality and performance.
Application Developer
An application developer creates and maintains software applications for various platforms. This course provides useful knowledge for an application developer by exploring advanced functional programming techniques in Scala. The understanding of functional patterns such as IO, Reader, Writer, State, and Free is helpful for managing application state and side effects. Also, the course discusses building external domain specific languages with Scala's Parser Combinator Library. This is useful for creating custom application logic. The performance profiling and optimization techniques taught in this course helps the application developer to ensure their applications are efficient and responsive.
Software Architect
A software architect designs the structure of software systems, ensuring they are scalable, reliable, and efficient. This course provides useful knowledge for a software architect by exposing them to the concepts of advanced functional programming. Understanding functional programming building blocks like ADTs, tail call optimization and trampolines provides a software architect powerful tools for designing robust and scalable software. This course also discusses building external domain specific languages with Scala's Parser Combinator Library. The architect learns how to ensure that software is efficient and responsive.
Systems Architect
A systems architect designs the structure of software systems, ensuring they are scalable, reliable, and efficient. The functional programming concepts covered in this course provides a systems architect with the tools and knowledge to design complex systems with confidence. The course explores functional programming building blocks, common functional patterns, and the use of macros. A systems architect benefits from understanding how to use macros to generate code and how to optimize code performance. This course helps the systems architect make informed decisions about technology choices and system design.
Data Engineer
A data engineer is responsible for building and maintaining the infrastructure that supports data storage, processing, and analysis. While this course does not directly cover big data technologies, the advanced functional programming concepts in Scala are applicable to building efficient data pipelines and processing systems. The course's exploration of functional patterns such as Monads and Applicative Functors enhances the data engineer's ability to write scalable and maintainable data processing code. Knowledge of performance optimization techniques is crucial for ensuring the efficient processing of large datasets.
DevOps Engineer
A DevOps engineer focuses on automating and streamlining the software development lifecycle. While this role is broad, the skills gained from understanding performance optimization are transferable. The course's modules on profiling and optimization provides insights into identifying and resolving performance bottlenecks in applications. By understanding compiler phases, abstract syntax trees, and macro limitations, the DevOps engineer gains a deeper understanding of the software stack. This understanding can assist in troubleshooting and optimizing deployment pipelines.
Compiler Engineer
A compiler engineer develops and maintains compilers, which translate code from one language to another. This course may be useful for compiler engineers due to its exploration of macros and quasiquotes, which are relevant to compiler construction. The course delves into Scala compiler phases and abstract syntax trees. These modules provide a compiler engineer with a deeper insight into the compilation process. The understanding of macro limitations provided by the course provides a solid foundation for this role.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Scala Advanced, Part 3 - Functional Programming, Performance.
Provides a comprehensive introduction to functional programming principles using Scala. It covers topics such as algebraic data types, functors, monads, and applicative functors, which are essential for understanding the course material. It serves as both a reference and a guide for applying functional programming techniques in Scala. This book is commonly used as a textbook in academic institutions.
Provides practical solutions to common problems encountered when programming in Scala. It covers a wide range of topics, including functional programming, macros, and performance optimization. It useful reference for experienced Scala developers looking to improve their skills. This book is more valuable as additional reading than it is as a current reference.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser