subject
Intro

Coursera: Functional Program Design in Scala

 with  Martin Odersky, Erik Meijer and Roland Kuhn
In this course you will learn how to apply the functional programming style in the design of larger 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.

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.

Learning Outcomes. By the end of this course you will be able to:

- recognize and apply design principles of functional programs,
- design functional libraries and their APIs,
- competently combine functions and state in one program,
- understand reasoning techniques for programs that combine
functions and state,
- write simple functional reactive applications.

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 using the command line. This course is intended to be taken after Functional Programming Principles in Scala: https://www.coursera.org/learn/progfun1.

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.

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

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. We'll learn how latency can be modeled as an effect, and how latency can be handled with Scala's monadic futures. We'll learn the important combinators on futures as well as how they can be composed to build up rich and responsive services.

38 Student
reviews
Cost Free Online Course (Audit)
Pace Upcoming
Provider Coursera
Language English
Certificates Paid Certificate Available
Hours 5-7 hours a week
Calendar 4 weeks long
Sign up for free? Learn how

Disclosure: To support our site, Class Central may be compensated by some course providers.

+ Add to My Courses
FAQ View All
What are MOOCs?
MOOCs stand for Massive Open Online Courses. These are free online courses from universities around the world (eg. Stanford Harvard MIT) offered to anyone with an internet connection.
How do I register?
To register for a course, click on "Go to Class" button on the course page. This will take you to the providers website where you can register for the course.
How do these MOOCs or free online courses work?
MOOCs are designed for an online audience, teaching primarily through short (5-20 min.) pre recorded video lectures, that you watch on weekly schedule when convenient for you.  They also have student discussion forums, homework/assignments, and online quizzes or exams.

38 reviews for Coursera's Functional Program Design in Scala

Write a review
1 out of 1 people found the following review useful
4 years ago
profile picture
Anonymous completed this course.
Heed the warnings that you must be an experienced Scala programmer to do well in this class (I am a very experienced imperative programmer in several languages). I took the "beginning" class, but even that was challenging and I didn't complete the later assignments (I did complete them after the class ended). Read More
Heed the warnings that you must be an experienced Scala programmer to do well in this class (I am a very experienced imperative programmer in several languages). I took the "beginning" class, but even that was challenging and I didn't complete the later assignments (I did complete them after the class ended). The lectures only cover the basics, but the assignments go into details and do cover the essentials quite well. The best resource was the "Reactive Cheat Sheet" that was mainly put together by advanced students (thank you, thank you). Even then, I didn't complete any of the assignments. I persevered because my goal became collecting a wide variety of resources to be understood later. The class forum grew to over 90 pages of just topics (I saved many of the discussion pages). Distributing applications on a "sea of processors" is the future of computing and tools for thread management are essential. This class goes a long way in providing this knowledge. Five stars for content.
Was this review helpful to you? YES | NO
1 out of 1 people found the following review useful
4 years ago
profile picture
Mark Wilbur partially completed this course.
This course is the follow-up to the same institution’s FP/Scala course. As before the presentation is great and the problems are hard. I ended up getting derailed by the second homework assignment, though. It involved a simulation of a circuit. Circuits might be common knowledge to Prof Oderskey, but I would have had an easier time modeling something I was more familiar with.
Was this review helpful to you? YES | NO
4 years ago
profile picture
Anonymous completed this course.
Not yet finished and not as good as "Introduction to Functional Programming in Scala" by Odersky, this course is anyway well done, explanations are generally clear and content is challenging but well presented. The only negative point is that the test rater does not provide clear feedback. It has been told th Read More
Not yet finished and not as good as "Introduction to Functional Programming in Scala" by Odersky, this course is anyway well done, explanations are generally clear and content is challenging but well presented. The only negative point is that the test rater does not provide clear feedback. It has been told that it's up to the student to write his own tests.. maybe a side course on scalatest and scalaunit would be a good idea for thise who do not have experience. And even in this case, if I fail a test and do not know why the feedback is not that useful.
Was this review helpful to you? YES | NO
3 years ago
Antoine Hugueney completed this course, spending 20 hours a week on it and found the course difficulty to be hard.
The "simple, yet rigorous" teaching methodology prevalent at the EPFL is once more at work. Is it time for you too to get acquainted with asynchronous and distributed systems in a more systematic way? Let's call it Reactive. Functional ReactiveProgramming. Reactive Streams. Reactive design patterns through the Akka act Read More
The "simple, yet rigorous" teaching methodology prevalent at the EPFL is once more at work. Is it time for you too to get acquainted with asynchronous and distributed systems in a more systematic way? Let's call it Reactive. Functional ReactiveProgramming. Reactive Streams. Reactive design patterns through the Akka actor library.

