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