Spring 2022 Reflections

This semester seemed to go by so quickly. As an upperclassman, I managed to arrange my schedule so that I had no classes on Mondays and Fridays,1 giving me a four-day weekend every week. At the beginning of the semester, I was super ambitious about this: I thought that I would be able to go on frequent multi-day hiking and cycling trips. Well, this did not end up happening; I only really took advantage of this once, when I went home one weekend. I think this also played out in blogging: my original goal was to blog once a month, but this trailed off toward the end of the semester.

It seemed like the weather, my coursework, and miscellaneous commitments never really lined up, but I got to be present on campus more and in particular invest a little more in ACF, so I’m fairly happy with how the semester turned out in that respect. (I had made it a New Years’ resolution to actually be on campus regularly for the first time since COVID started.)

Anyway, that’s enough about my life. As usual, I’ll proceed to give some thoughts on the courses that I took this semester.

11-485 (Introduction to Deep Learning)

I actually didn’t have to take this (I already satisfied my domains elective with 11-411 Natural Language Processing), but I decided that I should probably get some exposure to deep learning while at CMU. It’s a huge topic nowadays, and more broadly, machine learning is an obvious hole in my knowledge of computer science.

Right off the bat, one thing worth mentioning about 11-485 (and its variants, 11-685 and 11-785) is that these courses are massive and taken by students from quite diverse backgrounds. This means that you really have to filter what you hear about the course through the lens of whom you heard it from.2 My impression is that most CS undergrads find this course a decent amount of work but not particularly well-run, but your mileage may vary.

I’ll give credit where credit is due:

However, I also have a fair number of criticisms about the course:

I guess to summarize my thoughts about 11-485: it’s a pretty hands-on class that does a decent job of teaching the nuts and bolts of deep learning, although it is light on the theory. It is a lot of work, mostly because the models for the last two homeworks take many hours to train. It is also not the most well-run class I’ve ever taken at CMU, with a bit of an inflated sense of its own importance and rigor.

I think I’ve discovered that machine learning, and in particular deep learning, isn’t really for me. Deep learning seems like it’s more of an experimental science than a formal science, which kind of frustrates me as a “theory person.” People say that machine learning is a math-heavy part of computer science, but it’s really a lot of applied math; there is not so much theoretical stuff to be found.

15-751 (A Theorist’s Toolkit)

Going into this class, I was really excited. According to Evan, with whom I was taking it, an ACF alumnus5 described it as the best course he had ever taken at CMU. It’s only offered once every few years, so my anticipation had been building up for a while. Honestly, it was a good course, but I don’t think it quite lived up to the hype.

To get the logistical stuff out of the way: Ryan really likes experimenting with course policies, but I’m not sure that I was a fan of the way he set up logistics for this iteration of the course. Objectively, some of the course policies/recommendations were nitpicky (e.g. not using Overleaf to write , using proper punctuation when typing up math, etc.), although this is stuff that I normally do anyway, so it wasn’t really a problem for me. I also wasn’t a huge fan of the way we had to submit “effort” videos to Box.

Now onto the technical stuff: this is really a course that’s more focused on breadth than depth. As the name suggests, it’s largely a survey of various topics that every theoretical computer scientist should have in his or her “toolkit.” Perhaps this is a hot take, but I think that if you’ve taken most of the undergrad theory courses at CMU (particularly 15-251, 15-252, 15-259, 15-451, and 15-455), I’m not sure how much you’ll get out of 15-751. If you throw in 15-354 and 15-459, you’ve likely covered a majority of the content presented in 15-751. It is true that 15-751 goes into more depth into certain topics (e.g. while 15-451 only covered basic linear programming, 15-751 went more in depth with things like SDP relaxations and the sum-of-squares hierarchy). Honestly, I think that I might have been better served taking a more specialized class or devoting more time to research.

I did enjoy this class overall; I think that the best way to describe it would be as a deeper variant of 15-252. I did learn a few new and interesting things, like the analysis of boolean functions. My attendance was actually pretty good in the beginning of the semester, but it sort of trailed off at the end; the class times were just not very convenient for me.

15-591 (Independent Study in Computer Science)

