Why everyone should take CS50 to start
I first started my programming journey in 2023, I was a month out of high school, waiting for university to start. With all that free time on my hands, I decided to go and begin to prepare for the degree that I had chosen quite arbitrarily. I can’t remember what made me start looking at CS50 (Harvard’s introductory computer science course), but it was probably the appeal of doing a completely free course from Harvard that got me.
So I fired up the first lecture on YouTube. I still remember sitting there in my chair, dinner in hand, watching the lecture as I ate my food. I see a stage lined with a bunch of light bulbs. A jovial man wearing a “Steve Jobs-esque steps out onto the stage and starts of with the magic words, “Hello, this is CS50”.
For the next 10 weeks, I would spend around each evening sitting down with my dinner and watch David Malan talk about increasingly harder concepts. I’d then spend the rest of my days (when I wasn’t doing other unemployed activities) working through the problem sets that you are assigned with each lecture.
Over the course of this time, I received perhaps the single most important Computer Science based learning material that I’ve ever needed. An experience far outstripping anything that I’ve had in University1.
Fast forward a couple of years, and I still recommend this selection of courses to anyone who asks me where they should start with programming and/or computer science. Allow me to share some of my thoughts on the course as a whole and why I reckon you might want to take this course.
You Start with C
Perhaps the single biggest thing that this course does differently to a lot of other intro to CS classes is that they get you start of in the C programming language. ‘C’ is coveted as one of the hardest programming languages for anyone to learn, and is to this day, still the tool of choice when someone wants to write powerful, robust low-level code. I think this genuinely the best decision that the CS50 team could have made, and in hindsight I would not have wanted to have it any other way.
Starting with C has led to my skills developing in a completely different way compared to most of my peers who start with Python. By starting you off in C, CS50 not only forces you to engage with fundamental CS concepts through the constraints of the tool, but makes subsequent abstractions easier to comprehend and use. For me, moving from C to Python was a breath of fresh air, whilst moving back to C whenever required by another class/course was like coming home to something well understood. This was however not the case for a lot of my peers. Who found expressing ideas in C suffocating and tedious.2

"It's easier to move one way"
Simple Tools and Linux
In lecture 1 of the series, you are told to write a simple ‘Hello World’ application in C and then you are given instructions to run it. The instructions that David shows are make hello and ./hello. For someone who was uncovering the inner arcane workings of a computer, this simple step framed the way that I would go on to think of interactions with computers. The terminal would become my tool of choice for getting any coding related tasks done.
Furthermore, you are also introduced to the usage of simple UNIX tools to navigate your filesystem and run code from day one.
In fact, David Malan makes a concerted effort to only use terminal commands to build and run every single example that he showcases. As you naturally keep referring back to this material, you begin to do the same. You are assigned a free GitHub Codespace on the web that is just a Linux machine, through it, you are exposed to using these building blocks that so many other university courses neglect to teach.
I got so used to running code from the terminal that when I took my canonical intro to CS class in university. I didn’t even know there was a massive green play button in VS Code3 that would run python files for you.
#include <stdio>
int main(void)
{
printf("Hello World");
}
This decision has now led to my skill at using the terminal, my familiarity with UNIX style systems and my ability to read stack traces. A real edge over a lot of people if I do say so myself.
Real Challenges
One thing that CS50 does very well is the problem sets. From 'mario' all the way to the infamous 'tideman' Every problem set proves to be complex, whilst still being logically scoped to the content that you have just learned.

"Average tideman solving experience"
Each challenge not only tests your ability to devise algorithms to solve arbitrary problems, but they ever so slightly introduce you to the software engineering cycle. You are given a really simple compile, check debug cycle. With the check50 tool, you are encouraged to make sure that the thing that you are writing meets the requirements of success, and when it doesn’t you are encouraged to go back and debug what your logic is doing. Whilst I’m unsure how something like this gets ‘graded’ in an academic environment, for a self learning pace it’s perfect. You can keep iterating on your solution ad-infinitum until you are satisfied (and so are the tests).
I particularly enjoyed how each challenge is novel. There are some obvious standouts, like mario, tideman, speller and obviously the ‘SQL Mystery’. To this day, when I’m trying to teach the fundamentals of C++ to anyone else, I end up using mario as an introductory exercise.
Inspiring
There are a lot of things that I took away from my time going through CS50. The computer science knowledge obviously, but more so than that, an appreciation for the art of computer programming and an enthusiastic outlook on the field as a whole.
Seeing someone else talk about something so passionately really inspired me. Not only to go and make coding my hobby/profession, but to try and communicate that enthusiasm to other people that I meet.
To consider interactions with people where I’m teaching something with the necessary gravitas, and to see teaching as a lifelong skill that I can build and enjoy.
CS50 didn’t just teach me to code. It showed me that true enthusiasm, married with a considered approach to delivering information, can really change someones life.