Are you considering taking the CS50 Introduction to Computer Science course, but wondering if it's the right fit for you?
As someone who doesn’t have a computer science degree and was looking to learn the fundamentals of the field, I was in the same boat. That's why I decided to enrol on the course and document my experience in this article.
I'll provide an overview and review of CS50 to help you decide if it's the right course for you.
What is CS50?
CS50 is a ten week online and on-campus course which serves as an introduction to computer science. It's taught at Harvard and Yale University.
The course leader is Professor David J. Malan. He’s supported by the CS50 team, which consists of Senior Preceptors and an entire production team. The course runs from 1 January to 31 December.
Why choose CS50?
There are several reasons why CS50 might be a good choice for you. Here are a few:
- It's a highly respected course offered by Harvard University. This means that you'll be learning from experienced instructors and getting access to a top-quality course.
- It covers a wide range of topics, including computer science fundamentals, algorithms, data structures, and programming languages such as C, Python, and SQL. This means that you'll have a well-rounded introduction to the field.
- It's self-paced, which means that you can work through the course at your own pace and fit it into your schedule. You can watch the lectures on various platforms, including EdX and freeCodeCamp's YouTube channel. For me this was important as I didn’t have a lot of spare time.
- It's free! You’ll have access to the lectures and course materials.
What is the Format of the Course?
There are ten weeks worth of lectures, labs, and problem sets, which must be completed. At the end of the course, there’s a final project.
Is this a course for beginners?
Yes. In fact, around two thirds of students who enroll in CS50 have never taken a computer science course before. So if you're new to the field and looking to learn the basics, you'll be in good company.
That being said, don't expect the course to be easy. While the lectures are designed to be accessible and engaging, the problem sets and labs can be challenging. On average, students should expect to spend around 12 hours per week on the course.
Do I get a certificate at the end of the course?
You can choose to receive a free CS50 certificate or pay for a verified certificate from edX.
What if you don’t finish the course by 31 December?
You can roll over any submissions into the following year. I did this and the process was straightforward. The course content is pretty much the same with some updates to the course materials.
CS50 Walkthrough, Week by Week
Week 0: Learn Scratch
In the first week of the course, you'll be introduced to the world of computer science and learn about how numbers, text, and images are represented in binary.
You'll also learn about algorithms and pseudo code, and get a hands-on introduction to Scratch, a graphical programming language.
For your first problem set, you'll create a Scratch project. This week is a fun way to ease you into the course and get a taste of programming.
If you’re interested, this is my Scratch project, which was inspired by my son who’s fascinated by space.
Week 1: Learn C
In the second week of the course, you'll dive into C, a low-level programming language.
You'll learn programming fundamentals such as functions, conditionals, boolean expressions, loops, and variables.
For the problem set, you'll create a program that outputs a pyramid of hashes like at the end of a level in a Super Mario game.
Week 2: Introduction to Arrays
You'll continue learning about programming in C and delve into topics such as how your program compiles, debugging, arrays, characters, strings, and command-line arguments.
Week 3: Introduction to Algorithms
In week three, you'll learn about different types of search (linear and binary) and different types of sort (selection and bubble), as well as recursion.
You'll also learn about big O notation, which can be challenging but is an important concept in computer science. Thankfully, the course provides additional short videos on more difficult concepts, which provide a more detailed explanation with examples.
Week 4: Computer Memory
Week four focuses on memory, including topics such as pointers, addresses, memory allocation and freeing memory, detecting memory leaks, and explaining how a stack overflow occurs.
The lab and problem set involve manipulating audio and image files. Below is an example of a filter I created in C.
Week 5: Data Structures
In the final week of programming in C, you'll learn about how pointers can be used to store the addresses in memory for linked lists.
The lab consolidates your knowledge of pointers, and the problem set involves creating a spell checking program. This was a particularly tricky exercise and it’s worth taking your time to understand the starter files provided before delving in.
Week 6: Learn Python Basics
Week six marks the transition from C to Python, a popular programming language that is easier to learn and use than C. You'll work on problem sets that involve translating previous programs written in C to Python.
Week 7: SQL and Relational Databases
In week seven, you'll learn about relational databases and SQL (Structured Query Language), using SQLite to execute queries on the command line and in Python.
The problem set is a fun one, as you’ll have to solve a mystery of who stole the CS50 duck through a series of SQL queries!
For the problem set you’ll create a home page about yourself.
Week 9: Flask
In week nine, you'll learn about Flask, a Python framework that is used to build web applications. You'll cover topics such as forms, layouts and templating using Jinja, POST and GET requests, and how to email from a Flask application. You'll also walk through the process of building a full-stack application.
For the problem set, you'll put your skills to the test by implementing a full-stack finance application that brings together everything you've learned throughout the course. This is a challenging but rewarding project that will give you a taste of what it's like to build a real-world web application.
Week 10: Wrap up lecture
No exercises this week. There’s a guest lecturer and a wrap up from Prof Malan.
The final project
The last part of the course is the final project. The brief is to:
“build something of interest to you, that you solve an actual problem, that you impact your community, or that you change the world.”
This is deliberately vague, so you have the freedom to choose any programming language and project you like. You'll also have to record a three minute video demoing your app.
I built a baby tracking app. On the backend I developed a REST API with Python and Flask. For my database I used SQLite. On the client side, I used React.js.
This is a substantial piece of work. From conception, to designing my application through to developing the app, I probably spent over 30 hours on this.
Your final project would make a great addition to your personal portfolio so have fun with it! Below are some screenshots of my application.
What Are the Benefits of Taking CS50?
- The lectures are high quality, in terms of content and production. Professor Malan is animated, enthusiastic, and is very passionate about teaching computer science and programming. The visual examples on the stage and on the interactive screens are helpful for understanding difficult concepts.
- The problem sets are well-structured and provide detailed walkthrough videos, specifications, and starter code with comments to help guide you through the tasks. You can also test your code to see if it meets all the requirements before submitting.
- Setting up your integrated development environment (IDE) is straightforward, thanks to a modified version of GitHub Codespaces, which allows you to code in the browser.
- The CS50 library is a helpful resource with great documentation. The library provides functions such as
get_string, which prompts a user for a string in the command line interface (CLI). These functions act like training wheels during the early weeks of the course, helping you to focus on familiarising yourself with the programming language.
- For some of the problem sets, there are two options: one for when you're "feeling less comfortable" and one for when you're "feeling more comfortable." This allows you to choose the level of difficulty that is right for you.
- There is a large and active online CS50 community on various platforms such as Facebook, Twitter, Discord, and LinkedIn, where you can connect with other students and get help with problem sets and labs.
- The course is free and accessible to anyone with a computer and an internet connection.
What are the drawbacks of CS50?
The course is challenging. It can have a steep learning curve. I found I had to do additional reading around subjects I was not familiar/comfortable with.
Most people don't finish the course, but even if you don't complete it, you can still benefit from what you learn. In the words of Prof Malan:
“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 begin.”
CS50 is a comprehensive and highly respected course that provides a strong foundation in computer science.
As a self-taught frontend developer with no computer science degree, I found that the course was an excellent way to fill in knowledge gaps and strengthen my understanding of the fundamentals of the field.
The lectures are engaging and well-produced, and the problem sets are challenging but provide a valuable opportunity to apply what you've learned.
The course covers a wide range of topics, making it an excellent introduction to computer science. Overall, it is a standout course and one of the best online learning experiences I've had.
I hope you’ve found this article useful and it’s helped you with making the decision on whether to take CS50.