I spent the semester doing “theory research” with Klaus. Like most undergrads, I didn’t devote nearly as much time to research as I should have. I won’t really go into the technical aspects of research here, but I had to submit a short video for the CMU Meeting of the Minds event if you want a high-level overview.

One thing that I found about theoretical CS: it’s hard to explain to others why your research matters, because honestly, it doesn’t really matter beyond “hey, this is fun to think about.” This was especially true because my research topic was in a pretty unpopular area, even within theoretical computer science. (We were essentially trying to solve a puzzle in word combinatorics, although our approach was not very combinatorial.)

My problem was something that Klaus and two master’s students tried and failed to prove about twenty years ago. It sometimes felt like my advisor had most of the ideas and I was just along for the ride—this kind of makes sense, given that I’ve been thinking about this problem for a couple of months, whereas my advisor has been thinking about it for a couple of decades (literally since before I was born!). In the end, this feeling, combined with the relative obscurity of the problem, left me somewhat unmotivated to work on the project. I think I just felt like this problem wasn’t particularly important to the field as a whole, and it also felt like it was a bit of a dead end (what progress was I going to make that my advisor hadn’t already made in the past twenty years?).

If you want to get academic credits for doing research, I think doing an independent study (15-591) is preferable to taking research practicum (07-400, formerly 15-400). This is largely because writing a final paper at the end is annoying. However, I will admit that the structure of 07-400 might have benefited me.

80-284 (Invented Languages)

This was an interesting linguistics class on “conlanging.” I will admit that I took this class partly because I like Tolkien. Anyway, it was nice to occasionally step outside of the CS world and have some fun learning more about linguistics.

Having some background in Latin and in general linguistics was helpful but not required. I was occasionally a little intimidated by all of the linguistics knowledge that some of the other students seemed to possess. (In particular, the actual linguistics majors…) The first half of this class is mostly just learning about linguistics and doing some practice in small groups; the second half is mostly working on your own constructed language. I ended up partnering with Eddie for the final project; we spent a few late nights working on it, but overall the workload is not particularly bad.

There were some logistical difficulties with the course this semester, but these were largely unavoidable, and the instructor was very understanding. Overall, I think this was a pretty fun gen-ed, and I would recommend it if you have at least one of (1) some linguistics background and (2) a strong interest in conlanging. Like most gen-eds, it is to some extent a “you get out what you put in” kind of deal.

98-008 (Shilling the Rust Programming Language)

This was just a fun StuCo about the Rust programming language. I actually kind of like Rust; it’s nice to have a systems programming language that incorporates a lot of the good ideas found in functional languages like the ML family or Haskell. I will say that I still don’t entirely understand the Rust borrow checker, although maybe that’s because I wasn’t paying too much attention in class.

Looking Ahead to Next Semester

I had a phenomenal registration time slot for next semester—8:15 am on the first day of registration! I briefly considered taking 54-191 (Acting for Non-majors, which is almost impossible to get into unless you’re a senior with a good registration time) just because I could, but I felt like there were better uses of my time.

Due to some combination of AP credits, the small size of the CS core curriculum, and some slightly aggressive scheduling in previous semesters, I actually only have two more courses to take in order to graduate: one computer systems elective and one science gen-ed. Theoretically, I could just take it really easy next semester and be on my merry way. But of course, as a CMU student, I could never bring myself to doing that. So my current plan is as follows:

I considered applying to be a TA again, but I didn’t want to overload myself too much, particularly since I’m anticipating increased extracurricular commitments next year, on top of potentially interviewing for jobs in the fall. On that topic, I guess the big question is whether I still want to do research in the fall, or more broadly whether I want to go to grad school (i.e. get a PhD). I have some thoughts on this topic, but for now, I’ll just say that I’m leaning against research/grad school.

  1. Or at least no classes that I needed to attend…↩︎

  2. I guess that includes this review, which comes from an undergrad CS major concentrating in theoretical CS.↩︎

  3. Technically this was “strongly recommended,” not required, but this is functionally the same thing.↩︎

  4. This was apparently in direct defiance of the dean of SCS, who, according to another professor I spoke to, sent out a reminder to all instructors not to make stuff due over Carnival.↩︎

  5. I may be misremembering, but this was possibly Andrew Kwon, who is now doing a PhD in math at Penn.↩︎