We may earn an affiliate commission when you visit our partners.
Course image
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/scala2-functional-programming.

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
A solid selection of materials, including video and readings
Taught by recognized figures in the field
Well-suited for learners with programming experience
Focuses on the practical applications
Moves into advanced topics that can prepare for industry
Helps learners to build upon their existing foundation

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 design in scala

According to learners, this course offers a deep dive into advanced functional programming concepts in Scala, significantly building upon its prerequisite. Many find the instructor's expertise and clarity to be exceptional, making complex topics like monads, lazy evaluation, and type-directed programming understandable. The homework assignments are highly praised for solidifying understanding, though they are consistently described as challenging and time-consuming. A common sentiment is that the course requires a strong foundation and consistent effort. While designed for Scala 2, students note that the fundamental FP principles remain highly relevant for modern Scala development. It's a valuable experience for professionals seeking to design robust, functional Scala applications.
Core functional programming principles remain relevant.
"Although this course is Scala 2, the underlying functional programming paradigms are timeless and applicable."
"The principles taught here easily transfer to Scala 3 or even other functional languages."
"I was initially concerned about Scala 2, but the focus on core FP concepts made it worthwhile."
Deep coverage of monads, lazy evaluation, and type classes.
"The sections on monads and type classes were particularly enlightening, though quite complex."
"I gained a much deeper understanding of lazy evaluation and its performance implications."
"This course really opened my eyes to type-directed programming and its power."
Homeworks are tough but highly effective for learning.
"The hands-on assignments were incredibly tough but were the most effective way to solidify my understanding."
"I spent hours on the homework, but it truly forced me to think functionally."
"The projects felt very practical and helped me see how to apply FP in larger applications."
Martin Odersky's teaching is highly praised.
"Odersky is a brilliant professor and the content he provides is invaluable if you are willing to dig in."
"The instructor's explanations are clear and he breaks down complex concepts very well."
"I appreciated the depth of knowledge and passion the instructor brought to each lecture."
Course requires strong foundational knowledge.
"This course is a significant step up from the first and requires a lot of dedication to grasp fully."
"You absolutely need to have taken the first Scala FP course to succeed here, otherwise, it's overwhelming."
"I found myself re-watching lectures multiple times to really understand the concepts."

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 (Scala 2 version) with these activities:
Seek guidance from experienced functional programmers
Connect with knowledgeable individuals to gain insights and accelerate your learning.
Browse courses on Mentorship
Show steps
  • Attend industry events and conferences to meet potential mentors.
  • Reach out to professionals in your field via LinkedIn or email.
  • Clearly articulate your goals and what you hope to gain from mentorship.
Read "Functional Programming in Scala"
Gain a comprehensive understanding of functional programming in Scala through this foundational book.
Show steps
  • Acquire a copy of "Functional Programming in Scala".
  • Read through the book, taking notes and highlighting key concepts.
  • Complete the exercises and examples provided in the book.
Practice writing code
Enhance your understanding of functional programming by practicing writing code in Scala.
Browse courses on Functional Programming
Show steps
  • Choose a simple problem to solve, such as finding the factorial of a number or summing a list of numbers.
  • Write a Scala program to solve the problem using functional programming concepts.
  • Test your program and correct any errors.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Follow tutorials on monads
Gain a deeper understanding of monads by following online tutorials and working through examples.
Browse courses on Monads
Show steps
  • Identify online tutorials that cover monads in Scala.
  • Follow the tutorials and complete the exercises provided.
  • Experiment with different types of monads and their uses.
Write a blog post on lazy evaluation
Solidify your understanding of lazy evaluation by explaining it in a blog post and providing examples.
Browse courses on Lazy Evaluation
Show steps
  • Research lazy evaluation and its applications in functional programming.
  • Choose a specific example to illustrate how lazy evaluation works.
  • Write a blog post explaining lazy evaluation, using the example to support your explanation.
Develop a small Scala application using functional programming
Apply your knowledge of functional programming by building a practical application.
Browse courses on Functional Programming
Show steps
  • Identify a problem or task that can be solved using functional programming.
  • Design and implement a Scala application using functional programming principles.
  • Test and refine your application to ensure it meets the requirements.
Contribute to an open-source functional programming project
Enhance your skills and knowledge by contributing to a real-world functional programming project.
Browse courses on Open Source
Show steps
  • Identify an open-source functional programming project that aligns with your interests.
  • Review the project's documentation and codebase.
  • Identify an area where you can contribute and propose your ideas.
  • Develop and submit a pull request with your contributions.

Career center