The challenge is real - and the results follow the principle "the greater the challenge, the greater the reward".
Was this review helpful to you? YES | NO
2 years ago
Johan Rylander completed this course, spending 10 hours a week on it and found the course difficulty to be medium.
Slightly disorganized course. Very good though. Maybe the subject is just broad. There are multiple presenters. Anyways, I do recommend it and I did finish it which I would not have done if it was not good enough (for me).
Was this review helpful to you? YES | NO
a year ago
profile picture
Anonymous completed this course.
The course started well, but I would have added 2 more weeks to the existing 4 weeks. There was a lot more that they could have covered, especially with regards to reactive programming.
Was this review helpful to you? YES | NO
a year ago
profile picture
Anonymous completed this course.
The course started well, but I would have added 2 more weeks to the existing 4 weeks. There was a lot more that they could have covered, especially with regards to reactive programming.
Was this review helpful to you? YES | NO
4 years ago
profile picture
Laurence Cabenda completed this course.
I really enjoyed working myself through this class exploring concurrent reactive techniques using the Scala language. "It's hitting two flies with one blow"
Was this review helpful to you? YES | NO
4 years ago
profile picture
Anonymous completed this course.
This is an excellent class, however, it covers advanced material. A certain amount of tenacity is required to finish it.
Was this review helpful to you? YES | NO
4 years ago
profile picture
Anonymous completed this course.
Challenging but intesting course. It's a good follow-up to "Functional Programming Principles in Scala"
Was this review helpful to you? YES | NO
4 years ago
profile picture
Anonymous completed this course.
Fantastic course. If you want to learn more about modern programming concepts you should take it.
Was this review helpful to you? YES | NO
4 years ago
profile picture
Anonymous completed this course.
Challenging but satisfactory, mind opening. Really worth the time and effort.
Was this review helpful to you? YES | NO
4 years ago
profile picture
Anonymous completed this course.
Challenging, but with lots of "Aha" moments and a sense of accomplishment
Was this review helpful to you? YES | NO
2 years ago
Mirko Francuski partially completed this course.
Was this review helpful to you? YES | NO
2 years ago
Wang Euleri partially completed this course.
Was this review helpful to you? YES | NO
2 years ago
Mark Henry Butler completed this course.
Was this review helpful to you? YES | NO
a year ago
Marco Rietveld completed this course.
Was this review helpful to you? YES | NO
3 years ago
profile picture
Ivan Vyshnevskyi completed this course.
Was this review helpful to you? YES | NO
a year ago
Chris C completed this course.
Was this review helpful to you? YES | NO
a year ago
Chema Cortés completed this course.
Was this review helpful to you? YES | NO
2 years ago
profile picture
Juan Caballero completed this course.
Was this review helpful to you? YES | NO
Was this review helpful to you? YES | NO
3 years ago
Guanxichen is taking this course right now.
Was this review helpful to you? YES | NO
2 years ago
Oleg Tyshev completed this course.
Was this review helpful to you? YES | NO
2 years ago
Hadrien Zalek completed this course.
Was this review helpful to you? YES | NO
2 years ago
Paolo Midali completed this course.
Was this review helpful to you? YES | NO
2 years ago
Christopher Pitt completed this course.
Was this review helpful to you? YES | NO
Was this review helpful to you? YES | NO
a year ago
profile picture
Fabrizio Benigni completed this course.
Was this review helpful to you? YES | NO
2 years ago
Juliano Ignacio audited this course.
Was this review helpful to you? YES | NO
3 years ago
profile picture
Kuronosuke is taking this course right now.
Was this review helpful to you? YES | NO
3 years ago
Vlad Podgurschi completed this course, spending 18 hours a week on it and found the course difficulty to be hard.
Was this review helpful to you? YES | NO
2 years ago
Gregory Deangelis completed this course.
Was this review helpful to you? YES | NO
a year ago
profile picture
Herman Starzhynski partially completed this course.
Was this review helpful to you? YES | NO

Class Central

Get personalized course recommendations, track subjects and courses with reminders, and more.

Sign up for free