For many, CS50 needs no introduction. For the uninitiated, CS50 is Harvard University’s Introduction to Computer Science course, taught by Professor David J. Malan and available for anyone to take for free online.
Over the years, CS50 has gained an almost cult-like status both on campus and beyond. Each semester, the course attracts around 700 Harvard students (making it one of the university’s most popular courses), while any social network favoured by developers — Slack, Reddit, Facebook and Stack Overflow to name a few — is guaranteed to have a passionate and active CS50 community.
I took the course myself after a recommendation from my Dad in the second half of 2017. I had just quit my job in online marketing at a tech startup in Berlin and was considering switching to a career in data journalism. I didn’t have any prior coding experience and thought the course might be a good way for me to figure our whether I had the skills (and interest) to pursue a career involving data.
I was not disappointed.
What’s so great about CS50?
CS50 is the best learning experience I have ever had in my life. A huge part of that is down to David J. Malan who is a smart and engaging speaker, capable of turning a two hour lecture on pointers or functions into something I genuinely looked forward to watching each week.
CS50 is the best learning experience I have ever had in my life.
For those learning alone at home, the online resources are incredibly rich. In addition to the recordings of each week’s lectures (which are also broadcast live on Facebook), they provide transcripts and abridged notes of each lesson, short explainer videos detailing new concepts, a great IDE (code editor) with inbuilt debugging tools and so much more.
That’s all in addition to the previously mentioned online community who are always willing to help out on Slack, Stack Overflow etc.
What do you learn?
The course is split over 12 weeks (n.b. you don’t have to take the course at the same time as the Harvard students and it’s completely up to you how long you take to complete it). Each week there is a two hour lecture to watch and a problem set for you to complete.
Adventures in C
After a first week spent using Scratch, a brilliant drag and drop programming language developed by MIT to help children learn to code, you move on to learning the language C, which you will stay with for the next four weeks. C is an early, low level programming language that isn’t commonly used today. While some people may resent having to spend so much time on a lesser known language, trust me it is well worth it. This is because with C you have to do lots of things manually that you could shortcut around with a quick function in Python. When learning Python, therefore, it’s easy just to memorise functions without truly understanding how the computer works. To quote a favourite line of David Malan’s, learning C will help you understand “what is going on under the hood.”
The power of Python
The CS50 final project
All this builds up to the final project. The guidance for the final project is purposefully vague and as I understand it, you can pretty much do whatever you want as long as it draws on what you have learned over the previous 12 weeks.
My final project can be viewed online here: http://www.lucieheath.com/guardian-analysis/
And the code can be found on my GitHub page: https://github.com/luciemheath/guardian_gender_analysis
Starting this final project from scratch was an incredibly daunting process and I relied heavily on advice and code snippets found on Stack Overflow (a forum where you can ask questions and developers share their coding knowledge). However, the sense of achievement when I finally got my code working was well worth the hours of pain.
*Let me know in the comments if you are interested in learning more about how I tackled my final project and I can write a post specifically about that
How long does it take to complete CS50?
There is no denying that CS50 is a huge time commitment. I started the course in September 2017 and finished just before Christmas that year. This was while I was only working part time and had plenty of spare hours to devote.
On average I would say that it takes two whole days to complete each problem set. This can be longer if you get stuck at a certain point or are finding a concept particularly tricky.
For me, my final project took about three weeks to complete and I probably spent about 40 hours total on it (it’s easy to become really obsessed!). Of course this will vary massively on how ambitious you decide to be with your project.
How difficult is it?
I’m not going to lie and tell you that completing CS50 was easy. As someone with no prior coding experience and a background in the humanities, there were times when I found the course incredibly difficult.
Ultimately patience and perseverance are key. There will be times when you spend five hours straight on your code and make no progress, only to find out later that your problem was a misplaced bracket. I can’t emphasise enough how useful the course’s online community can be in these instances. I personally found the Slack channel really useful and usually received a response within a day of posting my broken code. If you are motivated and genuinely enjoy it, I believe that anyone can complete the course (with a little help along the way).
Is it worth it?
For me, I can without a doubt say that the time and energy I devoted to CS50 was 100% worth it. I am now completing a master’s degree in Interactive Journalism and while I haven’t so much as looked at C (or even Python) in the last year, I rely heavily on the computational thinking skills that I developed on the course.
CS50 isn’t about learning a specific programming language but instead is about learning how a computer works, what it can do, and how you can talk to it to make it do what you want, regardless of the language you are speaking.
Teaching myself how to programme from scratch (literally), was an empowering experience that I would recommend to anyone who loves learning. The rush of finally getting your code to work will be worth it all in the end.
Interactive Journalism student with an interest in data, housing and local issues ?? Follow me: twitter.com/luciemheath