cmu courses
Reviews of each of my semesters as a CMU SCS student.
My page is somewhat inspired by Wan Shen Lim’s and Frank Fan’s course pages.
Additionally, here are some other CMU course pages: [1][2][3][4][5][6][7][8]. Email me if you’d like me to add yours!
Typical disclaimer that opinions are mine and do not represent the opinions of my employer/college.
Fall 2023
- 10-714: Deep Learning Systems
- 15-740: Computer Architecture
- 15-697: Graduate Reading and Research
Extracurriculars: TA for 15-445 (Database Systems), applying to Ph.D. programs and NSF GRFP
Reflection
This semester was simultaneously very busy and rewarding. Out of all my semesters so far, I’ve never really been busier than this! I essentially lived in Gates (coming in at 10am, leaving at 11pm to 1am, 7 days a week). Due to these arrangements, I worried I would become excessively burnt out due to my workload. However, at the end of the semester, I actually didn’t feel burnt out, just quite tired and ready to R&R.
Similar to last semester, I learned so much about database system extensibility, found cool and interesting results in my research, and got to present my work at the Parallel Data Lab Retreat*. I found it exciting to see the industry guests at the Parallel Data Retreat intrigued about my research, and this experience has motivated me to try to pursue more practical, industry facing problems in my research career.
I took two classes this semester. The first of which was Deep Learning Systems (DLSys). DLSys is a relatively new class that covers implementing different components of the deep learning stack. I gained insight on the scope of deep learning library implementation, and definitely appreciate libraries like PyTorch a lot more. However, I thought the class was doable by just trying to pass the test cases in the homework, which results in less effective learning. The second class I took was Computer Architecture. Computer Architecture (the CS Ph.D. version) is a lighter paper-reading/project class that focuses on computer architecture fundamentals. I thought the papers chosen were hard to understand for someone without architecture background, but gave a good overview of the field. Both the assignment and the project are pretty standard for a CS Ph.D. class–decently well-designed, but I could have spent more time on them than I did to get more out of them.
Lastly, I graduate CMU (again!) not knowing where I’m headed next for my Ph.D. degree. The uncertainty admittedly terrifies me a bit, but wherever I go, I know I’ve got the knowledge I’ve acquired and the wonderful people I’ve met during my 4.5 years at CMU!
* A conference style event where CMU Parallel Data Lab members present their work. Also, the desserts at the retreat were SO delicious!
Summer 2023
- 15-697: Graduate Reading and Research
Extracurriculars: none
Reflection
I spent most of this summer doing research! I developed most of my PostgreSQL analysis framework this summer, which was 1) a lot of work and 2) a lot of Python scripting. The overarching theme of this summer was definitely exploring PostgreSQL extensions, their internals, and the design decisions involved in creating them in depth. It was a lot of fun! This summer solidified my decision to apply for CS PhD programs in Fall 2023. I really enjoyed the discovery process of research.
Unrelated to databases, I discovered that serviceberries are delicious! There are also a few serviceberry trees at CMU, near Gates and Newell-Simon. I was lucky enough to grab a few handfuls for snacking!
Spring 2023
- 15-721: Advanced Database Systems
- 15-712: Advanced Operating Systems and Distributed Systems
- 15-697: Graduate Reading and Research
Extracurriculars: TA for 15-445 (Database Systems)
Reflection
Plot twist! I’m back at school–this time as a 5th Year Research Master’s student researching the wonderful world of database extensions. Honestly, I had so much fun this semester. It was so nice to be immersed in CMU’s wonderful academic community again. Research also ended up being super exciting and interesting, once I freed up my schedule enough to actually have time for it.
The highlight of this semester was definitely 15-721, Advanced Database Systems. Andy Pavlo is a phenomenal lecturer and I learned a lot while laughing a lot, which is always a good thing*. The first project, which is implementing your own Foreign Data Wrapper in Postgres, was well designed and taught me a lot about Postgres internals. Due to 15-721, I gained a pretty solid understanding of database system evaluation, design decision tradeoffs, and the field of OLAP DBMSs. This class really made me love database systems even more than I already do! 15-712 is a relatively easy class, and its set of required readings gave me a good overview of the general systems research sphere. I also liked that the midterms in 15-712 were open ended. Some of the questions allowed me to learn new things during the exam. Overall, my two classes this semester both taught me how to be a strong systems paper reader and helped reinforce my critical thinking skills.
Lastly, I think a few people have asked me about the decision making w.r.t. returning to school after taking a year (or years) off. I think I’d summarize my “general” advice as the following: If you find that you miss school after graduating, try to go back! If you’re interested in a more nuanced take, Talia Ringer has a good post about this on their Wordpress blog.
*: No, I’m not saying that just because he’s my research advisor. He actually is very funny.
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.
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!
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.
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:
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.
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.
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.
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.
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.
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.