This post provides my view on the functional programming course on Coursera, which I’ve completed with distinction. It gives an overview of the lows and highs that I experienced during this course and what I’ve learned from it.
Disclaimer: I don’t have a university degree, but I have a professional Bachelor degree. So my experience and ways of learning have been mostly practical instead of heavily based on theory or lots of math. I have been a Java/Flex software engineer for 6+ years now and have been implementing big enterprise projects since the beginning. Your experience and view on this course may greatly differ from mine based on your current experience and education.
Why did I take this course?
A couple of months ago I decided to learn the Typesafe stack, but quickly came to the conclusion that I had to learn Scala to take full
advantage of all its features.
Meanwhile, there was all this buzz going on about something called “functional programming”. All I heard was “closures, closures, closures”, but I was sure there had to be more to this than only closures. Right around that moment, the Functional Programming Principles in Scala course was announced again and I decided to take on the challenge.
About the course
This course was given by Martin Odersky, designer of the Scala programming language, professor at the EPFL and founder of Typesafe Inc.
The course was seven weeks long and each week you received about 1-2 hours of video lectures and an assignment. For every assignment you receive a grade and you needed to obtain an average of 60% to pass the course and 80% to receive distinction. More info can be found here: https://www.coursera.org/course/progfun
Week 1 & 2
- Functions & Evaluations
- Higher Order Functions
These two weeks were pretty hard for me, mostly because both the lectures and assignments where highly academical. By that I mean that many of
the examples given during the lectures were based on math or some other sort of theory, which made them more complex than they needed to be.
The same was true for some of the assignments (e.g. Pascal’s Triangle and counting change). Overall I feel that the explanations and some of the assignments where unnecessary complex and could’ve been much better without the added complexity of math puzzles (which isn’t the focus of this course).
At the end of these two weeks I was asking myself whether this was the right course for me. But I decided to push on and hope for improvements because at its core it was still teaching me new things about Scala and functional programming.
Week 3 - 7
- Data and Abstraction
- Types and Pattern Matching
- Lazy Evaluations
During all these last weeks of the course I had the same feeling. Some of the lectures where still too academical for my personal taste, but I started using the Twitter Scala School page for when something wasn’t so clear during the lectures. I can’t recommend this page enough as the explanations on there are concise with small simple examples. The assignments got more practical in nature and in most cases didn’t require the knowledge of how to solve some mathematical problem, and when they did the assignments guided you through it. They were still quite hard to solve, but fair. The satisfaction after submitting the assignment and seeing that ‘10/10’ score show up became addicting and wanted me to try for nothing less during the next assignment.
As I mentioned several times during this write-up I felt that the lectures could’ve been better with easier to understand examples and that some of the assignments had some unnecessary complexity involved with it. But overall this course was certainly worth my time and I learned a lot from it. I now have a clear understanding of functional programming and got used to writing some Scala code. Mission accomplished!
As for time spend on this course, prepare yourself for some commitment since you probably won’t have enough with the minimum 5 hours advertised on the course page (at least I didn’t). The lectures will take up about 1-2 hours a week and the assignments took me something between 4-7 hours to complete.
To finish this off, I’ll end with some tips for those who want to take this course the next time it starts:
- If you’re stuck on an assignment, use the discussion forums! They have a wealth of information on it and you’ll probably find someone who’s stuck on the same part. Also, the technical assistants (TA’s) can help you out in most cases, so don’t be afraid to ask for help.
- If a lecture isn’t clear for you, use the Twitter Scala School page or some other resource for some explanation.
- When you’re not feeling motivated to continue because it’s too hard, try to persist. It’s really worth it.