As with a lot of online courses, I'd been peripherally aware of HarvardX's CS50 for a number of years before I finally resolved to sit down and participate.
CS50 is a first year university course offered by Harvard University and more recently, Yale University, which dives into the basics of computer science, exploring algorithmic thinking and teaching students how to code in a variety of languages including Scratch, C, and Python, amongst others. In the last few weeks of the course, it offers a choice of three tracks - game, web, or mobile development that students can explore and create their final project which is encouraged to be something which is useful beyond the course.
The online course which is known as CS50x offers a stripped down experience of the real course. The assignments, known as problem sets (or psets), are marked against certain criteria and a number of test cases by an automated program. All of your coursework is pushed into individual branches of your own CS50 GitHub repository. I've copied these branches into a single repository for ease of perusal, which can be found here.
I started my CS50 journey at week 0, which I thought was cute, as most programming languages count from 0. I began by watching the introductory lecture provided, in which David Malan explains that 2/3rds of people taking CS50 have never taken a computer science course before (meeee!) and that over the weeks, those less comfortable with the concepts will become more comfortable and be able to tackle the problems outlined in the lecture.
There was demonstration of what is known as a binary search algorithm in which David theatrically tears a phone book in half again and again in search of a particular name, until he's left holding one page. This was a new algorithm for me, as I'd never really thought of it in this way. We've all searched for a name in a phone book or something in an index and when the data is ordered alphabetically, if it's not on the first page we look at, we can discard half or more of the results because we know alphabetically, the item we're looking for is going to be ahead or behind of where we landed.
The lecture demonstrated a number of programs in Scratch and how to create a basic Hello, World type program before finishing on a selection of games submitted by previous students. The pset for this week was to create a program - whether it be an interactive story, game, animation, etc. - that met the following criteria.
- Your project must have at least two sprites, at least one of which must resemble something other than a cat.
- Your project must have at least three scripts total (i.e., not necessarily three per sprite).
- Your project must use at least one condition, one loop, and one variable.
- Your project must use at least one sound.
- Your project should be more complex than most of those demonstrated in lecture (many of which, though instructive, were quite short) but it can be less complex than Ivy’s Hardest Game. As such, your project should probably use a few dozen puzzle pieces overall.
I spent a good portion of my week angsting over what I was going to implement that I only got to finishing my homework on Saturday after watching the lecture on Tuesday. In the end, I settled on implementing an idle/clicker type game and selected the first sprite that grabbed my fancy - the taco.
The above is the screen you are greeted with when you start playing Taco Clicker.
Rather than go into too much detail about Taco Clicker, I suggest you play it instead.