We may earn an affiliate commission when you visit our partners.
Martin Odersky

In this course you will learn how to apply the functional programming style in the design of larger Scala applications. You'll get to know important new functional programming concepts, from lazy evaluation to structuring your libraries using monads. We'll work on larger and more involved examples, from state space exploration to random testing to discrete circuit simulators. You’ll also learn some best practices on how to write good Scala code in the real world. Finally, you will learn how to leverage the ability of the compiler to infer values from types.

Read more

In this course you will learn how to apply the functional programming style in the design of larger Scala applications. You'll get to know important new functional programming concepts, from lazy evaluation to structuring your libraries using monads. We'll work on larger and more involved examples, from state space exploration to random testing to discrete circuit simulators. You’ll also learn some best practices on how to write good Scala code in the real world. Finally, you will learn how to leverage the ability of the compiler to infer values from types.

Several parts of this course deal with the question how functional programming interacts with mutable state. We will explore the consequences of combining functions and state. We will also look at purely functional alternatives to mutable state, using infinite data structures or functional reactive programming.

Recommended background: You should have at least one year programming experience. Proficiency with Java or C# is ideal, but experience with other languages such as C/C++, Python, Javascript or Ruby is also sufficient. You should have some familiarity with using the command line. This course is intended to be taken after Functional Programming Principles in Scala: https://www.coursera.org/learn/progfun1.

Enroll now

What's inside

Syllabus

For Expressions and Monads
We'll start by revisiting some concepts that we have learned from Principles of Functional Programming in Scala; collections, pattern matching, and functions. We'll then touch on for-comprehensions, a powerful way in Scala to traverse a list, process it, and return a new list. We'll see how to do queries with for-comprehensions as well as how the for-comprehension is "desugared" into calls to higher-order functions by the Scala compiler. Finally, we'll discuss what monads are, and how to verify that the monad laws are satisfied for a number of examples.
Read more

Traffic lights

Read about what's good
what should give you pause
and possible dealbreakers
Suits those with experience in Java or C#
Provides a valuable overview of advanced functional programming concepts and their applications
Engages learners with larger and more practical examples to reinforce learning
Promotes effective use of the compiler to derive values from types
Requires familiarity with Scala after taking the prerequisite course
Not suitable for beginners or those with no programming experience

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 functional programming in scala

According to learners, this course is a solid continuation of the introductory functional programming course, building upon core concepts to tackle more advanced topics like monads, lazy evaluation, and state management in a functional style. Many praise the challenging yet rewarding assignments, which help solidify understanding and apply theoretical concepts. However, some find the material complex and fast-paced, requiring significant effort and potentially stronger prerequisites than stated. The lectures are generally well-regarded, though some topics might benefit from further explanation. Overall, it's seen as highly valuable for deep dives into functional design patterns.
Helps apply FP to larger problems.
"The course does a good job showing how functional programming can be applied to design larger applications, beyond simple examples."
"Understanding monads and state management in FP is crucial for real-world Scala development, and this course covers it."
"It provides patterns for dealing with side effects and state in a more functional way."
"Learned how to use constructs like for-comprehensions effectively in more complex scenarios."
Lectures are high quality and informative.
"The lectures are well-structured and deliver complex information clearly."
"Instructor explains challenging ideas effectively, though some parts need rewatching."
"Video quality and explanations in the lectures are generally excellent."
"I appreciated how the lectures tied the concepts back to practical Scala usage."
Homework assignments are rigorous and essential.
"The assignments are challenging but extremely valuable for reinforcing the material. Without doing the assignments, you won't truly grasp the concepts."
"Completing the programming assignments is crucial for understanding the functional design patterns taught."
"The assignments are difficult, requiring significant effort, but they force you to apply the concepts learned in lectures."
"Assignments are hard, sometimes frustrating, but ultimately rewarding once you figure them out."
Need solid FP background from previous course.
"This course absolutely requires a strong understanding of the concepts taught in 'Functional Programming Principles in Scala'. It builds on them heavily."
"If your understanding from progfun1 is shaky, you will struggle significantly in this course."
"Make sure you are comfortable with higher-order functions, pattern matching, and recursion before starting this one."
"Even with the recommended background, some topics felt like a big leap."
Topics like monads and state are quite difficult.
"The material, particularly on monads and type-directed programming, is highly abstract and challenging."
"Concepts like lazy evaluation and functional state management require a deep understanding of FP principles, which is sometimes hard to gain solely from the lectures."
"I found the section on monads particularly difficult to grasp initially; it took significant external reading."
"The course moves very quickly through complex topics, sometimes without sufficient depth in explanations."

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 Functional Program Design in Scala with these activities:
Review Intro to Computer Science concepts
Refresh basic computer science concepts to strengthen your foundation for this course.
Browse courses on Computer Science
Show steps
  • Review fundamental data structures and algorithms
  • Practice writing simple programs in a language of your choice
