Over winter break, a few classmates have asked me for course recommendations. Given that I’m nearing the end of my academic career (as far as I know), I figured I’d take some time to look back and write about what I enjoyed learning the most. For context, I’m finishing my BS/MS in computer science with a focus in systems and AI. This is, by no means, a list of classes you have or need to take before graduating from Stanford. Nor is it intended to boast about having taken some hard classes because, well frankly, that’s a pretty silly thing to brag about.

In no particular order,

COMM 133: Need to Know: The Tension Between a Free Press and National Security Decision Making

I took this class a few months after Trump’s inauguration and weeks after Michael Flynn resigned. In that spring quarter, the US almost nuked North Korea while Trump accused Obama of wiretapping him and fired Comey. On top of that, the press was fixated on figuring out if the pee-tape dossier was real. In other words, the history of the free press and national security was being written faster than we were learning it. This class gave me a better understanding of the fraught but oddly symbiotic relationship between the national security apparatus and the free press. I learned about the history of the national security apparatus and its missions, the wrongdoings that it hid in the name of national security, and the responsibilities of the free press to curb government abuses and inform our democracy in a way that preserves national interests. The class is unique in that the instructor is a former Washington bureau chief for the New York Times, so it’s taught from a first-person perspective! Since the class is about the press, we read a lot of primary-source news articles, which really helps re-live the history as an ordinary American. I also came away with a much better understanding of America’s military history, which I think is immensely valuable by itself. I am really fortunate to have taken this class.

SLAVIC 146: The Great Russian Novel: Tolstoy and Dostoevsky

I’m guessing you weren’t expecting to see this one. In all seriousness, it was the best literature class I’ve ever taken. We read War & Peace and The Brothers Karamazov cover-to-cover, along with some Chekov stories in 10 weeks. I took this class because 1) I was interested in reading philosophical novels, 2) I wanted to read few works deeply, 3) I wanted to learn how to read faster, and 4) I’m a masochist. Reading, absorbing, and ruminating on that much literature was a brutal exercise in focus. No joke, I spent most of that quarter close-reading in Green Library. The hardest thing about the reading assignments was remembering what had happened 500 pages ago! Because the works are so dense, however, there’s also so much low-hanging fruit that can inspire truly novel research papers. The small class size (8 or so people) allowed me to express my ideas freely in class discussion and engage with the works. I noticed that my writing style loosened significantly to accommodate all my interconnected ideas, which led to realize that effective communication doesn’t necessitate strict structure. Forget the hamburger model, sometimes a meandering paragraph can convey ideas more vividly than a predictable, templated one. As works of literature, War & Peace and The Brothers Karamazov articulate multiple lifetimes’ worth of human emotion and thought in very different ways. Perhaps the most gratifying part of the class was seeing my professor’s surprise when I told her I was a computer science major; she assumed I was in the humanities department given my performance in class and the fact that few non-Slavic majors, let alone engineering majors, would indulge in such suffering on their own volition. It was worth it!

ECON 14: Navigating Financial Crises in the Modern Global Economy

This seminar gave me a great background in understanding how the financial system works on a high level, how a crisis unfolds, and ways it can be addressed. I was surprised to learn that history does repeat itself to some extent both in the causes of and responses to financial crises. I don’t have a deep background in finance beyond one corporate finance class but our instructor, the former Assistant Secretary for International Finance at the Treasury, communicated and emphasized the fundamentals very effectively. Having taken the class, I can actually comprehend the portents of financial heavyweights and separate fear-mongering from rational explanations.

CS 140: Operating Systems

I took this class because I just could not stand not knowing how an operating system worked. My life wouldn’t feel complete without it! That sounds really dorky but I genuinely mean it. (The second reason is that I derive pleasure from challenging myself to an almost unhealthy extent, but I’ll save that for another post.) Of course, not everyone needs to take CS 140 to be a productive software engineer. One of the main purposes of software is to create abstractions so that everyone can be more productive and not worry too much about what’s happening underneath. However, if you want to improve upon those abstractions, you sometimes need to have an understanding of what’s happening under the hood, and the better your understanding is, the better your improvements can be. The class really opened my eyes to the fundamental constraint that all systems face on some axis: resource allocation. I liked that Professor Ousterhout’s lectures rarely involved lines of code since the theory really stands on its own. There is a non-trivial amount of code to write in the assignments, which makes it immensely gratifying to go from specification, to design, to working implementation. There’s also a lot of feasible designs, so there’s a surprising amount room for creativity. My group luckily survived the class with only one major scar: a pointer arithmetic bug in a filesystem implementation that was found at 4 AM after about 24 hours of debugging.

Some advice:

For each assignment, my group would spend about a week designing our implementation on a whiteboard and another week coding it. Don’t start coding immediately! Read through the starter code and focus on the design. Every minute spent thinking about your design in the abstract saves you at least an hour of debugging, or worse, realizing the system you designed on-the-fly can’t ever work. I recommend you find a group that’s committed and that you can trust. My group found that pair-programming with all three of us present was the most effective way of keeping everyone on the same page and minimizing bugs.

CS 240: Advanced Topics in Operating Systems

I had never taken a paper-reading class before but I’m glad I took this one. Reading the most important systems papers of the last 60 years put different systems paradigms I had heard about into proper context. That the class wove together different ideas from all my systems classes made it even better. I sharpened my ability to read and critique research papers effectively. My biggest takeaway was that a research contribution in systems is mostly judged by the core idea that the paper presents. The best papers present a single insight that can be summarized in a sentence, yet pay huge dividends on some performance metric. I think Alan Kay said it best: “A change of perspective is worth 80 IQ points.” I enjoyed reading seminal treatises on systems design principles and then seeing those principles applied repeatedly across research papers that came decades later. Noticing themes and patterns emerge across the papers felt as if I was being let in on some secret principles of the universe that I would have never known otherwise.

ME 104S: Designing Your Stanford

DYS is an opportunity to take a couple hours a week and devote it to thinking about how you want to spend your time in school. The instructors provide a wealth of frameworks, guides, and exercises that help you plan paths toward getting what you want out of college. Even if you don’t have a specific goal in mind, the class gives you the motivation and resources to explore different possibilities. The class operates in a small-group setting so you get to learn about the aspirations of your peers while at the same time you’re figuring out your own. Looking back, this class taught me a lot about goal-setting and the importance of intentionality. I’m happy I took DYS early in my Stanford career.

Honorable mentions

CS 143: Compilers

Looking back, I am surprised how frequently concepts from compilers show up in my day-to-day. I’ve been asked parsing problems more than twice in my software engineering interviews. I think this class is the perfect mix of theory and practice. There’s also some math involved, too: did you know register allocation is equivalent to a graph coloring problem?

CS 228: Probabilistic Graphical Models

One of the benefits of the quarter system is that offers the opportunity to go deep into a specific field for a short period of time. This class is one of those opportunities and it’s very well taught.