I've spent a lot of time on Massive Online Open Courses (AKA MOOCs). I've learned some great things from them, but I've also encountered a lot of time-wasting inefficiencies. For the most part, I've been taking programming and CS-related MOOCs. There are quite a few I looked at and then bailed on before doing any work, but also quite a few I put work into. Below is a list of the classes I worked on and then a summary of each.

Courses Studied

  1. Software Engineering for SaaS (UC, Berkeley)
  2. Introduction to Systematic Program Design (University of British Columbia)
  3. Discrete Optimization (University of Melbourne)
  4. Coding the Matrix: Linear Algebra through Computer Science Applications (Brown)
  5. Algorithms, Part I (Princeton)
  6. Linear and Integer Programming (CU, Boulder)
  7. Functional Programming Principles in Scala (École Polytechnique Fédérale de Lausanne)
  8. Automata (Stanford)
  9. Principles of Reactive Programming (École Polytechnique Fédérale de Lausanne)
  10. Mathematical Biostatistics Boot Camp 1 (John Hopkins) - In progress
  11. Creative, Serious and Playful Science of Android Apps (UI, Urbana-Champaign) - In progress

Software Engineering for SaaS

Platform: edX
School: University of California at Berkeley
Rating: 4/5
Completion: Certificate earned
Review: This was the first MOOC I ever completed. All in all, I enjoyed the experience. I learned the basics of how to use Ruby on Rails, and learned the basics of TDD. Also I got accustomed to writing code to pass automated graders. It wasn't anything mind-blowing, but it was far better entry point than various other video-heavy rails tutorials I had encountered. On the down side, the course was constantly making comparisons between Ruby and Java, which I hadn't studied and was unrelated to the coursework. It would have been better to either make Java familiarity an explicit pre-requisite or else refrain from using it in lectures.
Note: Berkeley was on Coursera when I took this class but has since moved to edX.

Introduction to Systematic Program Design

Platform: Coursera
School: University of British Columbia
Rating: 5/5
Completion: about 1/3
Review: This course is aimed at novices, but I still got some useful things out of it. I ended up skipping most of the work towards the end due to the slow pace, but I really like the systemic approach the Prof used. The course used a language called Racket (a scheme variant), and I think that was a good thing. It eliminated syntax-related distractions and really made the data and functions clearer. The course was very well-contained and had no unspoken pre-requisites. On the contrary, it was the students coming in with a background in Java or similar languages who struggled, not the beginners! At least that's what it looked like from the forums. This was probably only a problem for those who were set in their ways.

Discrete Optimization

Platform: Coursera
School: University of Melbourne
Rating: 3/5
Completion: about 1/3
Review: I was really torn on this class. On one hand, it focuses on really cool problems. If you've ever wanted to know how best to handle intractable problems like the traveling salesman problem or the map coloring problem, this is your course. Prof Pascal Van Hentenryck's explanations of the problems were top-notch and his enthusiasm was just contagious! Unfortunately, he chose to use only "pseudo-code" in lecture examples. This made deciphering his algorithms needlessly troublesome. Worse yet, his pseudo-code wasn't similar to Javascript, Ruby, C, Java, Lisp or any other major language. Instead it was most similar to his own commercial language, Comet. I quit the class due to time constraints and the feeling that my time would be better spent learning CS than deciphering his code which was not code from any actual language. The course would have been much better if he had either used any of say the 20 most common languages for his examples, or given a crash course on the syntax he did use.

On the good side, since he wasn't prescriptive at all about what languages we used, we could solve any problem in any language we wanted and our grade was based purely on how optimal a solution we could obtain. Also, we were free to solve the problems in any order we chose, so long as we did one per week. Furthermore, we were allowed to return to previous assignments as we learned new techniques apply them for a better ranking. I loved that!

Coding the Matrix: Linear Algebra through Computer Science Applications