Read 'Scala for the Impatient'
Supplement your understanding of Scala with this comprehensive guide to the language.
View Core Java, Volume I on Amazon
Show steps
  • Read the book thoroughly
  • Complete the exercises and examples provided in the book
Attend a meetup or conference focused on Scala
Connect with other Scala enthusiasts and professionals to expand your network and learn about the latest trends.
Browse courses on Scala
Show steps
  • Search for meetups or conferences in your area
  • Attend the event and engage with other attendees
Six other activities
Expand to see all activities and additional details
Show all nine activities
Attend a workshop on functional programming in Scala
Deepen your knowledge of functional programming in Scala through interactive workshops.
Browse courses on Functional Programming
Show steps
  • Research and identify workshops that focus on functional programming in Scala
  • Register for a workshop that aligns with your schedule and interests
Practice for-comprehensions
Practice using for-comprehensions to improve understanding and proficiency.
Browse courses on Functional Programming
Show steps
  • Write a for-comprehension to find all the even numbers in a list.
  • Write a for-comprehension to find all the unique elements in a list.
Follow online tutorials on advanced Scala programming
Expand your knowledge of Scala by following online tutorials that cover advanced concepts.
Show steps
  • Search for tutorials on topics such as monad transformers, implicits, or type classes
  • Follow the tutorials and complete the accompanying exercises
Participate in a Scala coding challenge
Test your skills and learn from others by participating in a coding challenge focused on Scala.
Browse courses on Scala
Show steps
  • Find a coding challenge website or platform
  • Choose a challenge that aligns with your skill level
  • Submit your solution and review the solutions of others
Design and implement a simple compiler
Deepen your understanding of compiler construction by creating your own simple compiler.
Browse courses on Compiler Design
Show steps
  • Choose a simple programming language to implement
  • Design the abstract syntax tree (AST) for the language
  • Write a parser to convert source code into the AST
  • Implement the code generator to translate the AST into machine code
Build a personal Scala project
Solidify your Scala skills by developing a project that interests you.
Show steps
  • Brainstorm ideas for a project that aligns with your interests and goals
  • Design and implement the project using Scala
  • Test and refine your project

Career center

