My Review of Harvard CS50

General Overview

CS50 is fantastic. I read that it is the single most popular course at Harvard. People who aren’t even CS majors sign up to take the course. On campus, they have tshirts, free food, a hackathon, etc. You don’t get any of that on edX, but you do get the following: a great IDE developed by CS50 TAs, a community of support on reddit, stackoverflow, facebook, twitter, etc., debugging tool (debug50), and a tool to immediately check if your pset solution is correct (check50). There is even a little fun CS50 tv show with little 2 min episodes after each lecture. I could go on. You don’t have to take notes on the lectures because there’s a webpage that has all the notes. There are short videos done by TAs explaining some of the concepts in more detail. There are walkthroughs that help you set up the pset solutions.

Scratch and C — pset0 to pset5

Pset0 is in Scratch, a visual programming language that warms you up to programming. The next 5 psets are in C which is the exact opposite of Scratch. It is a low level programming language. You have to do manual memory management in C. A lot of things that seem like they should be easy (especially after having taken Udacity CS101 in Python), are not. You want to add an element to an array? Oh that should be easy, just append.something should work right? Nope. You have to make a new array that includes that extra element unless you had previously allocated extra memory for that original array. The concepts get pretty difficult especially on the 4th and 5th C psets. Pointers are difficult. Trees and Tries are difficult. The most challenging and most rewarding pset for me was the 5th C pset where you make a spell checker. Sounds kind of easy right? You have some sort of dictionary, and if your word is in the dictionary, then it’s spelled correctly…But this is C we’re talking about. You have to make the dictionary, starting with a text file of words…a lot of words. You can’t just iterate through the file, that will take too long. You want your program to run quickly. Tries or hashtables allow you to find your word in your dictionary in the amount of time it takes to iterate over each character in your word, not the number of words in your dictionary. Pretty neat, right? Right. But it is mind-bending, keyboard-breaking, hole-in-wall-making-ly difficult and time-consuming.

Python — pset6

The next language you learn in CS50 is Python. And to show you how much easier it is to learn and use, they have you redo your first 3 psets in Python. When you first look at it, you think it is going to take forever, but then it doesn’t take that long and you hate C and love Python. You think, great, C sucked but now I get to learn Python, this is going to be easy! Then boom.

Python and others — pset7 and pset8

SQL, HTML, JavaScript.

CSS, JQuery, JSON.

Bootstrap, Django, Flask.

What are all of these? Which are languages? Which are frameworks? What’s a framework? Ahhh!

Luckily, you don’t have to build websites from scratch using everything I listed above. The next couple psets involve completing websites that are partially built; however, looking at code using languages and frameworks that you just briefly learned is very daunting. It’s like starting an essay in high school, or a project in college. Half the battle is just starting. Once you start and understand one aspect of the code, you realize it’s doable, get on a role and boom 5 hours go by and you’re learning and caught up in the pset.

Pset7 is a stock trading app. Users can register, log in, log out, buy stock, sell stock, look up stock. Once you finish, you feel very accomplished. I (kinda) made that! Before CS50, a stock trading website seemed like magic. Now it seems difficult, and though I’m sure there’s a lot more to it when there are real users, you at least now know approximately what is involved and how it works.

Pset8 is called “Mashup” and it is a Google Maps map where you can search for a location and you will see the top 10 news stories at that location. There’s a lot of JavaScript which is difficult because it is asynchronous. Asynchronous code just means that one line of code can make a request and then wait for a response while other code is running elsewhere. Also, this is your first exposure to functional programming. A lot of functions in JavaScript take functions as inputs or return functions as outputs which can throw you for a loop. My main point here is that it makes you think differently, forces you to break your tendency to always think sequentially. Similarly to pset7, once you have completed pset8, you feel very accomplished because you (kinda) built a useful, complex web app!

Review

Now for my review and whether or not CS50 is for you. I stated previously that I think CS50 is fantastic. It helps you understand a lot of the core CS concepts, and then gives you the confidence to build cool projects. It is very difficult and fast-paced, but if you stick with it, I think it will pay off. When I try to explain it to bootcamp students it is hard to articulate why it’s important to start in C and learn core CS concepts. Maybe I just want it to be valuable because I took it and liked it. The real reason is probably because neither of us are far enough along to really know what is the best way.

Web development bootcamp students are getting a crash course on building projects and making websites. They are getting prepared to immediately add value to a company. The other school of thought is similar to the traditional education system. You learn the core concepts, and you will be able to pick up everything else during internships or personal projects. As a self-taught learner you have the opportunity to control your own education. It is beneficial to know core concepts for interviews and also on the job and for your long-term career. This is a great first exposure, so that when you see some of these concepts later it won’t feel so foreign.

If we assume that you need to understand the core concepts, then intro courses need to have a balance between core concepts and the “WOW” factor. If we were all robots with no emotions, then I am sure that all intro courses would be core concepts with no projects. Given that we are humans and not robots, if intro courses are all core concepts and no projects, then people would shy away because they think it’s dry and boring. In general I am the type of person that prefers the core concepts. I don’t need to start my programming journey by doing a tutorial to build a fancy web app. I would prefer to get a foundation, knowing that though it might be boring or stale, I am willing to put in the time now, so that learning other concepts later will be easier and come quicker. Having said all that, I was pretty pumped to finish the stock trading and maps web applications. Also, I haven’t touched on this yet, but David Malan is an amazing speaker, one of the most engaging speakers I have ever listened to. Though the lectures can be 2 hours and they can be talking about pointers and tries in C, the time flies by and I am engaged the whole time.

If all you want to do is web development, nothing more and nothing less, then CS50 probably doesn’t make sense for you. I am sure it would be helpful, but in terms of return on investment, I am sure you would get more value in starting at freeCodeCamp or Colt Steele’s Web Developer Bootcamp. Having said that, if the kind of jobs you are looking for have interviews that involve HackerRank or whiteboarding, then that’s a different story. If you want to learn the fundamentals, and you are determined and motivated to get it done no matter how long it takes, then CS50 is for you.

Make persistence your friend, and CS50 will be your friend.