Is CS50 a good investment of time?

Is CS50 a good investment of time?

Thoughts after five weeks of taking the CS course as a bootcamp grad

·

8 min read

After landing my first developer job, I let myself take some “time off” from continued learning outside of work. I have an (unused) bachelor’s in education, so continued learning is something I’m passionate about. My love for learning is part of why I chose to become a developer. However, after a couple months, I was in a slump. I had the motivation to learn new languages and tricks and to continue coding, but I didn’t want to spend the time everyday deciding what to learn. I also had a strong desire to learn computer science foundations. I loved my bootcamp, but they just didn’t have the time to teach us about data structures and algorithms.

That’s when a quick Google search led me to the well-known free Harvard course, CS50. CS50 is an introductory course into computer science that is available for free on Harvard’s EdX platform. It teaches computer science fundamentals such as data structures and memory. If you take the course, you’ll also have introductions to C, Python, JavaScript, SQL, HTML, and CSS.

After reading a couple Reddit threads on the course, I decided to enroll. Why not? Since it’s free, I thought I had nothing to lose! Six weeks later, I am now more than half-way through the course (the weeks are zero-based). So far, I’m pleasantly surprised at how much I’m learning. I thought I’d share my reflections and learning so you can decide if it’d be a helpful tool for you to improve your developer skills!

Weeks 0 and 1 - Introduction to CS and C Programming

Let me start off by saying if I had David Malan as one of my professors in college, I would’ve enjoyed school so much more! He has great energy (although he can speak fast so make sure to pause to write down notes) and a fun way of presenting otherwise dull topics, such as memory allocation. If you’ve already been developing for some time, Week 0 might not be as interesting as the others. It’s basically an introduction to how to think programmatically. There are weekly labs and problem sets, but the Scratch problem set is the only one I’ve skipped so far. I didn’t see the value of going through that program when I already had an understanding of for and while loops and if else statements. Of course, if I want the certificate, I will have to go back and knock that problem out. 😥

The content in Week 0 was presented well, but the information wasn’t compelling to me yet. Luckily, Week 1 was where things picked up. C was never a language I had a strong desire to learn. Until now, I’ve strayed away from pretty much all lower-level programming languages. But, I made a commitment to daily learning and really needed some CS foundations. In Week 1, you’ll write your first lines of C and learn all about data types and while loops. The problem set definitely ramps up when compared to Week 0, but is still doable. If you do take the course, remember that it is recommended to do the labs and then the problem sets. I did it vice versa for a week or two until I was done asking myself “why are the labs so much easier?”.

Overall, weeks 0 and 1 are a great introduction to C and CS. If you have a solid foundation of CS and C, feel free to skip these two weeks. Otherwise, I strongly suggest taking them as another source to increase your CS knowledge.

Weeks 2 and 3 - Arrays and Algorithms

All throughout bootcamp, I was terrified of the word “algorithm”. I didn’t have much success during our Algo Fridays and would often get anxious and frustrated while solving the problems. With practice, this attitude had luckily changed. However, I was still a bit nervous about a whole week in C revolving around algorithms. But before we dive into Week 3 and recursion and what the heck a segmentation fault is, let’s talk about arrays!

Week 2 is when the veil of CS50 is lifted. There are some crutches that you will lean on from the CS50 library the first couple of weeks such as the string data type. You’ll also learn about compiling and taking command line arguments. You’ll have an introduction to memory and how an array is stored. As someone without a CS background, I found this week to be really valuable. I can write in JS all day and understand the code and what it’s doing, but I was lacking this knowledge of what was going on behind the scenes. I had no understanding of how much space an array takes or why I should care.

I was so stressed about the algorithm week that I even wrote the following mantra in my notebook: “I can feel comfortable when approaching algos”. 😅 Turned out I had nothing to worry about and Week 3 was one of my favorite lessons. In Week 3, you’ll learn about linear vs binary search, structs, sorting, and recursion. The only time I had heard of recursion prior to this course was when my teacher and TA were discussing how much they hated it. So, needless to say I was a bit weary of this topic.

I will say that David’s recursion example was not enough for me to understand this concept. I found that this python example and this explanation filled in any gaps. I was ecstatic that I understood recursion and even drew a diagram explaining the concept to my patient boyfriend. 🙏 If you’re even a bit curious about sorts, searches, and recursion, just take the course!!

Bonus: a common algorithm challenge is Caesar’s Cipher. This is one of the problems in pset 2. This course will give you the tools to solve that problem in case you run across it in an interview setting.

Weeks 4 and 5 - Memory and Data Structures

Week 4 was…rough. It’s all about memory and has a focus on images and pixels. You’ll also be introduced to memory allocation and pointers and addresses. Memory allocation and pointers are extremely important in C, so make sure you fully understand them before moving onto the next week!

The lesson was presented in a great way again, but I felt unprepared for the problem set. I used some outside resources here and there to solve the problems for the other weeks, but this was a week where I had to rely heavily on YouTube videos and other peoples’ solutions. I’ve heard on Reddit that the problem sets are actually meant to be done after the next week’s lecture and that’s why it can seem like you don’t always have the right tools for the problem. Regardless of whether that’s true or not, don’t beat yourself up over this lab and problem set. Learn from other solutions, take notes, and try it again.

Week 5 is a hefty one. You will learn about linked lists, binary trees, the arrow operator, hash tables, and more. This week alone is worth it in my opinion. These data structures are topics commonly referred to in upper-level interviews and challenges. If you have a solid understanding of when to use which one and how to implement them, you’ll be set! I purchased a course on Udemy about a year ago all about algorithms and data structures and am still only half-way through it. That being said, I’ve learned more from CS50 on those topics in a shorter time, but still recommend that Udemy course for extra practice with a JS focus!

Is it worth it?

Coming from a JavaScript background, I was not used to thinking about what it meant in memory when I used push() to add to the end of an array. Or how map() or filter() are being implemented. Of course, this hasn’t hindered my ability to write programs, but with the knowledge from the course so far, I think it has made me a better programmer and problem-solver. I have a deeper understanding of data structures, memory, and recursion. I’m only a bit more than half-way done with the course, but so far I can honestly recommend it for other bootcamp grads and self-taught developers that have some basic knowledge. I’d only recommend it to CS grads if you need a quick refresher.

If you plan on enrolling in CS50, here are a couple of tips.

  • Take your time! I’m currently doing the course at an average of one lecture a week to a week and a half. With a full-time job and other interests, it can take some time to get through the content. I’d recommend at least doing a little learning everyday so the concepts are still fresh.
  • Keep in mind that the problem sets are supposed to take a couple hours or more. Don’t beat yourself up over how long a problem is taking you and set aside adequate time to solve them. Also, don’t be afraid to use outside resources. If you find yourself getting too frustrated, seek some help! Whether that’s YouTube, a friend, the Discord channel, or any other source you may have.
  • Stick with it! This course is hard. The completion rate of CS50 is only 1%. That’s insane when you compare that to the average completion rate of 30% for other courses. Set realistic goals about both time and understanding.

If you’ve completed CS50 or have enrolled in the past, what did you think? Let me know if you plan on enrolling in CS50! Let’s do this together!! ✨