Fall 2020 Reflections

So, I guess it’s a bit of a tradition now for me to share my thoughts about the courses I took at the end of each semester.


15-455 (Undergraduate Complexity Theory)

I’ll try spinning padding, that’s a good trick!

Me, channeling Anakin Skywalker during UCT psets

This was a fun course. I think taking 15-252 (More Great Ideas in Theoretical Computer Science) was actually great preparation for UCT, since it taught me how to sit down and think about difficult theoretical computer science problems for several hours on end. Also, I’m not sure if this is because I took 15-252 and 15-455 from the same professor, but a few of the homework problems in 15-455 happened to contain the same ideas as a few of the problems from 15-252!1

Similar to 15-251 (Great Ideas in Theoretical Computer Science), I think your homework group really impacts your experience in this course; I was lucky to have two friends taking the course at the same time.

I will say that collaborating with my group wasn’t the optimal experience due to the virtual format; nothing can really beat the feeling of scribbling on a whiteboard together at 2:00 am in Gates.2 But this isn’t a complaint against this course so much as it is against the entire pandemic situation as a whole.

If you’re going to take this course, my advice would be to get a copy of Sipser’s Introduction to the Theory of Computation, as well as Aurora and Barak’s Computational Complexity: A Modern Approach. (If you’re cheap, Aurora has a draft PDF available on his website, and there are PDFs of various editions of Sipser floating around on the Internet.) The earlier parts of Sipser are probably too easy for this course, but overall I think they work as pretty decent supplements to the content presented in lecture, and they serve as a good reference for certain theorems.

Just a note: UCT was pretty slow with grading. Maybe this has to do with course logistics difficulties due to everything being remote, but they ended up not grading our finals (!), which seemed slightly strange.


15-213 (Introduction to Computer Systems)

I will admit: since lectures are virtual this semester, I haven’t had the best attendance record. The only class I’ve regularly attended live was 15-213, mostly because of the attendance quizzes. (For most of the other classes, I preferred to watch the lectures on my own time, meaning once I realized I needed to understand a concept for the homework.) Many of the labs are quite fun, particularly the later ones. It’s a ton of fun learning to write your own allocator, shell, proxy, etc.

I will echo two pieces of common advice given about 15-213: first, that the labs do get somewhat more involved as the semester progresses, so don’t mistake the first few labs as being representative of the difficulty of the course. Second, when it comes time for the final exam, definitely do a few of the practice exams that the course staff helpfully releases. They’re often very applicable to the actual exam. (This strategy allowed me to be quite successful on the final exam, despite starting my studying on the day of the exam.)

Also, please take a look at the entire handout before starting the labs. I once wasted a few hours writing my own HTTP parser, only to realize that there was one already included in the lab handout.


11-411 (Natural Language Processing)

I have to agree with some comments on Reddit that this course wasn’t very well-taught. Many of the assignments and exams were kind of vague, and some of the content from the homeworks and quizzes was not in any of the lectures or the course textbook.3 I guess it mostly felt like the various parts of the course—the lectures, homework, exams, and project—were not particularly well coordinated with each other, although I think I at least learned something from each of them.

However, I did enjoy the policy of dropping the two lowest (out of seven) homeworks, seeing that I didn’t have to do any homework after the midterm. Actually, maybe this was a bad thing, because I missed a problem on the second exam that I would have gotten had I done the homework.


80-100 (Introduction to Philosophy)

I thought we’d learn more actual philosophy in this class. Much of this is my fault; it’s very much a “you get out what you put in” class, and I put very little in. I think it did raise my opinion of philosophy a bit, in the sense that much of it was more rigorous than I had expected.4 In terms of the actual class itself, we had the interesting choice between two different grading schemes. In the first scheme, we could submit weekly reading questions and then write a midterm and final essay. I hate essay writing, so I chose the second scheme, which was to submit about twenty graphical representations of some arguments we were supposed to analyze. It wasn’t terribly difficult work, and some of the papers we read were actually quite interesting.

Funny story: it was only once there was about a month left in the course that I realized there was a participation grade. I hadn’t attended 80-100 in more than a month when I found out about this via an announcement that the professor made regarding tardiness.

Our professor was okay; it was very clear that he cared very deeply about the class, even if it was an intro to philosophy class that most of us (students) probably didn’t care too much for. It was a little concerning that for some time he wore just a face shield and not a mask, but I guess that’s not a mark against his teaching. His habit of putting phrases like “HIGH PRIORITY”, “URGENT”, and “IMPORTANT” before his announcements was a little annoying.


33-104 (Experimental Physics)

Experimental Physics has the reputation for being an “easy” way to satisfy the lab requirement, but there ended up being multiple threads complaining about it in the SCS Piazza. The SCS administration did pass on the complaints to the course faculty, and they seemed to take them seriously/strive to improve, which is great.

I personally didn’t enjoy this class, but to be fair, I took it virtually during the COVID-19 pandemic; obviously, the experience in a lab class will be strongly compromised when taking it virtually. It just felt like a ton of busywork. Then again, I didn’t exactly choose this class out of a burning desire to learn more physics, so I guess I got what I signed up for?

Also, to be fair, while the assignments for this class often took a full day to complete, there would be like one assignment per week at most (sometimes even one every two weeks), and I did not actually attend a single lecture or lab hour after about the first week.

I’ve also heard that the experience can vary depending on which professor you have. I can definitely recommend Diana Parno, who was both a great instructor and lenient grader!


98-317 (Hype for Types)

This course convinced me that type theorists are all out of their minds. I pretty much followed along through algebraic data types and Curry-Howard isomorphism, but by the time we reached session types and dependent types, I honestly had no clue what was going on in this class.

Maybe this is comparable to my experience in the later parts of 15-252 (More Great Ideas in Theoretical Computer Science): although I was able to solve all the homework problems, I had zero intuitive understanding of anything.

I’d still recommend this class if you happen to have enough room in your schedule for it. It’s 100% stress-free, and you do learn some pretty neat stuff. (Here’s a fun party trick: taking the derivative of a type!)


21-241 (Matrices and Linear Transformations, as a TA)

Technically this appeared on my transcript as 21-605 (Teaching Mathematics). I had a fun time being a TA; hopefully the students in my recitation had at least a somewhat fun time. I really enjoyed pretty much everything except for the grading, which majorly sucked.


Looking Forward

As is traditional, here’s a list of things that I’ll be taking next semester:

I may also consider a mini (half-semester) statistics supplement to PnC. This may not be the ideal schedule, but I was roped into taking CDM together with a friend. Since the specific sections of 21-241 (for freshman CS majors) for which I was a TA this semester won’t be offered in the spring, I’ve also decided to jump ship to the CS department. I’ll be a TA for 15-150 (Principles of Functional Programming) next semester.


  1. Examples (without revealing the solutions, obviously) include some polynomial identity testing stuff and two reductions from essentially complementary boolean constraint satisfaction problems.↩︎

  2. Although one of my group members was also in Pittsburgh, so we did once try outdoor socially-distanced collaboration; our third member called in from Boston. Being slightly vampiric and averse to sunlight/wind, we did not try this again.↩︎

  3. As an example, one question on a quiz partially involved the distinction between RR and RERE, which was definitely not in the lecture or textbook. If you don’t have a background in CS theory, this is probably not something you’re familiar with. Another example: many of the later lessons seemed to assume some familiarity with machine learning topics. I have about zero background in machine learning.↩︎

  4. Interestingly, I think my TA, a grad student in the philosophy department, did his undergrad in math at Princeton.↩︎