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
- 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
|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
|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.|
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 -
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.