I just completed CS50, one of Harvard’s forays into online learning (or a MOOC, Massive Open Online Course). I did this in the same time period that an undergraduate at the university would take it, in a single semester. Each week, the course involved around 3 hours of lectures and up to 2 hours of reading and further research followed by an assignment that was billed to take between 10-15 hours.
I did all of this while working at a famously demanding (but fantastically fun) tech company. So it was a challenge.
I opted to do the course for several reasons, not least that I wanted to get a good understanding of the basis of computer science, something that many self taught web developers don’t have early in their career. I wanted to understand how arrays actually work, how data is stored in RAM and what a Trie is. I had also heard tell of a thing called a pointer, something that all of my developer friends were terrified of. After watching Professor David Malan explain them I’m not sure what all the fuss was about.
However, I was also quite interested in understanding what makes a good online course. I’ve been using Code School and Team Treehouse to upskill for several years now, but I knew that MOOCs were where I needed to go if I wanted to be seriously challenged — and challenged I was.
While the course started out pretty easily for somebody with my background (I web-development experience primarily through college and personal projects), after a few short weeks we quickly started doing some pretty interesting things such as discovering deleted images on memory cards and building a spellchecker. This spellchecker became a focal point of the course, with people competing online to build the fastest and most efficient implementation. I managed to get my implementation to within 0.1 of a millisecond of the staff’s solution, something I was pretty proud of!
Having structured and taught several courses myself (I have been a Web Development and Film instructor to students from ages 8 to 21 in classroom settings over the last few years), I know how hard it can be to plan course material in a way that is accessible to students of wildly different abilities and commitment levels. Although a voluntary MOOC effectively removes the need to plan for uncommitted students (they just won’t take the course), I can only imagine that it significantly increases the need to plan for ability, especially since you will never get the chance to meet with the students and understand their needs. CS50 accounts for ability levels from the start, with two versions of many of the assignments, and sometimes different versions of the after-class seminars depending on your skill level. There are also several methods of getting help including a subreddit, CS50 Stack Exchange, a Facebook group and a private forum with direct access to the teaching staff for those of us on a non-free level of the course. With the notable exception of the Facebook group, which during the time that I was studying seemed to be mainly filled with people looking for answers/how to install the required software, each of these resources was a fantastic way of discussing problems in a group setting, and while Reddit and the Forums will not have entirely replaced the benefits of discussing material in-person they were more than enough to help me through the course and allowed us share resources with our fellow students.
At the end of the course I am glad that I took it, although I wish it wasn’t as time-consuming. For the months it took me to complete I had barely any time to relax, play games, go to movies or read. My friends and family definitely noticed my absence but it was 100% worth it to get a deeper understanding of how and why the code that I was writing worked.
One thing that was very interesting about the course was the Linux VM that students were asked to use. This VM tracked students in their learning patterns, tracking data such as what a student’s first response was when their code crashed, how often students compiled their code before successfully completing an assignment and more (although they promise they didn’t keylog on the inbuilt browser, to the presumable relief of damn-dirty-cheaters). I look forward to reading the results of this research, as well as statistics on how many people actually completed the course. You can see some stats from a previous run of CS50 on the course’s blog (less than 1% of those who registered completed the course).
So, what next? I don’t think that I’m going to take another MOOC for a while, although this isn’t a comment on their value — I truly believe that MOOCs (along with sites such as Team Treehouse) are the future of education. Instead I’m going to focus on building some projects that I’ve been thinking about for a while, including this new app that I’m working on — it allows you, with only two taps, to send “S’up” to any of your contacts. I just know it’s going to make me rich!
Since originally publishing this article, I got the chance to visit Harvard (I was in Boston working from HubSpot’s Cambridge office for three weeks) and sit in on a CS50 lecture in real life (I was invited by Prof Malan, I didn’t crash it)! It was the second lecture of the Autumn 2014 semester, which is now online as the latest version of the MOOC. It was an amazing experience, and from the minute I sat down in Memorial Hall I was chatting to current students, helping them fix bugs they were having in their code and generally having a great time. Nobody noticed (or maybe nobody mentioned) that I didn’t belong, and I was made feel very welcome.
Once the lecture itself started, I was pulled back into the joy I felt when taking CS50 for the first time. Professor Malan owned the stage and was even more engaging and the topics covered were even more captivating in person. I’m so greatful that I got the chance to see CS50 in action, and it strengthened my belief that grabbing the opportunity to take CS50 online was one of my best decisions in 2014 — I hope that you take it by the horns in 2015!