How I took an Harvard's Computer Science course

my CS50x certificate

After a few first months into my journey to become a developer and change my career, I stumbled upon a blog post and a YouTube video about this course called CS50.

CS50’s Introduction to Computer Science, more specifically, is one of Harvard University’s courses with the most students’ enrolled. Apparently, in the actual physical world of Harvard, a lot of students take it as one of their first courses in their first year of university, independently from their field of study.

So it happens that the course has been developed in an very well structured online form as well, and it is free. It’s divided into 11 weeks with 11 individual lectures, 9 labs and 10 problem sets, one at the end of each week, and a final project. The lectures themselves are incredible. Professor David Malan is a force of nature: passionate, great communicator, great presence on stage, kind but scientifically accurate. There’s a lot of information thrown at you, but rarely overwhelming.

What a journey. Overall (not considering various life and work detours in between) it took me a little over three months to finish it, but apparently I’m now officially into the 1% of people that actually started and finished the online course.

I’m very, very glad I took CS50, so much so in fact that I’ve now started CS50w, which is the advanced continuation of the first one, specialising into web development.

But back to my last journey now.

A rocky start

I was a bit sceptic at the beginning because although I am indeed new to the field, I already took a couple of courses and I’ve always tinkered with computers anyway (even professionally if you can believe it), and I thought maybe I needed something a little more advanced. Well, never scepticism has been more wrong.

The course starts with some very baseline introduction to programming with this visual system called Scratch, which wasn’t very fun or useful to me personally but I can see how it would be to someone completely new to the field. And then, as if nothing ever happened, we’ve been thrown into the world of the C programming language, by virtue of which we’ve been taught the key concepts of: data structures, algorithms, recursion and memory allocation. There was quite a bit of information about how computer works as well (hardware), which I found fascinating and very well explained.

After 5 very long weeks of solving problems with C, including writing programs to search and sort data, recovering data from ruined flash cards, manipulating images with various (hand written) filters, evaluating the complexity of the language of books, building vote systems, and more (all while managing pointers, stack and heap memory, etc.), one very fine day we started week 6 and boom.

Now that you know C, let me introduce you to Python!

From zero to hero

This was one of my favourite moments, not because I particularly enjoy Python or because I was particularly relieved of not having to work with C anymore (I very much liked it!) but because I was finally starting to see where all the underlined effort was really directed to. All those weeks they didn’t just taught us how to program in C, they taught us some very fundamental concepts and mental models on top of which we were able to very quickly start to use another programming language.

That boost of confidence is something that really sticks with me even a few months later, and I’d really want it to be there forever, honestly.

Just to give you an idea, the Python’s week problem set was a complete rewrite of ALL the previously done problem sets from C to Python. And so what looked at first like a daunting task, turned out to be a very useful and satisfying exercise of translation and optimisation.

Progressive enhancement?

And from there, with the same pattern of quickly but surely building on top of the same fundamental concepts, each week has been a different tool for a different use: first SQL to query databases, then straight into HTML, CSS and JavaScript, to build web pages, finishing with Flask, a Python framework, to build web applications. For that week we had to complete an application that allowed users to check the price of a particular stock, buy and sell from their portfolio, all including an authentication system and calls to a finance API.

If you had told me I was gonna be able to do that 4 months ago, I would have laughed in your face. But the whole course was so well organised and organic, everything made sense in hindsight, there was so much support from the extra short videos and also the Discord community, that I was able to do it with my own two hands.

My final project

It turned out, I liked the finance web app so much that I decided I wanted to do something similar for my final project, more specifically I wanted to do something with an API, a front end and a back end, in Flask.

It took me about two weeks from start to finish, I’ve been close to quit and change everything from scratch about three times, but I managed to build exactly what I had in mind: a Steam videogames picker application that you can read more about here.

After finishing it, I had to write the document (readme file) and also record a short screencast of myself presenting my project, which looks like something petty against all the various programming problem sets I had been through by that time, but it was indeed an experience and an exercise in itself for me.

Conclusion (or not?)

And there you go folks! I now have my very own Harvard CS50 certificate, of which I am very proud.

But most of all I have gained the very deep confidence that I really like programming, solving problems and building things that maybe, one day, someone might really find useful.

And now, onto CS50w’s Web Programming with Python and JavaScript.

Adventure awaits. HUZZAH!