CMU Course Reflections

My page is somewhat inspired by these pages.

Typical disclaimer that opinions are mine and do not represent the opinions of my employer/college.

Fall 2018

  • 15-122: Principles of Imperative Computation
  • 15-151: Mathematical Foundations for Computer Science (aka Concepts)
  • 21-241: Matrices and Linear Transformations
  • 76-101: Interpretation and Argument (aka Interp)
  • 07-128: Freshman Immigration Course
  • 07-131: Great Practical Ideas in Computer Science

Extracurriculars: none

Reflection

Most of the classes I took this semester (data structures, discrete math, and linear algebra) are pretty standard for a computer science curriculum. However, I really enjoyed 15-122 and 15-151. I found the programming assignments for 15-122 interesting and fun, and Professor Mackey, who teaches Concepts, is an unforgettable lecturer.

I took a pretty light course load this semester, as I figured I would need time to find friends, become adjusted to college, and find a couple of clubs I liked. The workload was surprisingly more difficult than I thought it would be, so I spent less time doing the things I mentioned above. For instance, I joined 0 clubs, and found friends at office hours for 15-122 and 15-151.

Tip (for CMU students): go to office hours, and find friends there! You’ll meet some of the most hardworking and dedicated people, usually while working on problems together, or while waiting on the infamously long queues.

Spring 2019

  • 15-251: Great Theoretical Ideas in Computer Science
  • 15-150: Principles of Functional Programming
  • 85-102: Introduction to Psychology
  • 80-180: Nature of Language

Extracurriculars: HCI research (with Dr. Afsaneh Doryab), TA for 15-122 (Principles of Imperative Computation)

Reflection

The workload ended up being too much for someone who was still adjusting to college. Partially because I was so hung up on other work, I really struggled in 15-251 and 15-150. I got very little sleep, didn’t eat properly, and didn’t stay in touch with friends that I had made in the previous semester. I found that all of my classes this semester were taught well, although I do not think I retained the full amount of material from both 15-251 and 15-150 due to being overwhelmed about workload.

That being said, I really enjoyed TAing 15-122. It was the highlight of my semester and I loved going to office hours, lab, and recitation and trying to be the best TA I could be. Also, the research I worked on ended up turning into a soon to be published paper (coming April 2021)! This could not have been done without my research mentor, who was very understanding of the chaos I had put myself into.

Summer 2019

I relocated to Seattle to participate in the Amazon Future Engineer internship, working under the Content Experience team. Although I figured out that web development wasn’t my thing during the internship, I was blessed with a super supportive team/organization (shoutout to Ohad, Dave, David, Jay, Osai, and Ryan!), and enjoyed the high-impact work I was assigned.

Reflection

I found the workload for my internship pretty reasonable, although I did work extra hours for the first few weeks, since I thought I had to. I ended up completing much more than the expected amount of internship work, but I was able to relax for the last couple of weeks of my internship.

Three Things I Learned

  • Ask your coworkers for help! Especially if this is your first work experience, your mentors get that it’s difficult to get adjusted to industry work when you’ve only been in school.
  • Although large codebases are very intimidating at first, they are usually easier to understand than you think they are (and if you’re having trouble, see point 1).
  • Playing Tetris 99 on a large TV is significantly more fun than playing on a tiny Nintendo Switch screen.

Fall 2019

  • 15-213: Introduction to Computer Systems
  • 15-210: Parallel and Sequential Data Structures and Algorithms
  • 21-259: Calculus in Three Dimensions
  • 33-104: Experimental Physics
  • 15-295: Competitive Programming (dropped)

Extracurriculars: TA for 15-122 (Principles of Imperative Computation)

Reflection

Although it was still hard, the dreaded 15-213/15-210 combo was not as difficult as I thought it would be. Even if the classes themselves are harder than the ones I took freshman year, the study skills I gained after going through a year of CMU education made me feel much more prepared than I was freshman fall or freshman spring.

This semester was also when I figured out I wanted a computer systems concentration. Finding out what I was interested in within the computer science field was a huge relief. I was the freshman who switched planned minors every week, and to my surprise, my decision of concentration came naturally and gradually.

Lastly, competitive programming is very difficult without previous experience.