Learners who complete Functional Program Design in Scala (Scala 2 version) will develop knowledge and skills that may be useful to these careers:
Software Engineer
A Software Engineer designs, builds, and maintains software applications. They work with various programming languages and technologies to create solutions for different users or businesses. By taking this course, you will learn how to apply functional programming to the design of large-scale applications, which will give you a robust skill set for this role.
Data Scientist
A Data Scientist uses their knowledge of programming and statistics to analyze data and develop models. This course will provide you with the ability to work with large data sets and apply functional programming techniques, which will be valuable in this field.
Quantitative Analyst
A Quantitative Analyst uses mathematical and statistical models to analyze financial data and make investment decisions. The concepts of lazy evaluation and type-directed programming you will learn in this course will be particularly useful when analyzing large amounts of financial data.
Systems Analyst
A Systems Analyst designs, develops, and implements computer systems. They also work with users to determine their needs and create systems that meet those needs. Gaining proficiency in functional programming and its application to large-scale applications will be highly beneficial for this job.
Systems Programmer
A Systems Programmer works with operating systems and other low-level software to ensure that computer systems run efficiently. This course covers functional programming principles, such as for expressions and monads, that will be useful for understanding and working with complex systems.
Computer Programmer
A Computer Programmer writes, tests, and maintains code for software applications and systems. They use different programming languages and technologies, and this course will give you a strong foundation in functional programming, which is increasingly used in the field.
Data Analyst
A Data Analyst collects, analyzes, and interprets data to help businesses make informed decisions. The concepts of for expressions and monads you will learn in this course will be useful for working with large datasets and extracting meaningful insights.
Database Administrator
A Database Administrator plans, implements, and maintains databases. This course covers lazy evaluation and type-directed programming, which can help you work more efficiently with databases and manage data effectively.
Software Developer
A Software Developer writes, tests, and maintains code for software applications and systems. This course will help you develop a strong understanding of functional programming principles and their application in real-world projects, which is essential for this role.
Software Test Engineer
A Software Test Engineer tests software applications and systems to ensure they meet requirements and function as expected. This course covers topics such as for expressions and monads, which will be helpful for writing and maintaining test cases.
Web Developer
A Web Developer designs, develops, and maintains websites and web applications. This course covers topics such as lazy evaluation and type-directed programming, which can help you write more efficient and maintainable code for the web.
Quality Assurance Analyst
A Quality Assurance Analyst tests software applications and systems to ensure they meet requirements and function as expected. The concepts of for expressions and monads covered in this course will be useful for understanding and writing test cases.
DevOps Engineer
A DevOps Engineer works to bridge the gap between development and operations teams to ensure that software is developed and deployed efficiently. This course covers topics such as lazy evaluation and type-directed programming, which can help you understand and work with different development and deployment tools and processes.
Cloud Engineer
A Cloud Engineer designs, builds, and maintains cloud computing systems. This course covers topics such as lazy evaluation and type-directed programming, which can be useful for understanding and working with cloud computing technologies and services.
Technical Writer
A Technical Writer creates and maintains technical documentation, such as user manuals, white papers, and training materials. This course can may be useful by giving you the skills to write clear and concise documentation for software and other technical systems.

Reading list

We've selected 11 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 (Scala 2 version).
Is the definitive reference on Scala. It covers all aspects of the language, from the basics to the most advanced features. It is an essential resource for anyone who wants to learn Scala.
Step-by-step guide and reference for using the Scala programming language, including its object-oriented and functional programming features.
Collection of recipes and solutions to common problems encountered when working with Scala. Provides practical guidance on how to use Scala effectively in real-world scenarios.
Explores techniques for modeling complex domains using functional and reactive programming techniques. Provides a modern approach to domain-driven design using Scala.
Provides a practical guide to functional programming in Scala. It covers a wide range of topics, from the basics of functional programming to more advanced topics, such as monads and type classes.
Provides a number of blueprints for functional programming in Scala. It covers a wide range of topics, from the basics of functional programming to more advanced topics, such as monads and type classes.
Introduces the Scala programming language, covering its syntax, semantics, and type system. Provides a quick and easy way to get started with Scala.
Concise and practical introduction to Scala. It covers the basics of the language, such as syntax, types, and object-oriented programming. It also introduces more advanced topics, such as functional programming and concurrency.
Guide to Scala for Java developers. It covers the basics of the language, as well as more advanced topics, such as functional programming and concurrency.
Gentle introduction to Scala. It covers the basics of the language, such as syntax, types, and object-oriented programming. It good book for beginners who have no prior experience with Scala.

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