I’ve recently gone back to college. Well, not exactly, but I have been attending a single class via a massive open online course (MOOC). The course I’m taking is “Principles of Reactive Programming” and is offered by Coursera. It’s being taught by Martin Odersky, Erik Meijer and Roland Kuhn.
The high-order bit of any discussion of MOOCs has to be set to the quality of the lecturers: Odersky is Scala’s inventor; until recently, Meijer was a leading force in Microsoft’s languages division; and Kuhn is the technical lead of the well-regarded Akka framework. These are the types of speakers that would be exciting to hear give a 1-hour keynote at a conference; the privilege of receiving a coordinated 7-week course from such speakers is, by far, the dominant takeaway from the experience.
Not that the technical experience is bad. Coursera’s infrastructure is very efficient. Signup is easy, pages are attractive, and all the logistical elements of the course (lectures, assignments and discussion forums) are easy to navigate. (I’m not sure if this is a broadly available feature, but the course’s homework-grading technology is quite slick: There’s a “submission” build target that uploads your code to a server that subjects it to a test suite, scores it, and posts the results to your account within a few minutes.)
The video lectures are also very clean. Rather than being PowerPoint or Keynote recordings, the content appears crisply displayed against a white background. It’s clear the text is being rendered directly, not videotaped from a whiteboard, yet the lecturer’s hand occasionally appears to annotate the content. It’s a nice piece of sorcery. I’ve mostly streamed the lectures and not had any buffering issues, but they are also available for download.
MOOCs had their 15 minutes as The Next Big Thing a few years ago and now are suffering a bit of a backlash. Completion rates for MOOCs are abysmal, even when controlling for various factors (e.g., college credit offered, being paid to take the course, etc.). The lecturers might be world-class, but no MOOC can provide the rich experience of a college community.
I’ll admit that I’ve fallen behind in my class and will not complete all the assignments, even though I was well prepared for the topic. As with SD Times readers, I understand that my career relies on my continuing education, and I enjoy learning, but a video explaining the universality of the “bind” function has a substantially higher cognitive load than a video in which goats scream like people.
A weekly Google+ Hangout with some friends taking the course was a crucial spur that unfortunately fell apart over the Thanksgiving holiday. Coursera’s discussion forums are impressively productive (the broad backgrounds and sheer volume of students produce high-quality answers to both simple and complex questions, and TAs do a good job of sweeping through and resolving lingering issues), but scheduling an actual discussion is, for me, far more motivating (and I suspect that an in-person meetup would be more motivating still). In the future I probably will not attempt a MOOC unless I can get at least a few friends to commit to a weekly video chat.
Those are my general observations, but I imagine that many readers will be curious about the specific course. I’ll reiterate that the lecturers are uniformly superb. The content is more academic than my friends and I expected, taking weeks to establish the “principles” spoken of in the title. C# developers familiar with that language’s asynchronous features will have a leg up on the concept of Futures, while familiarity with the Reactive Extensions gives an advantage only in week 4.
The consensus in the discussion forums is that the assignments of the course are not as well worked out as the lectures. Rather than the “five to seven hours per week” predicted in the course description, my friends and I (all of whom have professional Scala experience) have been taking eight to 10 hours and have thrown up our hands at certain things (specifically, one assignment where the grader mutated internal state and then failed code that didn’t match its assumptions). I would imagine that future sessions will be smoother, at the least with fleshed-out requirements and in some cases, I think, scaling back the ambition of the assignments.
This programming course provides a learning experience substantially deeper than what can be had at conferences and, for the third time, the lecturer quality is untouchable. Although I don’t suppose I’ll repeat this course in order to get a perfect assignment score, I’d sign up for an F# variant in a heartbeat. In the meantime, I’ll tweet (@lobrien) whatever software courses for which I do sign up. If you do the same, maybe we can Google Hangout together and motivate each other to be better programmers.
Larry O’Brien is a developer evangelist/advocate for Xamarin. Read his blog at www.knowing.net.