Spring 2023 Reflections

It’s strange how fast the end of my time at CMU crept up on me. I still don’t think of myself as an alumnus. The past semester has been lots of fun but also a little bittersweet, with lots of goofing off and lots of goodbyes to old friends. My focus shifted even further away from school this semester; I took two classes (15-314 and 21-270) pass/no pass. It was also the first semester that I haven’t blogged at all. Most of my time was spent hanging out with friends and savoring the last drops of that elusive thing we call the “college experience.”

But enough with that. I’ll focus this post narrowly on the classes I took this semester; I’ll write a separate post reflecting on my time at CMU as a whole.

To give some necessary background for my semester: I was officially done with my degree requirements as of the end of the fall semester; I could have graduated in December 2022 if I had really wanted to. But I was committed to staying in Pittsburgh to serve in a student org, so I figured I might as well spend my time taking interesting classes. Since none of them were required for my graduation, I just took most of them pass/no pass, prioritizing learning interesting things over getting grades. I did take compilers for a letter grade, after some discussion with Mark.

15-314 Programming Language Semantics

I will admit: this class started off rather boring, and Steve honestly isn’t the best lecturer that I’ve had. However, it did get more interesting toward the end as we covered topics like domain theory and separation logic.

I actually think that this was a good choice for my senior spring. The workload is fairly light (especially since I took it pass/no pass), but it did present a few interesting ideas, and it helped me finally “get” some things that I had encountered in previous classes but never fully understood. For example, I never understood the point of ω\omega-complete partial orders while taking category theory (where they were used as a motivating example), but they make a little bit of sense now having dipped my toes in domain theory/denotational semantics.1 Steve puts most of the focus on denotational semantics, which I found to complement Bob’s class (15-312, with a heavy emphasis on operational semantics) quite well.

If I have to hear the words “least fixed point” one more time…

15-411 Compiler Design

Despite being by reputation one of the most time-consuming classes at CMU, I kind of underestimated the sheer amount of effort involved in this class until I took it. I partnered with Eddie for this class; we’re both the procrastinating sort, so we would start the labs a few days before they were due. This meant that every roughly two weeks, we would basically disappear from the face of the earth for several days and spend the entire time writing our compiler.2 This really only worked out for us because we both had fairly extensive prior experience with OCaml.

Content-wise, the course is pretty nice. I made an effort to go to lecture in the beginning of the semester; I recall particularly enjoying the lecture on register allocation (it was basically just a graph theory lecture). However, with lecture at 9:30 am, lecture attendance was a little bit doomed for me in the long run. The course was officially sponsored by Jane Street, which provided free breakfast, tea, and coffee. The breakfast was always gone by the time I arrived, and I don’t drink coffee, but I enjoyed the tea.

The implementation part of the course, in which you write a compiler for progressively larger subsets of C0, was quite good. I think I learned a lot from this; writing a compiler is a very instructive experience. The parts of this course focused on the compiler front-end largely form a subset of 15-312, but the back-end stuff was particularly new and interesting. I tend to enjoy things that combine good theory with good implementation, and writing a compiler offers a great chance to do this.

21-270 Introduction to Mathematical Finance

I thought that since I’m going to work in the financial industry (albeit as a software engineer), it made sense to actually get a tiny bit of formal background in mathematical finance. I think there were a couple of interesting ideas in this course, but we had to wait until the last ~month of the course to get to the first actually nontrivial result (namely, risk-neutral measures and the fundamental theorems of asset pricing).

I don’t think the content will be directly useful for my job, but it’s decent stuff to know for one’s general education. The course itself is not terribly difficult. I never went to lecture and spent about thirty minutes before each exam preparing a formula sheet; it turned out just fine.

Looking Ahead?

It’s customary for me to include a little section here looking ahead to my courses next semester, but of course that makes little sense now. I also don’t want to spend too much time “looking behind” right now; as I said earlier, I’m planning a dedicated post for that. I’ll just say this for now: I’ve really enjoyed my time at CMU; I think I’ve learned a lot through many, many wonderful courses. I’ve been writing these things for four years; while I don’t necessarily agree with all of the opinions I had as a freshman,3 I hope that someone out there finds them at least somewhat useful. At any rate, it’s fun to look back and remind myself, huh, I used to know a lot about [random subject].

  1. If you’re interested in this topic, I enjoyed Harrison’s blog post about it.↩︎

  2. I’m being a little over-dramatic: it’s not like the only thing we’d do during that time is write a compiler, but it did dominate my mental space for that entire time.↩︎

  3. And I’m sure that in a few years, I won’t agree with all the opinions I have now.↩︎