Courses
In keeping with my fellow CMU alumni, I feel obligated to write down a record and review of each semester of courses that I took while I was an undergraduate, because I have frighteningly little personality outside of my education.
Here, I am using colors to signify classes that I thought were particularly noteworthy. Colored in green will be classes that I thought were particularly thought-provoking or well-taught. Colored in magenta will be classes that I thought were life-changing.
(Freshman) Fall 2018
- 15-122: Principles of Imperative Computation
- 21-127: Concepts of Mathematics
- 21-241: Matrices and Linear Transformations
- 66-106: Quantitative Social Science Scholars Freshman Seminar
- 79-104: Global Histories
- 85-150: Cognitive Science at CMU and Beyond
- 98-194: (StuCo) Puzzle Hunts
Extracurriculars: A cappella
This semester was a whirlwind of adjusting to college life, having things to do outside of video games in my free time, and learning how to learn. In retrospect, the workload was far less than what I would become used to later, but my ability to take on more increased exponentially over the course of this first year.
I had never done proof-based mathematics before, so Concepts gets the credit here for introducing me to aspects of math that I didn't know existed. While everything I was learning was hard, I was also loving the fact that I was learning things that I thought were cool and interesting, which I never really got in high school.
I definitely also learned a lot from 122, but most of it was just getting practice with programming, and practice with actually thinking while programming. As an introductory course, it was pretty good, but I don't think it was noteworthy enough for a special mention.
Generally, the other classes were chores that I tried to get done quickly so I could focus on other things. I appreciated Ricky Law's enthusiasm for 79-104 a lot, though.
(Freshman) Spring 2019
- 15-150: Principles of Functional Programming
- 15-381: Artificial Intelligence Representation and Problem-Solving
- 76-106: Writing about Literature and Art
- 76-108: Writing about Public Problems
- 80-251: Kant
- 85-412: Cognitive Modeling
Extracurriculars: A cappella
I found this semester a lot less cohesive than the last, because it seemed like my attention was fragmented between many unrelated things, whereas the previous semester just felt like a fundamental core, plus a few extra things. In terms of my internal storyboard, this matters.
I have some scattered thoughts:
- 150 gets the position as one of the few CS courses I took where I did not fall asleep most lectures. I found it very interesting to be learning something which was a brand new paradigm that I had never seen before, and it tickled a part of my brain which was looking for elegance and beauty, that I began to nurture over the course of the next few years.
- Writing about Public Problems was an unexpectedly good course, where I felt like I could write about something which actually mattered. Unfortunately, it was only a half-semester course, and by "unexpectedly good", I just mean that I spent only a moderate amount of time completing things haphazardly, rather than most of the time.
- I took 381 expecting AI to be something that I would be good at, or enjoy, due to being a cognitive science major interested in computer science. I found that neither of those things were true, unfortunately.
- Cognitive Modeling was interesting, but it's where I first began to experience dissonance with cognitive science, because it felt to me like there should be something more principled than just fine tuning parameters to get models to produce marginally human behavior. I began to get quite weary of experimental results and approximations -- I wanted something more fundamental.
(Freshman) Summer 2019
This summer, I worked in the HoltLab and Lab in Multisensory Neuroscience, under Dr. Neeraj Sharma (under Profs. Barbara Shinn-Cunningham and Lori Holt).
This summer, I was working using machine learning to classify EEG data, and I worked on an autoencoder to try and capture the essential features for that classification task. I learned a lot about practically using machine learning libraries in Python, signal processing, and principal components analysis.
(Sophomore) Fall 2019
- 15-213: Introduction to Computer Systems
- 15-251: Great Theoretical Ideas in Computer Science
- 85-213: Human Information Processing and Artificial Intelligence
- 85-219: Biological Foundations of Behavior
Extracurriculars: Alpha Epsilon Pi, TA for 15-150, a cappella
I think every waking moment I spent this semester was running to and from 213 labs, 251 problem sets, and 150 commitments. I spent many evenings in 251 office hours. I would not recommend taking both of these courses together.
Despite the fact that I had almost no free time, I thought that both classes were extremely interesting, and only cemented my interest in computer science further. I think this is the semester where I began to realize that I could really pursue computer science, that it was something that was within my ability.
In addition, this was the first semester where I started TAing! 150 was a great time, and it was when I started to meet people outside of my friends from freshman year and Discord. Overall, I experienced a great tonal shift this semester, in terms of my own self-image.
(Sophomore) Spring 2020
- 15-210: Parallel and Sequential Data Structures and Algorithms
- 15-259: Probability and Computing
- 15-455: Undergraduate Complexity Theory
- 33-104: Experimental Physics
- 98-242: (StuCo) Esoteric Programming Languages
- 98-317: (StuCo) Hype for Types
- 98-360: (StuCo) GEB
Extracurriculars: Alpha Epsilon Pi, TA for 15-150, a cappella
This semester was the first semester of COVID, so there was an abrupt shift in this semester, and towards the latter half I definitely stopped caring as much about school.
- Students tend to fall into a bucket of enjoying 213 or 210, and to my surprise, given that 210 was in SML, I was in the 213 bucket. It was a fine class, but I had better things to do, and I'm not very good at coming up with algorithms, it turns out.
- I was very excited about complexity theory, but I thought we spent too long on some topics, and while some other students could appreciate Klaus' detours into CDM-level math, I was not one such student, so I learned that the latter half of every lecture, I could pretty much not understand.
- Experimental physics also was unbearable for me, I hate experiments (Anderson was great though).
- Mor Harchol-Balter is great, and so is PNC. I don't enjoy probability (or math involving numbers) very much, but she has a way of engaging the audience that I found very compelling. I didn't get any chocolate, but I have lots of fond memories of the course.
This was the semester where I completed my transfer into computer science. It was a great weight off my shoulders to realize that I was finally free to study the things that I wanted to study.
(Sophomore) Summer 2020
This was the first summer of COVID, so while I had an internship at IBM, I ended up doing it remotely back home for the whole summer. This, put simply, kind of sucked. I also got a project which was not particularly interesting to me, since it was a rehash of a 213 assignment (ProxyLab) in C, and I at no point wrote code which anyone actually tested, I'm pretty sure.
In addition, I TA'd for 150 and 213 this summer. Originally, the plan was that since 150 was a half-summer course, I would TA 150 for one half and 213 for the other. Unfortunately, nobody actually stopped me from TAing for both, so I ended up juggling my internship, TAing for 150, and TAing for 213. This meant some days I was in office hours for four hours straight. I would not recommend this.
This was also the summer I wrote SML Help (most of it).
(Junior) Fall 2020
- 15-312: Foundations of Programming Languages
- 15-317: Constructive Logic
- 15-459: Quantum Computation
- 21-373: Algebraic Structures
- 80-413: Category Theory
Extracurriculars: Head TA for 15-150
There is precisely one class on this entire list that I felt was deserving of life-changing, and that is 15-312. I thought about whether 15-150 should be one, but I only really began to appreciate and understand 150 after I took it, while I was TAing, so I wouldn't have said it changed my life as I was taking it.
15-312 changed my life as I was taking it. Bob Harper's teaching style was so amazingly infectious and exciting that, after semesters of being at CMU, I felt like I was finally understood. This class showed me exactly the fundamentals I was looking for, with all the elegance and beauty that I wanted. I could not think about programming languages the same way, after this course. I can recommend no other course more highly.
This was probably my favorite semester, academically speaking, at CMU. After a few semesters of TAing 150, I had begun to learn snippets and whispers of the programming language theory that it hinted at, and this semester I decided to go all in. Bob Harper has an idea of "computational trinitarianism", comprised of logic, computer science, and math. This was my computational trinitarinism semester. Every class, I felt like I learned something which only peeled the curtain of reality back further, and everything was wonderfully interconnected.
- Clogic was a pretty interesting class, but it annoyed me that there were so many people taking the course purely for the requirement, whereas I was there because of my interest. I felt like the course could have been more in-depth if not for that.
- Algebraic structures was terrible, and I could have learned an equivalent amount purely out of reading Dummit & Foote.
- Category theory was very interesting, albeit a little too abstract for me. I think I would have gotten more appreciation had it been taught with more of the computer science perspective in mind, as I did not have enough background math knowledge to really appreciate it.
- Quantum computation was unrelated to all the PL stuff, but it was actually a great course too -- Ryan O'Donnell is a terrific professor. While I am certain I will use none of the information I learned in this course again in my life, it was a lot of fun.
(Junior) Spring 2021
- 15-451: Algorithm Design and Analysis
- 15-539: CS Pedagogy
- 15-745: Optimizing Compilers for Modern Architectures
- 15-819: Computational Type Theory
- 33-114: Physics of Musical Sound
- 80-514: Categorical Logic
Extracurriculars: Head TA for 15-150
This is the beginning of the end, for my CS education, because this is the last semester where I took a significant load. At this point, courses were still remote, for the most part, and after the excitement of the previous semester, this selection of courses just couldn't measure up. I spent most of this semester procrastinating and burning out of my ability to do coursework.
- Bob's grad class was great, but unfortunately due to my lack of motivation, I didn't do most of the homeworks. This had the unfortunate effect of ensuring that I learned very little from the class, which was not Bob's fault.
- I also found categorical logic rather uninteresting, because I wanted something that was more based in the computer science aspects of category theory.
- Optimizing Compilers would have been a better course, were I not to be so burned out. Unfortunately, the prospect of working on C++ fatigued me quite a bit, and I felt like the class was more of an algorithms class than the compilers part.
- 451 was fun at times, but only because there were leaderboards for the fastest submission to solve a certain problem, and I took it as a personal challenge to try to beat as many people as possible with SML. I think I got top 10 at one point. Otherwise, it was a little too theoretical for me at times.
- CS Pedagogy was something I was interested in, but unfortunately I found it to not quite match up to what I was looking for. The course was mainly focused on content creation for CS Academy, and while we had a few fun seminars where we discussed pedagogical topics, those were rare occasions. I was moreso looking for something where we could discuss/learn more science-based techniques to pedagogy.
(Junior) Summer 2021
This summer, I was an intern at Facebook (then called Facebook), working on the Pyre team, which is a Python type-checker written in OCaml. I'm pretty sure for the team selection form I made it very clear I wanted to work on something functional, and I am very glad that it ended up happening.
I thought this was a great summer. For one thing, although it was still remote, I was able to get corporate housing, which meant I didn't need to be at home. The housing was in Emeryville, and no one lives in Emeryville, to be fair, but it was nice to be in California nonetheless.
I learned a lot about software engineering this summer, and I think this was the most essential thing for my career after college, that I had already had experience with PRs and Git and writing production OCaml. My project had to do with implementing shape types for tensors, so that shape mismatches could statically be caught by Pyre, which I thought was super cool. At one point, I got to present my work to Guido van Rossum himself!
(Senior) Fall 2021
- 15-300: Research and Innovation in Computer Science
- 15-411: Compiler Design
- 15-591: Independent Study in Computer Science
Extracurriculars: TA for 15-312, Vice President for AEPi, StuCo instructor (x2)
This semester, I became Vice President for AEPi, and started doing that as basically a full-time job. Compilers was definitely an interesting course, albeit one whose 8am lectures I could not possibly wake up in time for, and I enjoyed doing the homeworks (and working in OCaml) quite a bit.
I started doing a senior thesis this semester, but I ultimately ended up dropping it by the spring. I'd spent quite a bit of time debating about whether or not I should go to the industry, or pursue academia, and I came to realize that research is just not something that I enjoy doing.
(Senior) Spring 2022
- 17-355: Program Analysis
- 79-320: Women, Politics, and Protest
- 98-008: (StuCo) Shilling the Rust Programming Language
Extracurriculars: TA for 15-150, Vice President for AEPi, Greek Sing, StuCo instructor (x2)
I pretty much took a single class this semester, and focused on Greek Sing for the rest of it. Sorry to say that I don't really have much to say, here. I found program analysis really quite dry, and spending four weeks on dataflow analysis was a surefire way to get me to mentally check out of the class completely.