Why I recommend Harvard's CS50x online course to every self-taught developer
Tags: beginners, computerscience, cs50, learning
Published: 2020-05-04 06:32:54

---
title: Why I recommend Harvard's CS50x online course to every self-taught developer
published: true
description: 
tags: beginners, computerscience, cs50, learning
---

[CS50's Introduction to Computer Science](https://www.edx.org/course/cs50s-introduction-to-computer-science) is a free online course based on one of the most popular on-campus courses at Harvard University. In this course, you can learn about core computer science concepts, such as:
- Algorithms - binary search, bubble sort, merge sort etc.
- Data structures - linked lists, hash tables, etc.
- Memory - stack and heap

The languages used are C, Python, SQL, plus some others based on what you choose for the final track (UPDATE: It seems like they got rid of tracks for the 2021 version). There are a myriad of free CS courses available online, but this is the most enjoyable and engaging one I've found so far.

I wrote "self-taught developer" in the title because I figured that those with no formal CS education are less likely to have had a chance to be exposed to these topics in depth. But of course, I would recommend it to anyone who's interested in these topics.

Here are three points that I love about this course, and two potential cons.

__Pros__
1. Their philosophy
2. The lectures are a joy to watch
3. The assignments are creative

__(Potential) Cons__
1. May not be useful for your day-to-day work
2. You don't get to see staff-implemented solutions to assignments


## Pros
### 1. Their philosophy
This course is geared towards people of all programming levels. They tell you in [the first week](https://cs50.harvard.edu/x/2020/notes/0/):
> what ultimately matters in this course is not so much where you end up relative to your classmates but where you end up relative to yourself when you began.

Just for reference, I have 1 year of professional experience, though none in C or Python. Some of the assignments were still very tough for me, and one week's worth of coursework would take me about 10 hours to complete, depending on the material (As a Ruby dev, the Python stuff was a lot more intuitive than C!).

The course does a great job of being beginner-friendly and challenging at the same time, because the lectures walk you through the content well but the assignments require you to really _think_ and do more research. Also, often they give you a choice of two assignments, depending on whether you're "more comfortable" or "less comfortable".

### 2. The lectures are a joy to watch
In addition to being informative, Professor David Malan's lectures are well-paced, animated, and creative. Watch any of them, and you'll probably agree (available on [Youtube](https://www.youtube.com/playlist?list=PLhQjrBD2T381L3iZyDTxRwOBuUt6m1FnW) too).

### 3. The assignments are creative
Rather than boring tasks like "iterate over this array in C", you get to implement programs like photo filters, spell checkers, voting systems, and Hogwarts student databases, using concepts that you learned along the way.

Another thing I like is their testing system called Check50, which gives you instant feedback when you submit your code. It's gratifying when you finally get all the tests to return a green smiley face :)

Example:
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/aadl2kk7bfckrofox2xn.png)

## (Potential) Cons
### 1. May not be useful for your day-to-day work
For better or for worse, this is not a crash course. If you want to learn a specific topic quickly, like React for example, there are better tutorials online (complete digression, but I highly recommend [Scrimba](https://scrimba.com/) for learning front-end languages/frameworks including React).

That being said, I think learning these core concepts of computer science will be beneficial to any developer in some way.
For example, I'd been using Ruby hashes (dictionaries) for a long time, and I knew that finding a value from a hash by its key was much faster than finding a value from an array. But before I took this course, I didn't understand how hashes were implemented under the hood. Learning about hash tables and actually implementing one allowed me to also understand Ruby hashes better.

### 2. You don't get to see staff-implemented solutions to assignments
As I mentioned, when you submit an assignment online, your code gets tested via a system called Check50. You don't get to see the solution that the staff had in mind or do a side-by-side comparison with yours.

This wasn't always a problem and I understand their reasons, but there was one particular occasion when I wished I could see staff-implemented solutions: when I was writing SQL queries. My queries worked, and passed the Check50 tests, but there was no way to tell if they could've been optimized further. Seeing staff-implemented answers would've helped there.

---

If this course sounds interesting to you, I highly recommend that you check it out on [edX](https://www.edx.org/course/cs50s-introduction-to-computer-science). And if you do decide to take it, best of luck to you.

I'm also still enrolled, about to start the iOS track. Wish me luck!

---
### Update - 2020-12-28
The final project took me some time, but I've completed the course :)

<img src="https://certificates.cs50.io/a34cc20c-349b-4393-bdd0-40d455f45a4d.png?size=letter" />