Coursera’s Functional Programming in Scala specialization review

The specialization is composed of 4 lesson+assignment courses and a final capstone project to put in practice everything you have just learned.

Kind of free?

The first course is available for free. You can access lessons and assignments without paying and your solutions to the assignments will be graded. The only thing you won’t obtain for free is the ‘Online Diploma’ once you have completed the course.

Courses 2 to 4 lessons are also available for free, you just have to subscribe as an ‘Auditor’. The option is a little bit hidden in the ‘Subscribe’ dialog, but it’s there. By accessing the course as an Auditor, you won’t have access to the course’s assignments. Course 5 is a six-weeks assignment, so you will need to pay for taking it.

The full course has recently been updated to Coursera’s subscription model. This means that you will pay a monthly fee for as long as it takes you to complete the full specialization, or until you decide to stop paying for it. You can also take pauses, and each time you re-subscribe you will have one free-trial week.

Courses

Let’s review each course in more detail.

Course 1: Functional Programming Principles in Scala

This course has all what you want from a programming course and more. The course is taught by Martin Odersky himself. You will learn how Scala evaluates code, what functional programming is, how to write recursive functions, what higher order functions are, a little bit about OOP and how Scala implements it, pattern-matching, Scala’s collections and why they are so awesome and more.

OK, I mentioned Martin Odersky but you may have no idea who is he. He is one of Scala’s authors, and you will notice it when he shares insights throughout the videos of why Scala works the way it works and the design decisions they took. That’s really valuable and it lets you appreciate a little bit more some parts of Scala you might not liked at first (I’m looking at you, implicits!).

You really don’t need previous knowledge about Scala, but I highly recommend having done the Scala tutorial first, or having read the first chapters of Programming in Scala.

I found the first week (e.g. recursion) and week 6 assignments (e.g. anagrams) harder than expected, and I’ve been working as a full time coder for a while! =)

The course is planned to be completed in six weeks, but it really depends on how much time you allocate to it. I found this course to be more time-demanding than the following courses.

Course 2: Functional Program Design in Scala

I have mixed reactions about this course. The most important thing about it for me is the explanation about how for-comprehension works in Scala and the intro to Monads. For me, it shed some light on why Slick queries work the way they work, and it let me look the whole Scala standard library with renewed eyes.

It also has an intro to Functional Reactive Programming (FRP), but I didn’t find it that great. The examples used in this course are taken from Haskell, take a look at the original source if you are interested.

I found the programming assignments a little bit lack-luster, and less time consuming than the ones from the previous course.
– The first one is about implementing a solver for the Bloxorz flash game.
– The second one is more about you learning to use ScalaCheck library by your own than anything related to that week’s material.
– The last one is about implementing a kind-of web Excel using FRP. It’s a nice intro of what can be done with Scala.js and a reactive library on the front-end.

The course is divided in 4 weeks, like the next two. The graded assignments are not very time consuming, but you also have a lot of in-lesson exercises that might take some time to complete.

Course 3: Parallel programming

This course is great! You will learn some cool Scala tricks to abstract yourself from threads and processors. You will learn how to use parallel collections and you will implement some really well known algorithms like K-Mean and Barnes-Hutt simulation.

I don’t have a background in computer science, so I found some of the lessons with demonstration theory (i.e. probe that certain properties holds or not) a little bit… tedious.

The assignments are really fun to complete, and you might find the algorithms you implement here really useful in your next job.
– Implement the blur filter for editing images
– Re-implement some of the recursive assignments from course 1 – week 1 (i.e. recursion) using parallel programming
– Implement a K-Mean algorithm
– Implement a Barnes-Hutt simulation

If you are like me, course 3 might take you a little bit longer than course 2 to complete, because you might need to rest a little bit between each video when demonstrations starts =)

Course 4: Big Data Analysis with Scala and Spark

This was the course I really wanted to do, and I did all the previous ones as a really long intro to this one. You will learn to use Spark. You will be able to appreciate how it has evolved throughout time, starting with RDDs, then DataFrames, and finally typed Datasets. It’s a really complete course and Heather Miller makes a great job explaining everything.

The assignments are all about Spark.
– The first one is about processing a lot of Wikipedia articles in a distributed way.
– The second one is two weeks long, and takes quite some time to complete. You will go through a set of Stack Overflow questions and answers, in search for the most popular programming language! You will implement a K-Mean algorithm using Spark.
– In the last assignment you will finally discover what american people spend their time on, in case you have ever wandered. You will use Spark SQL, and after completing it you will have a good idea of which Spark data-abstraction you should use depending on your use case.

The lessons on this course are really easy-going, but the second assignment might take some time to complete. All in all, it’s very straightforward course to complete.

Course 5: Functional Programming in Scala Capstone

The moment you were waiting for. You will finally have the opportunity to apply all your just-acquired knowledge in a long project. I haven’t really finished with this one yet, but so far I have found it really easy-going.

You will implement a way to visualize how temperature has varied in the work as years has passed. On the six weeks it is divided you will:
– Process a lot of temperature samples using your preferred method (Spark? parallel collections?)
– Implement spatial and linear interpolation algorithms.
– Integrate your code with a web app.
– More distributed programming for doing some data-intensive calculations
– And much more! (remember, I haven’t finished it yet =) )

This course is pure coding, so just take your favorite caffeinated beverage and you will finish it in no time!

Final thoughts

I really recommend this course if you are just starting with Scala and Functional Programming, or if you want to improve your knowledge of it.
Spark job offers are on the rise, and it’s never too late to learn a new skill.