Fall 2022 Reflections

This was overall a pretty free and fun semester. There were some hot spots of work, but at least compared to many of my friends’ schedules, it was generally pretty relaxed. A large part of this is that I was fortunate enough to receive a return offer this summer, so I didn’t have to devote any time to recruiting. My primary concern this semester was definitely ACF and not career or academics, but that’s kind of outside the scope of this course review.

To briefly give some context for my class selection: at the beginning of the semester, I was nearly done with my degree requirements, needing only two classes (15-440 and 33-120) to graduate. I decided that I might as well fill the rest of my time with other classes, so I also took two more classes that interested me. I had a lot of latitude in picking the remaining two classes; I ended up going with the two that sounded most interesting to me: one CS class and one philosophy class. I’ll go into more detail on these classes below. It is funny to note that I basically never attended my two required courses at all after the first day of classes,1 whereas I attended basically every single class for the two courses that I was taking for fun.

I did kind of miss not having a very math-heavy “theory A” type class. My concentration within computer science is officially algorithms and complexity theory, and I’ve taken a related class every single semester until this semester. I’ve recently been getting more into “theory B” type things (i.e. logic and programming languages), so I’ve started taking some coursework there instead of the traditional theory A stuff. I also missed working with Evan—we took a CS class together every single semester for the past three years, but he graduated last year.

Anyway, that’s enough of the sentimental stuff. Now onto the course reviews!

15-312 (Foundations of Programming Languages)

This is one of those “famous” classes at CMU—especially when taught by Bob Harper—that I think it’s generally good to take before graduating. Programming language theory is really one of CMU’s specialties; you’d be hard-pressed to find a better school for it in the country or even the world. Accordingly, I don’t think it’s wrong to say that our introductory programming languages class has a degree of rigor that is very rarely found in corresponding classes elsewhere. Personally, I found that the homework was not that difficult, but the exams…well, Bob told us that he had designed the final exam to be finish-able within two hours (given a three-hour exam slot). I don’t think a single person finished the exam even after three hours…

Content-wise, the course is quite rich, particularly if you’re interested in programming languages. You’ll be indoctrinated into the CMU school of thinking about programming languages, with a particular emphasis on types and operational semantics. I finally understand most of the stuff from Hype for Types (98-317); seeing the connection between first-class continuations in functional programming and contradictions in classical logic was especially mind-blowing.

Bob Harper, besides being a very famous researcher, is quite the personality. He’s outrageously opinionated,2 in an incredibly entertaining way. For example, he once claimed to us that Haskell is really an imperative language (both because it is, in many ways, a descendant of Algol, and also because its laziness is implemented with aggressive expression-level memoization, which causes frequent allocations of mutable references under the hood).

Also, this is the class that finally defeated my abilities. I consider myself decent at typesetting things with ; in high school, I was semi-famous for doing all of my chemistry lab reports with a custom template,3 and I’ve read a non-trivial portion of Knuth’s Book. But the complicated typesetting in this class finally bested me, and I wrote out some of my last few assignments by hand.

15-440 (Distributed Systems)

I decided to take this as my first upper-level systems course. It’s definitely pretty relevant to industry; we studied both the theory (consensus protocols, Byzantine generals, etc.) and practice (Kafka, Spark, etc.) of distributed systems. I don’t think I learned as much as I could have due to my completely terrible attendance record, but I got a decent amount out of the course.

I definitely recommand the fall version of the course, which is taught in Go. Go is actually a really great language to write distributed systems in (mostly owing to its built-in support for channels and goroutines), and it certainly beats the C and Java that the spring version of the course is taught in. I would really like Go, if it were not for its ridiculously inexpressive type system.

I largely enjoyed the projects, although I never quite got my Raft implementation to pass all the test cases. In the fall version of the course, half the projects are partner projections; I got along pretty well with my partner, whom I met on the first day of class. (Both of us then proceeded to never attend another lecture, but that’s another story…)

33-120 (Science and Science Fiction)

I don’t really have much to say about this class. It’s a famous “easy” general education class that counts for the CS major physics requirement for some reason. Despite this reputation, I was at one point in serious danger of not getting an A in this class, because I forgot to do two of the quizzes on Canvas. But as long as you’re more on top of things than I am, it’s a reasonably fun and easy way to knock out the science requirement while watching famous sci-fi movies.

80-201 (Knowledge and Justified Belief)

This was the second class that I took just for fun. Philosophy is at least somewhat interesting, and I thought that I’d enjoy a more abstract/technical part of philosophy like epistemology. The course was structured around reading a paper, answering some questions, and then having a class presentation and discussion on it. Our topics mostly stuck to the analysis of knowledge (with a special emphasis on Gettier-type problems), skepticism, and a priori knowledge. This being CMU, there was naturally a heavy emphasis on analytic philosophy, although we did read Plato’s Meno just for good measure.

I do think that sometimes the lectures went a bit slow—I think we would have been better served taking less time reviewing the basic structure of the paper and relevant background knowledge4 and more time discussing the core ideas. That being said, it was a fun class, and I don’t regret taking it.

The professor, Kevin Kelly, has done some interesting work in formal epistemology, and in fact we got to read one of his papers, on a game-theoretic justification for Occam’s razor. I got to talk with him after class a couple of times about interesting connections between epistemology and various fields of mathematics, such as topology and intuitionistic logic.

Looking ahead to next semester

I’m officially done with all of my degree requirements; I could graduate now if I wanted to. But seeing that I’m going to be in Pittsburgh next semester anyway,5 I wanted to take the chance to take some more interesting classes. There are so many awesome classes at CMU that I don’t have the time to take, so I do want to take advantage of the time that I have. Currently, I’m registered for three classes:

I’m thinking of just taking most of these classes pass/fail and enjoying my last semester in college. I did have a couple of other hare-brained schemes when it came to registration, like cross-registering for a Latin class at Pitt6 or even for a New Testament class at the Pittsburgh Theological Seminary. But my advisor told me that in order to cross-register, one has to first be a full-time student at one’s home institution and then take additional classes on top of that at the host institution. This sounded like too much work for my senior spring, so I decided against it.

Anyway, it’s crazy to think that I just registered for classes for the last time, or that it’s been three years since I started writing these things. I still have one more course review to write—I’ll see you guys again in five months.

  1. I think I went to a single 33-120 class beyond the first day, and none for 15-440.↩︎

  2. Not just on programming languages…he once ran a progressive talk show with another CS professor!↩︎

  3. Yes, I went to a nerdy high school. How could you tell?↩︎

  4. For example, he had to re-teach basic probability, since it isn’t a prerequisite for the course.↩︎

  5. This is due to serving in ACF leadership.↩︎

  6. I used to be quite into classics back in high school, but CMU doesn’t have a classics department.↩︎