Fall 2021 Reflections

It’s now time for the annual December deluge of posts, i.e. when winter break starts1 and I actually have time to write again2. To start things off, here’s the usual course reflection post.

This semester, we were technically back in-person, but in all honestly, I basically treated it as if it were still virtual. By the last month of the semester, I don’t think there was a single class that I consistently attended. My schedule this semester looks kind of intimidating on paper: four technical classes and a research class. But honestly, I put in so little effort into some of my classes that it wasn’t as bad as it seems.

15-451 (Algorithm Design and Analysis)

This felt like a fairly standard CS core class. I once again had a good group of friends to work with3, which was nice. I admittedly did not attend lecture at all after the first week of class, but there were some high-quality lecture notes published by the course staff, so this wasn’t really a problem. There was a little bit of overlap with the lower-level algorithms courses, but honestly, this was surprisingly minimal. Most of the “cool algorithms” at the end of the course (like using polynomials and FFTs to solve combinatorial problems) had been covered in previous theory classes.

There was plenty to like about the course: I felt like I learned a decent amount about algorithms, and the programming problems on the homeworks were actually algorithmically interesting. Overall, while not mind-blowing in the same way as 15-251, it was a solid upper-level course in algorithms.

15-459 (Undergraduate Quantum Computation)

I came into this class with some background in quantum computation: as part of my high school’s “mentorship” program, I spent one semester of twelfth grade going to the MITRE quantum information science group at Princeton every Friday to “intern,” which really just meant learning about linear algebra/quantum mechanics and running some experiments with Qiskit.

Now that I have a much better background (having taken and TA’d a linear algebra course, as well as studying a ton of theoretical computer science), I can finally study quantum computing a little more rigorously. I had high hopes for this class because I’ve been trying to find a niche in CS that really excites me. I’ve been mostly doing theory (viz. algorithms and complexity), but this is pretty broad—I thought that, given my background, perhaps quantum computing might be a place where I could specialize. It’s also an up-and-coming field that seems to contain less snake oil than AI and cryptocurrency (or at least the popular versions of those fields). But honestly, the thought of pinning my interests on such a narrow subject scares me. Yes, I know that the choices I make at age twenty won’t define me forever, but it sure feels like it.

To be very honest, I spent very little time with this class. The homework is optional (if you choose to do it, it just reduces the weight on the exams), so naturally I did none of it. Also, lectures were at 8:35 am, so of course I did not go to them. This meant that all I really did for this class was spend the day before each exam learning everything that had been taught in the past few weeks. This worked surprisingly well grades-wise4 (my prior background probably helped), but I don’t think I learned as much as I could have.

I’m a little sad about this, because Ryan O’Donnell is a really amazing professor, but I’m planning to take another class with him next semester (not at 8:35 am), so hopefully I can actually attend that one.

15-462 (Computer Graphics)

The content taught in graphics was actually pretty cool. Keenan is a phenomenal lecturer; I’ve heard his lectures described as “deep but accessible,” which I think is fairly accurate. However, this semester, they were trying out a new “flipped classroom” format in which we would watch recorded lectures and then come to class to solve exercises. I really didn’t like this—what’s the point of going to class if I’m going to watch the lectures on my own?—and ended up not going, despite the attendance grade.

Cornell box, rendered with my ray tracer. This took about fifteen minutes on my (modest, seven year-old) CPU.

When it comes to the assignments, I think that they would have been really fun if I hadn’t procrastinated. (Pro tip: don’t try to write half a ray tracer in a single day.) I’m also not the biggest fan of C++, but it was a reasonable choice of language for the course, given that the entire graphics industry uses C++. The Scotty3D documentation was pretty poor; there were some genuine hidden “gotchas” in the codebase, which led to an over-dependence on the class Discord (at least in my opinion). However, I have to give credit to the TAs for the massive amount of work that they put into making the class work.

80-413 (Category Theory)

When I signed up for this class, my advisor looked at me and said, “I see you’ve chosen the most difficult way to satisfy your logic and languages requirement.” I was unaware that this class had that reputation. It’s a somewhat niche class that isn’t offered regularly, so it was difficult to know what to expect. (I’m also not sure if that’s actually true, next to, say, 15-312.)

The class started out easy enough, but due to the nature of the subject, the level of abstraction tends to ramp up really quickly, and I will admit that I got lost in the last month or so of the course. Luckily, we had lots of homework drops and late days. This was the class in which I had the best attendance record this semester, partially out of necessity (it’s hard to catch up once you fall behind) and partially out of convenience (it was at 3:05 pm).

The undergraduate and graduate sections of the course were taught together; there were a few graduate students who would ask intimidating questions about topology. The instructor would say “good question” and then give an answer that would completely fly over my head.

I don’t think this class has made me a better Haskell programmer (though I guess I theoretically know what a Kleisli category is now, but honestly not really). Oh well, it’s nice to be able to say that I’ve taken a class in category theory, and I can now write very complicated blog posts with big words to make myself sound smart.

07-300 (Research and Innovation in Computer Science)

I guess 07-300 is fine for satisfying the writing requirement for the CS major, but the “innovation” aspect of the class seemed a little silly. I ended up choosing Klaus as my research mentor, since I found CDM fairly fun. A bit of a warning for this class, though: don’t be me and realize that attendance is worth 20% of your grade at the end of the semester…

Also, fourteen-page essays (double-spaced, thankfully) will be the end of me.

Looking Ahead

Next semester, I’m planning on taking:

I’ve heard so many great things about Toolkit; I’m excited to take it next semester (assuming I get off the wait list, which I should). As someone who likes theory, taking my first PhD-level theory course should be really awesome.

I don’t have to take Deep Learning (I’ve already satisfied my AI requirement with NLP), but I feel like ML is a pretty big hole in my CS knowledge, and it’s such an important topic nowadays that I really should take a course in it. I decided to take the Rust StuCo for a similar reason: Rust has so much hype around it right now, and I want to understand why.

I’m still not sure about taking 07-400 vs. just doing research via an independent study. The former gives more structure, but the latter provides more flexibility. I figure I can change my mind up to the course add date sometime in February, so I’m not in a rush to make up my mind.

I’ve decided not to TA next semester, since I feel like it might be too much. I want to be a little more involved with some campus clubs that I’m a part of, and I want some time for myself. I really enjoy being a TA; I think I’ll go back to it during senior year.

On the topic of senior year, something interesting: after talking to my advisor, I’ve realized that I only need two more classes after next semester to graduate. Honestly, I could probably graduate next semester if I really tried. This is a little scary…where has all of my time at CMU gone? I haven’t decided whether I’ll fill the rest of my senior year with interesting classes (so many cool classes and so little time!) or just graduate a semester early and spend my time traveling. I think the answer to that question might be related to the answer to the Big Scary Grad School Question, which I also need to answer sometime soon.

  1. Well, it’s still finals week, but I’m procrastinating.↩︎

  2. Update: oops, I was too carried away trying to have a life doing stuff over winter break, so the promised December deluge never happened this year.↩︎

  3. As a side note, I’ve taken a class with Evan every single semester at CMU. We’re also both planning on taking Toolkit next semester.↩︎

  4. I should probably not jinx this before I take the final exam…↩︎