Spring 2020

  • 15-410: Operating System Design and Implementation (aka OS)
  • 15-259: Probability and Computing (aka PnC)
  • 80-135: Introduction to Political Philosophy

Extracurriculars: TA for 15-213 (Introduction to Computer Systems)

Reflection

As most CMU CS students know, 15-410 is one of the hardest, most time-consuming classes in the entire school of computer science. Taking it in my sophomore spring with limited coding experience was a daring move, but I don’t regret it one bit. I learned a lot of interesting material and debugging resilience from taking OS, and it really increased my confidence as a systems programmer. Intro to Political Philosophy (80-135), taught by Professor Gray, is one of the hidden gems of the CMU class offerings. And as most people who have taken PnC will tell you, Professor Mor Harchol Balter is top tier and PnC is a really high quality class.

My workload this semester was really high, given two hard classes (OS and PnC) with 20 hours per week of TAing, but as stated before, my study and time management skills get better every semester, so in the end, it was manageable!

This was also the semester where I obtained test extensions. With a professor’s help, I realized that my anxiety regarding test taking was way above average, and I’ve definitely messed up a few tests due to mid-test anxiety attacks. The stigma around having mental health problems and learning/test taking accommodations needs to be reduced, and I hope by sharing this small story, I’m doing my part in normalizing the conversation around mental health problems and disabilities.

Summer 2020

I took a virtual internship offer at AWS Redshift on the Control Plane team, while simultaneously doing course development as a TA for 15-213 and working on finalizing my research paper to send to conferences.

Reflection

Overall, this workload was the most I’ve ever taken on (including Spring 2019). I incorrectly assumed that I would be able to be more productive in a completely virtual environment. In fact, I figured out that it goes the other way–online work is very taxing for me.

Despite the online setbacks, my internship was fun, and I learned a lot about systems design, implementation, and measuring software performance. I also made the service I was working on 3x faster! This was also the semester where I learned the most about course development in a university setting. I led the development of new written assignments, helped work on a new programming assignment, co-wrote a proposal regarding staff structure, and developed lecture activity material.

During the summer, my very positive experience regarding course development and TAing led me to seriously consider attending a PhD program after graduation.

Fall 2020

  • 15-312: Foundations of Programming Languages
  • 15-445: Database Systems
  • 15-300: Research and Innovation in Computer Science
  • 76-210: Banned Books

Extracurriculars: TA for 15-213 (Introduction to Computer Systems), CMU Databases Research Group, CMU CS Education Group

Reflection

Taking mostly online classes really did take its toll on me this semester. I found it pretty hard to focus throughout the semester due to online classes and the lack of social interaction with my peers. To make matters worse, both the CS classes I took this semester (15-445 and 15-312) and the class I TAed (15-213) were understaffed, which meant more confusion as a student and more work as a TA to ensure class functionality. However, this does not discount the enormous effort by all professors, TA staff, and students to ensure that school could still run in a semi-okay fashion.

In terms of classes, all of my classes were well-taught with very enthusiastic professors, but the class that stood out to me most was Banned Books. Professor Newman is absolutely stellar and understands the importance of bringing controversial issues to the classroom discussion space.

This was also my first semester doing systems research with the CMU Databases Group. Although I’m still learning the ins and outs of being in a systems research group, it’s been fun working on the handmade database, interacting with other researchers in the group, and exploring different career possibilities (mostly the more alluring possibility of grad school).

Although I still learned a lot from my classes and from extracurricular experiences, above all, this semester taught me to appreciate what I had before (such as being able to leave my home to see a friend) and offer compassion to both myself and those around me.

This meme describes my feelings toward this semester more than any words will:

Spring 2021

  • 15-539: CS Pedagogy
  • 15-745: Optimizing Compilers
  • 15-400: Research Practicum in CS
  • 15-451: Design and Analysis of Algorithms
  • 33-120: Science and Science Fiction

Extracurriculars: TA for 15-213 (Introduction to Computer Systems), CMU Databases Research Group, CMU CS Education Group

Reflection

This was the most difficult semester for me, due to burnout, the pandemic, and several other life adjustments.

I think a couple of classes were the highlight of this semester. Optimizing Compilers has both good teaching and well-designed assignments, and I felt like I really understood the material through the assignments and reading. I personally loved CS Pedagogy because even as an experienced teaching assistant, I felt like I was gaining a lot of hands-on, guided experience in creating materials for introductory CS students. In the class, I designed my own game (a ripoff of Bloons TD) with the aim to teach students object oriented programming paradigms, Python, and applying their previous skills to a cool project.