Platform: Coursera
School: Brown University
Rating: 3/5
Completion: about 1/3
Review: This is another course I felt torn about. On the good side, the idea is fantastic! Why not use programmers' systemic thinking abilities as a springboard to learn linear algebra more quickly? When I studied linear algebra long ago, it used quite a few examples from calculus and electricity and magnetism. While that was a good approach, I feel that linear algebra is a subject that is worth studying for more people than multivariate calculus is. That alone made me optimistic about the course. Unfortunately, the automated grader was horribly buggy and so much of a pain to deal with that I decided to use my study time on other classes.

Algorithms, Part I

Platform: Coursera
School: Princeton
Rating: 4/5
Completion: about 1/2
Review: This course is an algorithms class intended to be the 2nd course taken by CS students at Princeton. From what I could tell the course was pretty true to the actual Princeton class, and the automated grader was great. It wasn't a good use of my time personally, because I found that I had already learned nearly all the algorithms in it from when I studied at Hack Reactor. That isn't to say I didn't spend a lot of time on the homework, though. I did. It's just that all of the difficulties for me came from the Java language, which wasn't the focus of the class. I've since become more comfortable (though still not happy with) Java, and may go back through the rest of the assignments for fun. This algorithms class was well designed and I'll probably take the follow-up class.
Note: No certificates of any kind are offered to students of this course or its sequel

Linear and Integer Programming

Platform: Coursera
School: University of Colorado at Boulder
Rating: 4/5
Completion: about 1/3
Review: This course is very useful for solving various optimization problems. I enjoyed the lectures and got quite a bit out of them. I found the quizzes easy since they were heavily math-based and I understood the math from the lectures, but I really struggled on the programming assignments. I chose to use Python since, of the suggested languages, it was the one I had the most familiarity with. I ran into some problems with libraries and since what I was using wasn't the most common choice I had limited help. A lot of students were using Matlab, and in retrospect that might have been the better way to go since it was more supported by the instructor. Enrollment in the course does come with 3 free months of Matlab usage.

Functional Programming Principles in Scala

Platform: Coursera
School: École Polytechnique Fédérale de Lausanne
Rating: 5/5
Completion: Certificate earned
Review: This course assumed no background in Scala. It was a self-contained course involving some hard problems. I had plenty of headaches while working on the homework assignments, but not once did I run into a problem related to environment set-up or unspoken pre-requisites. I wish all Coursera classes were like this! Though the instructor (who happens to be the creator of Scala) did make references to Java, no background in Java was necessary for the class. I suspect it was a class that was very hard for different students in different ways. While I probably found the functional aspects a lot easier than some students coming from pure OO backgrounds, the type-system was mind-bending for me! The only statically-typed language I'd used before was C and Scala's type system sure is a lot more complex.

Machine Learning

Platform: Coursera
School: Stanford
Rating: 2/5
Completion: about 1/2
Review: This course is famous. It's taught by the equally famous Coursera co-founder and ML-star, Andrew Ng. Though I found this class to be one of the worst learning experiences I've had with a MOOC, I really have to say I love Andrew's ability to explain things and the way he teaches in general.

There were several problems, though. First of all, the set-up instructions for Mac were broken. Much more importantly, the class is not comparable to Andrew's actual ML class at Stanford. Throughout the course, he keeps telling students not to worry about the math, and spoon feeding equations to us. Worse still, I was able to get a 150% (i.e. massive extra credit) on the first assignment without actually understanding what was going on. The programming assignments were mostly done for us, with just a line or two that needed to be filled in. Amazingly, those missing lines were sometimes in the class slides.

The problem with the super friendly "everybody take my class" approach is that working through the math and doing problem sets is actually important. Without them, it's difficult to have more than just a brittle understanding of the material. If I could change just one thing about the class, it would be to greatly increase the amount of homework. The existing assignments could still be used since hand-holding is okay for newly introduced concepts, but there should be further problems (preferably some with solutions) that we can work on to cement our knowledge. It's absolutely crucial that students are able to get feedback on at least some portions of those problem sets. In other words, save the honor code for a subset of the assigned problems.

