Screenshot of github contribution graph

My Introduction to Computer Science with CS50

by

in

CS50 is the Intro to Computer Science course instructed by David Malan at Harvard University.

According to the syllabus, at the end of the course I will have acquired:

  • A broad and robust understanding of computer science and programming
  • How to think algorithmically and solve programming problems efficiently
  • Concepts like abstraction, algorithms, data structures, encapsulation, resource management, security, software engineering, and web development
  • Familiarity with a number of languages, including C, Python, SQL, and JavaScript plus CSS and HTML
  • How to engage with a vibrant community of like-minded learners from all levels of experience
  • How to develop and present a final programming project to your peers

What to Expect

The entire course runs for 11 weeks and requires a commitment of 10 – 20 hours per week. It’s intended for both majors and non-majors, which likely explains the range in time a student might have to put in.

I’m not a total noob when it comes to programming– I know HTML, CSS (I know, I know those are not programming languages), some JavaScript and some React. I have no experience with C, which is what we’ll begin with, but given that JavaScript is a C-type language I am hoping that I’ll be able to pick it up quite easily.

Lectures

Each week there is a lecture video (about 2.5 hours) and notes that offer the lecture material in text format. Prof. David Malan talks a mile a minute, so the lectures move quite fast. He’s also incredibly engaging and uses a lot of metaphors and live-coding examples to make the concepts easy to understand.

Shorts

Most weeks have a series of seminar videos (5-10 mins each), taught by Doug Lloyd and Brian Yu, which go over some of the important concepts again in more detail. These are extremely helpful when completing the problem sets! They are called “Shorts”, so at first, I thought they might just be short clips of the lecture, but they are completely different and are definitely required.

Labs

There are labs to complete each week (except weeks 0, 1 and 10), which involve solving a coding challenge. We’re allowed to collaborate with other classmates to complete the lab questions if we want. Since I don’t know anybody else taking the course, it’ll probably just be me pestering my computer engineer boyfriend if I get stuck (thanks babe!).

Problem Sets

Each week there is also a problem set (usually 2 coding challenges) to solve and submit for a grade. The problem sets focus on the lecture material taught that week while building cumulatively on material taught in the preceding weeks.

For the first few weeks, we’re given the option to choose between the “less comfortable” or “more comfortable” version of the problem set. Since everybody coming into CS50 has different backgrounds and levels of experience, this makes sure that those who already have some prior programming experience can take on an extra challenge if they want to.

Academic Honesty

Students can not work together on problem sets as per the course policy:

Collaboration on problem sets is not permitted except to the extent that you may ask classmates and others for help so long as that help does not reduce to another doing your work for you, per the course’s policy on academic honesty.

The staff conducts random audits of submissions to CS50x. Students found to be in violation of this policy will be removed from the course. Students who have already completed CS50x, if found to be in violation, will have their CS50 Certificate permanently revoked.

Dev Environment

CS50 offers a Github Codespace as the IDE (which is basically VSCode in the cloud) so that we can complete all of the labs and problem sets right from the browser. This is extremely convenient because I can access the code from any computer anywhere, and all of my files and version history are backed up to Github.

To use the Codespace you have to create a Github profile and then authenticate using either SSH or a Personal Access Token. I chose to go the SSH route because that’s what was recommended.

All of the code that I’ve written is saved to a CS50 repo, not to my personal profile. I think in the end I might download all of my code so that I can keep a copy safe for myself as well.

I’ve noticed that each time I compile my code it automatically runs a git commit. Since I have to log in to the codespace with my personal Github account, my contributions count has been going way up (green squares woo!)

Submitting Assignments

For an assignment to be submitted, it must first pass a test for “correctness” and “style.” Basically, if your code passes all of the tests, you can submit your assignment comfortably knowing you’ll be getting 100% on it.

So far, I’m finding the problem sets to be very challenging, but man does it feel good when I finally get it right!

Course Outline

The main course material will be delivered according to the following schedule:

  • Week 0: Scratch
  • Week 1: C
  • Week 2: Arrays
  • Week 3: Algorithms
  • Week 4: Memory
  • Week 5: Data Structures
  • Week 6: Python
  • Week 7: SQL
  • Week 8: HTML, CSS, JavaScript
  • Week 9: Flask
  • Week 10: Emoji
  • Bonus: Cybersecurity

Supplementary Seminars

  • How to Prepare for Tech Interviews
  • Foldable/Dual-Screen Form Factors
  • Collaboration and Version Control with Git
  • Developing your Project Locally with VSCode
  • Making Small-Scale 2D Games with LOVE 2D and Lua
  • Introduction to Machine Learning

Certificate

At the end of the course, if students get at least 70% on all of the assignments and the final project, they’ll receive a Certificate from the University of Harvard. There’s also an option to pay $150 for a “verified” certificate from EdX, which provides “proof for an employer that you have successfully completed an online course.” Paying for the edX certificate seems absolutely pointless to me since Harvard provides one for free, so I’m going to skip that.

Follow Up Courses

CS50 offers several follow-up courses, which cover more advanced topics: Web programming, Game development, and Artificial Intelligence. Once I’m finished this course, I’m definitely going to enrol in CS50 for Web Programming (since my ultimate goal is to work as a web developer!) I’m also extremely interested in Game Development and AI, so I plan to do those as well but they’ll be more of a side project.

Final Words

I’ve decided that I want to keep a dev log of sorts to document my experience with the course, hence this blog post. Since I’m already a few weeks in (week 3 at the time of writing), I’ll just write up a summary retroactively detailing my experience so far– stay tuned for that.

So far, I am thoroughly enjoying this course 😊 and I’m so excited for what’s to come.