If you aren’t familiar with Harvard CS50, it’s Harvard’s renowned Intro to Computer Science course. Non-Harvard students can enroll in CS50 through Harvard Extension School or through edX, and receive a certificate for satisfactory completion of 9 problem sets and a final project. The Harvard certificate program is self-paced, but all work must be submitted by the end of the semester, whereas edX students have until the end of the year. As I am registered through Harvard, I have until May 17 to complete the work.
I am exactly halfway through CS50 (problem sets 0-4 have been submitted and graded; I still have to submit problem sets 5-8 and the final project). I am currently working on problem sets 5 and 6, the last two problem sets in C. After this, the problem sets and final project will focus on web development, an area in which I’m more familiar.
CS50 has been a roller coaster ride. As someone who has always done well in school, CS50 has been a challenge. With that said, the support of the CS50 community is unparalleled; there is a CS50 Facebook group with over 30,000 members ready and willing to help fellow students debug their code.
Despite the challenges, completing a problem set and watching my code compile and produce the expected output has been an amazing feeling.
Prior to CS50, I’d read about interview questions such as FizzBuzz or how to implement a swap without a swap function, and I felt as though I was reading a foreign language. However, last week I spent a few minutes coding a for loop with some if conditions, and got FizzBuzz up and running. In the wake of some difficult problem sets, it made me realize just how much I’ve learned.
Yesterday (like many other Saturdays), I spent the day at Starbucks working through problem sets 5 and 6. The concepts of pointers, structs and hash tables are throwing me for a loop (pun intended). I have a month and a half to finish the remaining work, though practicing law stretches my time pretty thin.
Some tips for others contemplating CS50:
1. Watch the lectures and shorts for the following week prior to beginning a problem set, as many of the concepts you will need to implement are discussed.
2. Think about the problem and try to conceptualize the solution before you actually start writing code. Use a pen and paper to map your thoughts in pseudo-code.
3. If you feel as though you are missing something, you may need to get a better handle on some of the concepts involved in a particular problem set. For problem set 3 (Game of Fifteen), I watched several YouTube tutorials on 2d arrays which helped immensely. Although the course material and resources are extensive, I found it helps to do some independent learning for areas that are unclear.
4. If you find yourself in too deep, stop what you’re doing and give your mind a rest. Maybe this means doing something that doesn’t involve code (like, perhaps, sleeping), or brushing up on concepts so the next time you tackle the problem, you see things more clearly.
- How to Transition into Product Management - December 26, 2017
- What I’ve Learned in My First Few Months as a Product Manager - October 14, 2015
- Front End Engineer Interview Questions - July 20, 2015