Although 15-451 is a requirement, I thought it was a well-taught requirement, and I found both the professors to be very helpful and supportive. Professor Sleator also is incredibly memey as a person, which I found to be very entertaining in a pandemic. My review of 15-451 might be biased, as my close friend happened to be TAing the class that semester, which definitely made me enjoy 15-451 a lot more.

I found research (15-400) to be quite difficult for me to do given the outstanding circumstances, and I definitely was more unsure about grad school at the time.

Summer 2021

I took a virtual internship offer at Yugabyte on the Core team, while simultaneously working as a TA for 15-213 and participating in the 8VC Fellowship program.

Reflection

I thought the workload of my summer plans was quite high, but standard relative to previous semesters. Being productive was difficult this summer, mostly due to the accumulating pressure of my lack of healthy work habits and burnout.

Three Things I Learned

  • Reading through and contributing to a large, established C++ codebase requires a lot of effort and dedication. C++ is very hard and unintuitive for beginners to understand (NOT hot take: C++ should not be taught at the beginning programming level. This is another conversation that should be covered in its own blog post.)
  • I learned a lot about how startups work from the 8VC program I participated in biweekly. Startups are very money and funding focused, and often are created around a central, influential idea. (This seems obvious in retrospect; however, I was and am still very money/business clueless.)
  • Breaks can be beneficial to your well being!

Fall 2021

  • 15-462: Computer Graphics
  • 11-485: Introduction to Deep Learning
  • 15-330: Computer Security
  • 80-130: Introduction to Ethics (pass/fail)

Extracurriculars: TA for 15-445 (Database Systems), applying to FT jobs

Reflection

Balancing job interviews along with the usual workload of TAing and classes was ridiculously tough. I spent an average of 10 hours a week in job interviews for most of the semester. At the worst of it, I was doing 20 hours of job interviews a week. Classes wise, I thought all my classes covered interesting material, although the lack of systems material made me enjoy my classes somewhat less.

I couldn’t figure out how to organize this in paragraph format, so here’s a review of each of my classes in bullet point format.

  • 11-485: This class took me about 20 hours/week of my time, if not more. The professor, Bhiksha Raj, is kind, passionate, and it is easy to tell that he genuinely loves the subject material. I learned a lot about both fundamentals of deep learning through the “Part 1” assignments, and how to apply these concepts to real-world problems through the “Part 2” assignments. I definitely underestimated the difficulty of this class, and thought it was really hard. The time I spent on this class was comparable to the time I spent on OS. Having friends in the class helped a lot.
  • 15-462: I found the pre-recorded lectures of Computer Graphics to remind me severely of Zoom school, and I did not enjoy the class mostly because of the lack of professor involvement. However, the material taught in computer graphics is pretty interesting. The TAs for Computer Graphics are really helpful and I really appreciated all of them. Keenan is also nice, but seems quite busy.
  • 15-330: Relatively easy (compared to say, OS or compilers) and fun class. The professor, Bryan Parno, is an excellent lecturer, and the material is simulateneously easy-to-follow and interesting, which is rare for a CMU class. The assignments and exams were well constructed. In other words, they all relate to each other well. However, the professor said that a SQL join operator creates a new table, which is explicitly false (but teaching is the art of lying, and security isn’t a database systems class, so it was understandable).
  • 80-130: Ethics was honestly a really fun class, and I enjoyed discussing cool ethical theories with my classmates. As mentioned above (S20), Derrick Gray is an excellent professor, and taking another class with him was definitely worth the extra time.

Note for non-CMU readers: OS and compilers are two of the hardest and most time-consuming classes in the CMU CS curriculum.

My last semester was somewhat defined by an unfortunate Spin scooter accident that left me unable to type or write for about a week. By far, out of all my classes, 11-485 (deep learning) was the most accommdating, and for this reason, I highly highly recommend 11-485 if you have the time for it. :^)

Lastly, seeing everyone (friends, professors, my amazing academic advisor Mark Stehlik) in person was really really awesome! Office hours also returned in person this semester, and that was very enjoyable.