Learners who complete Functional Program Design in Scala will develop knowledge and skills that may be useful to these careers:
Software Developer
**Software Developers** are responsible for designing, implementing and testing software applications. This entails writing bug-free, efficient and secure code, as well as collaborating with other developers to achieve common goals. Functional Program Design in Scala can help **Software Developers** learn about important new functional programming concepts, from lazy evaluation to structuring libraries using monads. This course will also teach about best practices on how to write good Scala code in the real world.
Software Engineer
**Software Engineers** design, develop and maintain software systems. They use their knowledge of programming languages, software design and algorithms to build reliable and efficient software. Functional Program Design in Scala can help **Software Engineers** learn about functional programming concepts, which can be applied to software design and development. Additionally, this course will cover topics such as lazy evaluation, type-directed programming and functions and state, which are all important concepts in software engineering.
Machine Learning Engineer
**Machine Learning Engineers** design, implement and deploy machine learning models. They use their knowledge of statistics, programming and machine learning to solve real-world problems. Functional Program Design in Scala can help **Machine Learning Engineers** learn about functional programming concepts, which can be applied to machine learning. Additionally, this course will cover topics such as lazy evaluation, type-directed programming and functions and state, which are all important concepts in machine learning.
Data Scientist
**Data Scientists** use their knowledge of statistics, machine learning and programming to solve business problems. They work with large datasets to build predictive models and identify trends. Functional Program Design in Scala can help **Data Scientists** learn about functional programming concepts, which can be applied to data analysis and machine learning. Additionally, this course will cover topics such as lazy evaluation, type-directed programming and functions and state, which are all important concepts in data science.
Database Administrator
**Database Administrators** design, implement and maintain databases. They use their knowledge of database management systems to ensure that data is stored securely and efficiently. Functional Program Design in Scala can help **Database Administrators** learn about functional programming concepts, which can be applied to database design and management. Additionally, this course will cover topics such as lazy evaluation, type-directed programming and functions and state, which are all important concepts in database management.
Business Analyst
**Business Analysts** analyze business processes and systems to identify areas for improvement. They use their knowledge of business analysis techniques to develop and implement solutions that improve efficiency and effectiveness. Functional Program Design in Scala can help **Business Analysts** learn about functional programming concepts, which can be applied to business analysis. Additionally, this course will cover topics such as lazy evaluation, type-directed programming and functions and state, which are all important concepts in business analysis.
Product Manager
**Product Managers** are responsible for the development and marketing of products. They work with engineers, designers and marketers to ensure that products meet the needs of customers. Functional Program Design in Scala can help **Product Managers** learn about functional programming concepts, which can be applied to product development and management. Additionally, this course will cover topics such as lazy evaluation, type-directed programming and functions and state, which are all important concepts in product management.
Project Manager
**Project Managers** plan, execute and control projects. They use their knowledge of project management techniques to ensure that projects are completed on time, within budget and to the required quality. Functional Program Design in Scala can help **Project Managers** learn about functional programming concepts, which can be applied to project management. Additionally, this course will cover topics such as lazy evaluation, type-directed programming and functions and state, which are all important concepts in project management.
Technical Writer
**Technical Writers** create documentation for software and other technical products. They use their knowledge of technical writing techniques to develop documentation that is clear, concise and accurate. Functional Program Design in Scala can help **Technical Writers** learn about functional programming concepts, which can be applied to technical writing. Additionally, this course will cover topics such as lazy evaluation, type-directed programming and functions and state, which are all important concepts in technical writing.
Consultant
**Consultants** provide advice and guidance to businesses on a variety of topics. They use their knowledge of business and technology to help businesses improve their performance. Functional Program Design in Scala can help **Consultants** learn about functional programming concepts, which can be applied to business consulting. Additionally, this course will cover topics such as lazy evaluation, type-directed programming and functions and state, which are all important concepts in business consulting.
Teacher
**Teachers** plan, execute and evaluate learning experiences for students. They use their knowledge of teaching methods and curriculum to help students learn and grow. Functional Program Design in Scala can help **Teachers** learn about functional programming concepts, which can be applied to teaching. Additionally, this course will cover topics such as lazy evaluation, type-directed programming and functions and state, which are all important concepts in teaching.
Researcher
**Researchers** conduct research to advance knowledge in a particular field. They use their knowledge of research methods and techniques to design and conduct studies that answer important questions. Functional Program Design in Scala can help **Researchers** learn about functional programming concepts, which can be applied to research. Additionally, this course will cover topics such as lazy evaluation, type-directed programming and functions and state, which are all important concepts in research.
Data Analyst
**Data Analysts** collect, clean and analyze data to help businesses make informed decisions. They use their skills in statistics, programming and data visualization to identify trends and patterns in data. Functional Program Design in Scala can help **Data Analysts** learn about data structures and algorithms used in Big Data. Additionally, this course will teach about functional programming concepts, which can be applied to data analysis and machine learning.
Quantitative Analyst
**Quantitative Analysts** use their knowledge of mathematics, statistics and programming to develop and implement financial models. They use these models to analyze risk, price securities and make investment decisions. Functional Program Design in Scala can help **Quantitative Analysts** learn about functional programming concepts, which can be applied to financial modeling. Additionally, this course will cover topics such as lazy evaluation, type-directed programming and functions and state, which are all important concepts in quantitative finance.
Web Developer
**Web Developers** design, develop and maintain websites. They use their knowledge of HTML, CSS and JavaScript to create websites that are both visually appealing and functional. Functional Program Design in Scala can help **Web Developers** learn about functional programming concepts, which can be applied to web development. Additionally, this course will cover topics such as lazy evaluation, type-directed programming and functions and state, which are all important concepts in web development.

Reading list

We've selected seven 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 Functional Program Design in Scala.
Provides a comprehensive overview of Scala for web development. It valuable resource for students and practitioners who want to use Scala for web development.
Provides a comprehensive overview of Scala for machine learning. It valuable resource for students and practitioners who want to use Scala for machine learning.
Provides a comprehensive overview of functional programming in Scala, covering the basics of the language as well as more advanced topics such as monads and lazy evaluation.
Provides a collection of recipes for solving common problems in Scala. It valuable resource for students and practitioners alike.
Provides a deep dive into the Scala language. It valuable resource for students and practitioners who want to learn more about the language.
Provides a quick and easy introduction to Scala, covering the basics of the language as well as more advanced topics such as functional programming and object-oriented programming.
Covers advanced topics in Scala programming, such as type classes, monads, and concurrency.

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