I was surprised recently to see that I'm basically on track to finish CS50 with the end of Harvard's spring 2018 semester. I was surprised because, back during the C period, it felt like I was wallowing away weeks and weeks on some of those problem sets. But, well, they had spring break and a couple off weeks, and so I caught up.

I finished up the lectures and problem sets this week. The final lecture was actually just a pile o' fluff: opening with one of the TAs playing the piano, and lots of pop music montages of "oh the places you'll go!" stuff. And, funnily, I WAS VERY MOVED. I felt like it was the last day of high school again! SO LONG, CS50, I'LL REALLY MISS YINZ! Thanks to Prof. Malan and all the TAs and staff for a wonderful resource, truly!


Syllabus - in review

The full 2018 CS50 syllabus is here. In retrospect, my favorite topics were, ranked descending:

  • Memory: Huge demystification of what happens when you computer things.
  • Dynamic programming: I want to write a post about this. I had to watch some supplementary YouTubes about this (since I didn't get it with just the lecture), but - once it clicked - OH MAN. Mind blowing. And the applications! Aaah. Just look at this.
  • Data structures: Unexpected elegance, thanks to C's direct memory management, of linked lists and tries and hash tables. Wonderful!
  • HTTP: Insufficient HTTP stuff, though I did discover the fun of traceroute.
  • Algorithms: Meh. This was one lecture. It was okay-fun. But, since we didn't actually implement any algorithms or "race" any code, it felt remote.

Problem sets - in review

Pset Language Joy Est. hours Notes
0 - Scratch Scratch 🙄 <1 Bah.
1 - C C 🤔 3 Greedy algorithm, oof.
2 - Crypto C 😂 2 Already did this once in Clojure.
3 - Music C 😨 5 HARD. Converting text -> Herz frequencies -> MIDI music. Also, waves.
4 - Forensics C 😨 5 STILL HARD. Recovering lost JPEGs and bitmaps. Also - I KNOW ALL COMPUTER NOW.
5 - Mispellings C 😨 5 Hard. AKA how to build a linked list. Not sucking at malloc().
6 - Déjà vu Python 🤔 4 Real easy Python + understanding dynamic programming!
7 - C$50 Finance Python, SQL 😒 2 Flask app + API calling. Fiddly, annoying.
8 - Mashup JavaScript 😒 2 JAVASCRIPT. BAROQUE CATHEDRAL OF CODE.
TOTAL 29

Final project

I'm about halfway through Build Your Own Lisp, which is a lot of fun. I'm using it to write a toy language in C called triestin. It'll be based on the Triestine-Italian dialect, which is spoken by ~250,000 people. According to ISTAT, the Italian government's statistical agency, 56% of Italians of working age are employed, and 2.6% of those (I think) are ICT people. So that's, hmmm -

$$250,000 * 0.557 * 0.026 = 3,620$$

Or about 3,600 people that could potentially understand this language at all! If we whittle things down to people that are interested in compilers, IT'S EVEN LOWER. Yay!

Anyway, I also found Destroy All Software's wonderful A compiler from scratch, which demystified how programming languages are written: it's just tokenizing, parsing, and compiling! Wooooo. Lots of Chomsky stuff too, which I will investigate further.


This post is part 4 of the CS50 series:

  1. Starting CS50
  2. CS50 - Algorithms, pointers and malloc, oh my
  3. CS50 - Data structures achievement unlocked
  4. CS50 - No more lectures 😭
  5. Introducing triestin