Automata

Platform: Coursera
School: Stanford
Rating: 5/5
Completion: Certificate earned (+ programming track completed)
Review: Automata lead me to more revelations about the nature of computing than any other class I've taken, online or offline. It was fantastic. Discrete math is definitely a pre-requisite but the course info page provided a link to a free online book for students without the needed background!

The only caveat about this class is that unlike a lot of MOOCs, just working at the keyboard doesn't work so well. I strongly recommend breaking out a pencil and paper and working through all the problems in the videos and homework assignments.

Principles of Reactive Programming (École Polytechnique Fédérale de Lausanne)

Platform: Coursera
School: École Polytechnique Fédérale de Lausanne
Rating: 4/5
Completion: ~ 2 weeks
Review: This course is the follow-up to the same institution's FP/Scala course. As before the presentation is great and the problems are hard. I ended up getting derailed by the second homework assignment, though. It involved a simulation of a circuit. Circuits might be common knowledge to Prof Oderskey, but I would have had an easier time modeling something I was more familiar with.

Final Thoughts

I love the breadth of materials available to motivated independent learners. I've certainly spent a lot of time on them this year. I feel that they weren't really an optimal use of my time, though. I spent too much time struggling with configuration and set-up. I also spent way too much time struggling with courses I didn't really have the pre-requisites for.

I already have a full-time job as a member of Groupon's Merchant Engineering team. As fun as it is, just signing up for interesting looking classes and jumping into the videos isn't a great use of my limited time and energy. Since I'm determined to continue building my skills, I've come up with a new plan that will be more structured, more effective, and hopefully more efficient as well.


I gave a general overview of MOOC platforms in Part I, and will share my upcoming self-study plan in Part III (to be published)

Leave a Reply to Kurt Bartholomew Cancel reply

Your email address will not be published. Required fields are marked *

5 replies
  • Wow, thanks a lot for all this information. Do you know any MOOC that would provide a complete learning path to become a full stack RoR or Javascript developer from scratch ?

    I actually do lots of HTML/CSS/LESS and a bit of jQuery at work, but I would love to start a great online training that would give me these qualifications. I would love to attend Hack Reactor or Dev Bootcamp but simply can’t afford it at the moment.

    Many thanks, from Montreal, Canada. 😉

  • admin says:

    Gab, I’m not sure there is a great MOOC path for that particular skill set. Like in person college classes, most of the MOOCs are aimed at CS fundamentals as opposed to what an engineer focused on web apps most needs. I’d highly recommend reading Chris Pine’s Learn to Program concurrently with any sort of CS101 Intro to Programming MOOC you can find. Then take Software Engineering for SaaS (UC, Berkeley). After that, build things, read a full book on whatever framework you’re interested in, keep building things and putting them on github and then reach out to professionals for an honest assessment of your skills. It’s not easy, but it is totally possible to learn this stuff on your own.

  • Many thanks for your time and help.

  • Kurt Bartholomew says:

    The number of MOOC’s you have done is pretty impressive. The reviews have been quite helpful to me.

    I’m trying to create my own track to accomplish much the same thing. Do you have any suggestions for learning on the topic of discrete mathematics? You talked about this from the Stanford course. The MIT OpenCourseWare is a bit daunting, but I ultimately want to prepare myself for algorithms work beyond simple sorts and graph searches.

    I’m actually in much the same situation you were, having come back from teaching in a foreign country, getting into Hack Reactor and feeling the crunch of time stemming from being a bit older. Your blog has been a really interesting and helpful read. I’m trying to get a feel for how to self-teach the discrete math foundations needed for higher level algorithms and I was hoping I could get some insight from you.

  • Paul says:

    “Since I’m determined to continue building my skills, I’ve come up with a new plan that will be more structured, more effective, and hopefully more efficient as well.”

    Would you mind sharing your new plan? I’ve been following your blog and I’m really interested in what your new plan is. Thanks!