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/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
Lazy Evaluation
This week we'll revisit performance issues caused by combinatorial search, and we'll discover an important concept in functional programming that can address these issues: laziness. We'll also learn a little bit about proofs on trees; in particular, we'll see how to extend structural induction to trees.
Type-Directed Programming
This week, we’ll learn how to make the compiler write programs for us! We’ll see how the compiler can summon program fragments based on their type and how this mechanism can be used to implement a new form of polymorphism (type classes).
Functions and State
This week, we'll learn about state and side-effects. Through a rich example, we'll learn programming patterns for managing state in larger programs. We'll also learn about for-loops and while-loops in Scala.
Timely Effects
This week we'll learn a number of important programming patterns via examples, starting with the observer pattern, and then going on to functional reactive programming.

Good to know

Know what's good
, what to watch for
, 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

Save Functional Program Design in Scala to your list so you can find it easily later:
Save

Reviews summary

Functional program design in scala

Learners say this course on functional program design in Scala focuses on advanced techniques and topics in Scala. The lectures are clear and engaging, and the assignments are challenging but doable. Overall, this well-structured and interesting course is highly recommended for those who want to learn more about functional programming.
This course covers advanced concepts in functional programming, such as implicits and reactive programming.
"Much harder than the first course of this specialization."
"The last week is difficult, but worth it!"
"Challenging but satisfactory, mind opening."
The course instructor, Martin Odersky, is an expert in Scala and provides clear explanations.
"Martin is smart and knowledgeable."
"The "simple, yet rigorous" teaching methodology prevalent at the EPFL is once more at work."
"Martin Odersky has a beautiful, calming, sweet voice, that is able to entertain and guide the student even through the most difficult concepts."
Many assignments in this course are difficult but rewarding.
"All assignments except the last one are super difficult."
"The assignments are tough but worth it."
"I really enjoyed the type directed programming section. It gave me new perspective to look at things."
Some learners have noted that the course content can be disorganized and lacking a clear connecting thread.
"This course will shatter your desire to learn Scala."
"Subjects of exams are really cool but they are already written at 80~90%, I would prefer to have to do things from scratch even if the subject is less interesting."
"For the content of last 3 weeks, I struggled through some of them, I found some of them quite irrelevant."
This course assumes some prior knowledge of Scala.
"Heed the warnings that you must be an experienced Scala programmer to do well in this class."
"I took the "beginning" class, but even that was challenging and I didn't complete the later assignments."

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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.

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

Here are nine courses similar to Functional Program Design in Scala.
Functional Program Design in Scala (Scala 2 version)
Most relevant
Functional Programming Principles in Scala (Scala 2...
Most relevant
Functional Programming Principles in Scala
Most relevant
Big Data Analysis with Scala and Spark (Scala 2 version)
Most relevant
Big Data Analysis with Scala and Spark
Most relevant
Parallel programming (Scala 2 version)
Most relevant
Parallel programming
Most relevant
Scala 2: The Big Picture
Most relevant
Scala 2 Methods and Functions
Most relevant
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 - 2024 OpenCourser