Coursera Course Reviews

Lately I have been really interested in participating in some of the programming related massive open online courses (MOOCs) offered by Coursera. Coursera offers a really great platform for learning; providing multiple ways to test students’ understanding of the material and also most importantly a large community of like minded people in the Coursera discussion forums providing invaluable help to others.

Functional Programming Principles in Scala

This course was my first introduction to functional programming apart from the useful functional helper methods and various other techniques that have seeped into most high-level languages. This was also my first time using Scala, which I had been meaning to try out for a while now. I really enjoyed the Scala language, but a lot of the course involved learning some of the basics of the language rather than learning functional programming. The course was very similar to the amazing Structure and Interpretation of Computer Programs (SICP) book, used in many university courses, but using Scala instead of Scheme. I found the course material very useful and it has actually given me the desire to work with Scala in the future.

I found the material easy to grasp and the exercises were relatively simple, the one thing that I did take a little bit more time was that I was trying to make my answers to the exercises into beautiful one line solutions (once you go functional…).

Programming Languages

This course covers a lot of different material in programming language theory: static functional (using SML), dynamic functional (using racket, a scheme) and dynamic object orientation (using ruby). The functional part was a very good introduction to functional programming, SML was such a simple language that we could spend most of the time learning about functional programming rather than quirks of the language. In the next section I really liked learning about the simplicity of a scheme. Personally though I feel that it is too hard for a programmer to quickly understand code with so many brackets. As someone who has done a lot of object orientated programming (OOP) previously, I found the OOP part of the course to be a lot easier than the rest. But obviously if I were to come into the course with no experience of OOP then I probably would have found it the same level of difficulty as the rest of the course. The entire course was very interesting and has made me much more interested in programming language design, and to learn many more programming paradigms in other languages.

I found the assignments quite challenging, especially towards the end of the course. The grading policy was also quite strict, giving you an average of your first two submissions. One different aspect to the course compared to most other courses was that there was a peer review section, I found this particularly useful as I believe it made me more deeply understand the common problems that occur and also it provided a sample solution which was very useful in checking if you had completed assignments correctly.

Machine Learning

This is the fundamental machine learning course that has been provided openly by Standford for a while now, and was one of the first available courses on Coursera. It taught many of the essential techniques for machine learning, which I found quite easy to grasp, as most of the ideas were common sense converted into maths and computational algorithms. I think this course has given me a better grasp on what machine learning actually is, as well as all the terminology associated with it. Also how I can use pretty simple techniques to actually analyze large sets of data very quickly and to great effect. With this information under my belt I believe I can handle a complex machine learning project, that uses techniques well beyond that of the course, with only a little bit of googling.

Octave was used for the programming language and I can understand why, as it made the programming exercises very easy to accomplish and meant that you only had to worry about the machine learning techniques rather than the code.

Principles of Reactive Programming

This was a brand new course offered by Coursera as a sequel to the very popular “Functional Programming Principles in Scala” course mentioned previously, although it was not as polished as its predecessor. However, I really enjoyed learning about some of the advanced techniques in reactive programming. I thought the discussion on monads was very good and I really liked learning about the actor model and I think it was very easy to grasp from the lectures. Especially being able to use it with akka, which is a very mature actor framework for the JVM. I found a lot of the Future/Promises lectures slightly too theoretical, it was fine once I actually used it in the programming exercises, however, a lot of it blew my mind a little bit during the videos.

I found the exercises very rewarding, as they really delved deep into modern reactive frameworks at the cutting edge of programming. Not only that but being able to write more complicated scala considerably deepened my interest in the language. I feel that with a few more iterations of the course, and taking into account the comments from students, that this course will become as popular and fundamental as its predecessor.

For the new year I am taking Computer Networks, Cryptography 1 and Programming Mobile Applications for Android Handheld Systems, which all look to be interesting and useful courses. I encourage you to use Coursera to develop your abilities, as I believe that as programmers we should never stop learning.