Thoughts on finishing CS50x
CS50, standing for Computer Science 50, is the on-campus and online introductory course to the enterprises of Computer Science taught by Harvard University and Yale University. The on-campus version is Harvard’s largest class with around 800 students, 102 staff, and up to 2200 participants in their regular hackatons.
The course first appeared on-campus in 1989. I has had many important lecturers and guest lecturers like Brian Kernighan, among other very famous people. The current lead instructor is Harvard professor David Malan.
A little background
I decided to take CS50x maybe back in 2018. Back then, I was an average (if not mediocre) Computer Engineering student at my local University. I am very grateful for the oportunities and the education that my University (Universidad Michoacana de San Nicolás de Hidalgo) gave me, but I won’t deny that it has some problems, as any university in the world, especially in developing countries. But more than anything, I can’t blame anyone but myself, for my laziness and lack of effort back in those years. The point I’m trying to make with this, is that back then, I had quite a few problems with many Computer Science and programming concepts and practice. I was a below average programmer and I struggled to complete most of my course’s homeworks, assignments or projects. So the first time I tried to do CS50x, it was very hard and I failed miserably.
Wait, wasn’t I supposed to be a Computer Engineering student with at least some experience in programming? Well, yes. Isn’t CS50 an Introductory course? Yes it is. It is even designed for people with no experience whatsoever in Computer Science. And I still had a rough time the first few times trying to complete it.
Surprisingly, the Psets (Problem Sets) each week were quite challenging.
Week 0 starts to introduce students to some Computer Science concepts and introduces Scratch, an interactive programming language that uses visual blocks and is designed for beginners or kids to start practicing programming. On Week 1, students are introduced to The C Programming Language, which is quite surprising considering there are huge amounts of people and institutions that are pushing the idea that beginners should start with easier languages, such as Python or something else. And yeah, we shouldn’t forget that CS50 actually starts with Scratch, but it still says a lot that they quickly move on to C. And actually, around half (or maybe a little more) of the course has students writing programs in C. It goes deep.
My first headache was Mario, one of the first programs in Week 1’s Pset, in which you have to write a program that outputs, using hashes, a pyramid just like the ones you can see in Super Mario Bros. It is a little hard to believe how challenging such a simple problem can be, even for me, someone who was supposed to have programming experience. I can’t imagine how tough it must have been for some students. From Week 2 to around Week 6, some more concepts are introduced like arrays, Data Structures, Sorting and Searching Algorithms and Running time. And the C programming continues, with increasingly challenging, but fun, Psets, including the infamous Tideman, considered to be maybe the hardest challenge in CS50.
In my opinion and many others, writing so much C is a great way to learn and adopt some good practices, specifically in procedural programming. If a student gets at least somewhat comfortable with C, they should have no problem tackling other programming languages and/or concepts.
As I mentioned earlier, the first time I tried to tackle CS50, I abandoned it. And I tried again multiple years. For this or that reason, I never finished it, there were even some years when I got really close to finishing it, completing the majority of the Psets, but stopped due to other issues (real life work) or just not giving myself enough time and focus. This almost happened in 2023 as well, as I finished every pset but Pset 0 (using Scratch) and the final project by around the month of July, but procrastinated on actually finishing everything. By around December 28th, fearing to have problems due to the possible changes in 2024’s edition of CS50; I felt a rush and an urge to submit something as a final project and doing a little Scratch program in order to finish CS50 (I also needed stuff to add to my resume). So, in one very busy day, I finished what I was lacking and got my CS50 Certificate.
The interesting thing is that yes, like I mentioned many times, this is an Introductory Course, and it was almost as challenging as maybe half of my actual undergrad studies. I had way more “trouble” and had to work more on making progress in CS50, than in many of the courses at my Faculty. This course had me writing way more code than many months at my Faculty. And I don’t mean any disrespect to my Alma Mater, which I deeply love. But that is just stating the truth. An introductory course by Harvard is worth, or equivalent, to a good chunk of an undergrad program at a University of a developing country.
Is it worth it? Absolutely. I’ve heard of people that have managed to get a job as software engineers after taking CS50. It covers a wide collection of important Computer Science topics, it feels like “a little bit of everything” and I find it a little hard to think about what it could use to get better, because it really is that good.
CS50 gave me more preparation and got me more familiar with the tools and concepts I’d need to go out there to the industry. It is a very fitting complement of my undergrad studies and thanks to it, I feel like a better and more competent (junior) software engineer or computer scientist. So if you’re thinking about giving it a chance (especially if you’re a junior looking for mre practice and filling some blanks), I’d say go for it! You will learn a ton and you won’t regret it.