I've just finished attending my first MOOC on Coursera, the course was Programming Languages by Dan Grossman from the University of Washington.
What an excellent experience it was, I thoroughly enjoyed it and learnt a ton of new stuff, especially related to Functional Programming, which I've now secretly fell in love with.
The course was spread over 10 weeks and each week's topic was tested with a programming assignment and peer assessment. There were also two exams, one in the middle of the course and the other at the very end.
Every section was comprised of a series of lectures in video format, each about 10 minutes long. I found this format extremely good, as for me, digesting information in small chunks works much better. Always available are the slides used in each lecture and a coding summary of the main concepts discussed (aka Reading notes).
You could even watch the videos off-line or on your mobile device as Coursera gives you the ability to download them.
Instructor and Team
Dan Grossman and his team have done an incredible job putting this course together. I just love the way he explains concepts, clearly, engagingly and even by jumping up and down to make you understand what he's saying (see the Function Subtyping video in Section 8).
In each video Dan is not afraid to fire up an editor and show you what he has just explained in real working code. I've been on some other online courses and read some books where everything is explain in pseudo code or formulae and never implemented and shown in real Programming Languages.
Lectures have also been scattered with in-video questions, sometimes making you use your intuition and think about the answer even before the formal explanation of the concept in question is revealed. I found those in-video questions extremely useful to verify and solidify my understanding of the concept just explained.
Assignments and Exams
This was the fun part of the course. It started off with really simple challenges, as expected, but pretty quickly they've turned into interesting problems to solve. For example, one assignment was about creating an interpreter for a made up programming language, and another was about enhancing a Tetris game.
I was really impressed about the detailed specifications provided for each challenge and the emphasis on writing tests (I'm an advocate of TDD) to verify your code.
The assignments were then automatically graded through the website. Even though the auto-grader was pretty good at giving feedback on basic and edge cases, sometimes the messages were a bit cryptic. That is when the discussion forum came really handy. Dan's team and Dan himself were really active on the forum, quickly replying to students questions and amending the course material if a bug was reported.
Exams were also challenging and formulated to test the more theoretical parts of the course. You had a practise exam available, which you could have taken multiple times, and then the actual exam, for which you had only one chance.
I wasn't completely satisfied with the peer assessment process. The idea was that you reviewed the solutions of the week assignment of other 3 or more students and then your own. The peer assessment focus was to evaluate the coding style and clarity and not the correctness of the solution, because that was already verified by the auto-grader.
That is what I found really difficult; looking at code and evaluate it not based on correctness. Maybe that was just my problem as I've been reviewing code for years based on style and correctness, or maybe I got the instructions wrong.
Another low point regarding peer assessment was the double submission. You had to submit your solution twice on different pages. That led me to forget submitting my solution for peer assessment for the last assignment losing 10% grade for that week.
I can see the value of peer assessment and I would not suggest to remove it from the format of the course, but maybe just improve the experience. An idea would be to automatically post the solution file submitted for the auto-grader for peer assessment.
I would recommend this course to all software developers to learn or solidify your knowledge of programming languages. It will help you looking at the languages you already use in a different perspective, making you ask questions about them and making you curious about why some constructs have been implemented in that specific way. It will ease the learning curve to learn new languages as you will approach them in a more structured way.
I would also suggest to include Coursera as one really valid option to include in your company training scheme.
So, thank you Coursera for providing a pretty amazing platform for free learning and thank you all universities, instructors and teams for providing and presenting the content.
I don't know my final grade yet as it will be available on the 14th of December, hopefully it is going to be a good one!