Harvard CS50

An account of my experience with the infamous online course.

LEARNINGRESOURCES

Allen Frasier

12/20/20233 min read

Over the course of 2023, I embarked on the adventure of taking the Harvard CS50x online course. Following is a summary of my experience.

https://cs50.harvard.edu/x/2023/

The Motivation

As a self taught developer, my early coding experiences were always a means to an end. Typically of the flavor "write script or program X to solve acute technical problem Y, as fast as possible" - and move on to the next leaky pipe. Lurking in the background was the nagging feeling that I was just not "getting" the whole superset of possibilities defining and solving coding problems.

Even after taking comprehensive web development and python/c# programming courses over a decade, I still had that nagging feeling that I needed to round out the practicalities of applied programming with some of the "science" of programming.

So in late 2022, I began surveying the MOOC scenery for an "introduction to computer science" course that would provide me a comprehensive understanding of topics like algorithms, data structures, computational thinking and oh yes, big "O" notation. After a few weeks of searching, I decided upon Harvard's CS50x.

The Beginning

The first half of the course uses C as the instrument to teach the foundational concepts of Computer Science. Mind, I went into the course knowing that C was used but coming from a start with higher level languages such as C# and Python, it was like a plunge into freezing water.

The Challenges

I found the work challenging (hello Tideman!) and sometimes frustrating - you really have to do a lot of the low level stuff in C, which in turn requires its own testing and QA. Additionally, I used the courses' VS Code Codespaces IDE so was bereft of code completion, linting and styling tools. I often wonder if those who have never coded had an easier time with the course than experienced coders that know how much a good IDE can help with the housekeeping!

As the course progressed through C memory pointers, the challenges became more intense. I found myself grappling with complex algorithms, debugging code for hours (don't be fooled, you'll be pushed for more hours than advertised!), and feeling a mix of frustration and exhilaration when I finally solved a problem. The support from the CS50 community Discord was invaluable.

The second half was a breeze compared to the first half - it used Python, which was more familiar territory and taught topics I have a good grasp of. (SQL & Web Development)

The Rewards

Completing CS50 was not easy, but the rewards were well worth the effort. Not only did I gain a deeper understanding of my earlier outlined goals, but I also developed new problem-solving skills that are applicable to many aspects of programming. For example, a much better understanding of memory management. An example:

I recently ran into problems with Python's matplotlib module reusing allocated memory for new figures thus creating problems when using loops to create charts. The newer charts were juxtaposed over older ones. I was able to quickly figure out that I needed to force the module to allocate new memory per chart and clear it after render per loop run so that I did not have charts superimposed on another.

One of the highlights of the course was the final project. This was an opportunity to showcase everything learned throughout the year. I chose to develop a web application using Django and HTMX, a combination I had never worked with before. This blog's picture is a screen of the application I created.

The Takeaway

My advice if you are a self-taught programmer and do not have a Computer Science degree considering taking CS50 is this: go for it! You'll get a lot out of the course. The quality of the website and program materials are world class and worthy of falling under the Harvard brand.

CS50 has a less than 2% completion rate as of around 2018/19 when the last stats were posted about completion - it's not a cake walk.

I am grateful for the knowledge, skills, and friendships I have gained along the way. When you complete the course, you also get a fancy digital certificate you can post on LinkedIn!