(estimated reading time: 10 min)

Thoughts on CMU courses (and reflections on my college experience). Similar pages: 1, 2, 3.

Nov 2023 update: I have totally been leaving life at CMU behind and not feeling like updating this page. Hopefully one day an impulsive urge to finish what I started will kick in, but until then, please refer to other CMU course reviews linked above instead.

Jan 2023 update: currently restructuring and rewriting most of the content

  • Comments on each course is now split into four parts:
    • about the course materials themselves
    • about teaching and infrastructure
    • about my experience and learning strategies
    • other miscellaneous thoughts
  • All reflections are moved to a separate section.

Degree: BS in Information Systems + additional major in Computer Science

GPA: 3.97/4.0

Background: I entered CMU (Dietrich) with a decent background in humanities and social science, and wanted to study psychology or cognitive science at first. I didn’t have much STEM background other than several years of experience in Pascal and a little knowledge of Java (from APCS) and Python.


Table of Contents

  1. Course Reviews
    1. Senior Year
    2. Junior Year
    3. Sophomore Year
    4. Freshman Year
  2. Reflections
    1. Teaching Experience
    2. Academic and Career Choice
    3. College Life


Course Reviews

! are courses I enjoyed; ☆☆ are those I recommend taking, on top of having good or useful content.

Senior Year

Spring 2023

  • 21-266 Vector Calculus for Computer Scientists
  • 67-373 Information Systems Consulting Project
    • content:
      • Every student was assigned to a group of 3-5 to work with a community partner for a semester-long technical consulting project. This is what my group worked on.
  • 17-356 Software Engineering for Startups
  • 15-281 Artificial Intelligence: Representation and Problem Solving

Other Commitments:

Workload: TBD


Fall 2022

Courses:

  • ! 15-466 Computer Game Programming
  • 15-451 Algorithm Design and Analysis
  • 17-363 Programming Language Pragmatics

Other Commitments:

  • 3rd-time TA for 15-210
  • Full time job hunt
    • Took up a significant amount of time (10-15 hrs per week according to my time log) and mental energy. I wrapped up my job search in early November, after which my mental health recovered rapidly.
    • See my other blog post New Grad SWE Job Hunt Advice for more details.

Workload: 36 units. Time-logging suggested that I spent 35-40 hrs per week on coursework. Main source of stress came from job hunting and the uncertainty of which.


Junior Year

Summer 2022

Other Commitments:

  • SWE internship
    • I returned to Amplitude for a second internship as a backend SWE on the same team.
    • With previous exposure, I was assigned some significantly more complex and high-value tasks, and contributed to a top priority project that helped the company land its biggest deal at the time.
    • It was again a fulfilling internship, but I sadly had to turn down the return full-time offer because the company wasn’t able to offer the location flexibility I needed.
  • Job hunt preparation
    • I started preparing for full time job search, spending ~20 hrs per week on grinding leetcode (for the first time in my life) and other tasks.
    • See my other blog post New Grad SWE Job Hunt Advice for more details.


Spring 2022

Courses:

  • 15-251 Great Ideas in Theoretical Computer Science
    • Covers many important theorectical foundations of CS, such as computability and complexity, randomized algorithms, approximations, etc. There’s a lot of math involved (e.g. set and graph theory), and a huge part of the class is reading and writing proofs.
    • This class has a reputation for being very hard, and I mostly agree with that. Some parts did give me quite a hard time (mainly countability and approximation), while others were relatively easier to understand (since it has some overlap with 210). For what it’s worth, the time I spent on it is definitely more than other core classes.
    • I can’t tell if I am a fan of the writing sessions, where instead of submitting the assignment, some random questions from it are picked and one needs to write down the answers in a quiz setting. On one hand, as someone with test anxiety, I needed to spend way more effort to prepare for the weekly “tests”. On the other hand, it did make exam preparation way less stressful, since I felt that sufficient understanding of the homework problems makes exams pretty trivial.
    • Ada is probably the most devoted professor I have met at CMU so far. He has definitely spent a lot of effort into making 251 a good course, and he is very good at explaining and motivating complext concepts. The course also has a good support structure. One would definitely enjoy this course if they are interested in math and theoretical CS, even though it would take non-trivial effort to do well in it regardless.
  • 15-330 Introduction to Computer Security
    • The course has four main parts: security concepts, cryptography, network security, and human factors. I took it both out of interest and because I believe it’s a field with practical importance that deserves more attention than it’s getting.
    • The first two assignments (exploiting C programs and cryptographic primitives) turned out to be pretty hard and took me way too long to finish. It almost seemed like mission impossible to fully understand cryptography and I literally got more stuck on them than 440 projects. The cryptography exam was also brutal. Things chilled down a lot after the crypto part though.
  • 67-272 Application Design and Development

  • 70-332 Business, Society and Ethics

Other Commitments:

Workload: 45 units. Time-logging suggested that I spent 40-50 hrs per week on coursework during the first half, and only ~30 during the second, as my motivation decreased sharply after spring break.


Fall 2021

Courses:

  • ☆☆ 15-440 Distributed Systems
    • professors: Yuvraj Agarwal, Rashmi K. Vinayak
    • content:
      • Covered most fundamental design principles and techniques of distributed systems, many of which crucial to modern day software engineering, since many SWEs will be working with a distributed system even if they are not working on one.
      • Taught in Go for fall and Java for spring. Go was a bit unintuitive to work with at first, but I appreciated it more over time.
      • Working through the projects was just a huge battle with all sorts of concurrency issues. Read more about them here.
    • teaching and infra:
      • Most content was explained decently clearly in lectures. The slides were detailed but were not a substitute for lectures for the hardest parts.
      • Due to the shortening of the semester and lack of corresponding readjustment, the course had a pretty stressful schedule and received a lot of complaints that semester.
      • OH was useful for written assignments and getting advice on how to start for the coding projects. However, it’s more efficient to rely on yourself (and your teammate) for debugging.
      • Some written questions were phrased ambiguously, but not otherwise challenging.
    • experience:
      • Thanks to my teammate, I had very good experience with the two group projects. The takeaway is: find a good teammate.
      • The two harder projects took around 20 hours per week. The exams were easy.
      • Not too overwhelming overall - a good choice as one’s first systems elective.
  • ! 15-459 Quantum Computation
    • professor: Ryan O’Donnell
    • content:
      • Discussed the theoretical side of quantum computation, including some of the most fundamental quantum algorithms.
      • No physics, a lot of CS theories and math - especially linear algebra.
    • teaching and infra:
      • The professor taught well, and was accommodating. OH is also very useful for getting conceptual or homework help.
    • experience:
      • Turned out to be quite a bit harder than I expected, but it’s not objectively very challenging if one is good at linear algebra and thinking abstratly (I’m not).
      • It would have been easier had I taken 251 before it, which felt like much more crucial of a prerequisite than 210.
      • Homework was optional and was harder than the exams. Without homework, the course took <10 hrs per week, but with homework it took quite a bit more.
      • Overall positive experience, but I don’t think one should take it without being genuinely interested in either quantum computing or CS theories.
  • 67-262 Database Design and Development
    • professor: Raja Sooriamurthi
    • content:
      • Covered the basis of relational models, basic and intermediate SQL queries, important database design principles, and MongoDB basics.
      • The course is meant to teach you how to use and interact with databases while having a high-level idea of how they work under the hood. It’s not a substitute for courses that cover database implementations, such as 15-445.
    • teaching and infra:
      • Raja is a nice and caring professor, and had given good life advice. The teaching itself was clear but too slow-paced for me.
    • experience:
      • A chill class overall, but it’s mostly because I already have experience with much of the content.
  • ! 76-270 Writing for the Professions
    • professor: Peter Z. Mayshle
    • content:
      • The first project is about job application materials. The remaining three had very flexible topic choice (I don’t know how much this flexibility varies among different professors).
    • teaching and infra:
      • The professor was responsive and accommodating. The class was small and discussion-heavy.
    • experience:
      • A pretty fun class because I could write about topics that I’m actually interested in.
      • Would have benefited from the course even more had I taken it in my sophomore year - so I suggest taking it early.

Other Commitments:

Workload: 39 units. Heavy during the first half due to the hardest 440 project and several other life adjustments, manageable in general.


Sophomore Year

Summer 2021

Other Commitments:

  • SWE internship
    • I interned remotely at Amplitude - a digital analytics SaaS startup - as a backend SWE, and worked on the team in charge of developing new analytics features.
    • It was my first internship ever, and I was surprised by how much I grew during my 12 weeks there. I relied a lot on my mentor at the beginning, but quickly became more confident in my abilities and more proactive in terms of proposing new ideas.
    • I finished my main projects early, then discovered a data integrity bug in production, and took on the unexpected task of fixing it. During the last few weeks, I worked on a couple smaller features, including a hackathon project which won the 4th place.
    • I decided to return next year for a few reasons:
      • I liked the culture and my team was especially fun and supportive.
      • The company was quickly expanding and launching new initiatives, bringing opportunities for me to learn new things while leveraging my existing knowledge to make larger impact.
      • I’m satisfied with the company enough to consider returning there for full time.


Spring 2021

Courses

  • ☆☆ 15-213 Introduction to Computer Systems
    • The content gets more and more interesting deeper into the semester, but also more challenging. I didn’t quite know how to program in C at the start of the course, and things like memory management and concurrent programming took time to sink in.
    • Similar to 210, the labs were time consuming and could be frustrating since I was new to system programming and low level languages, and was yet to form very good coding habits. However, finishing them felt rewarding and they definitely improved my coding and debugging skill.
    • It also made me interested in computer systems. In hindsight, the course was useful and worth the amount of effort I put in.
  • ! 15-388 Practical Data Science
    • Another very useful course for people interested in data science, requires rather solid Python skills and focuses heavily on application (as the name suggested). Covers all the major aspects of data science (collection, modeling, etc). The statistical and machine learning modeling part has some overlap with 36-290.
    • Well taught content and decent workload (given one is proficient in Python). There are two projects and Zico Kolter was very flexible about the topics, so I got to work on things that I found interesting (Overwatch Stats Analysis), which was great.
  • 67-250 The Information Systems Milieux
    • First half of the course focuses on the business aspect of IS, with a lot of case studies and theoretical/methodological stuff. I didn’t like it, and I would never want to work on something like the Tesla case study project again.
    • Second half of the course is an introduction to HTML/CSS, JS and SQL. A good overview but the pace was way too slow for me. The final web dev project also made me realize I wasn’t very fond of frontend stuff.
  • 36-315 Statistical Graphics and Visualization
    • Teaches you how to make statistical visualizations that make sense in R and think critically about them. Also covers the basics of data analysis and model inference. Some overlap with 388.
    • Chill workload. Zach Branson is a very nice professor who is willing to make quick changes according to students’ feedback.
  • 65-203 Applied Quantitative Social Science II
    • Second year seminar for students in the QSSS program, featuring a lot of guest lectures on a wide variety of topics. A good chance to learn about all the cool social science research going on in Dietrich and connect with peers. It was unfortunte that I was not able to attend the seminar synchronously because of time difference.
  • (SI Leader) 21-241 Matrices and Linear Transformations
    • Co-leading the SI session with someone else somehow made it less fun for me. Also had less attendance comparing to last semester.

Workload: moderate

Other Commitments:

  • 2nd-time SI leader for 21-241
  • Personal project on data science


Fall 2020

Courses:

  • 15-210 Parallel and Sequential Data Structures and Algorithms
    • After 15-150, I thought I would hate this class, but that didn’t really happen. Learning algorithms and solving problems functionally was still challenging, and I had to put in quite some effort and relied heavily on office hours. It’s rewarding to figure a problem out, but the process did get very frustrating at times.
    • The algorithmic content covered in this class is pretty useful for technical interviews. SML also became more tolerable when I’m not only learning about the language itself.
  • ! 36-290 Introduction to Statistical Research Methodology
    • A research training course for sophomore statistics students. Highly recommended if you’re interested in doing statistics or data science stuff - extremely useful.
    • Heavy focus on application of statistical learning methods (supervised vs unsupervised, regression vs classification, etc.), with a lot of programming in R.
  • 36-350 Statistical Computing
    • A good course to practice R fundamentals and common libraries for data analysis, and learn some slightly more involved topics (simulation, optimization, etc). It helps one become decent at programming in R with a very reasonable amount of effort. Some overlap with 290.
    • Last few weeks were about SQL basics which is also useful.
  • 36-401 Modern Regression
    • This course seriously made me question my major choice and pushed me toward transferring out of statistics, although it’s obviously not the most important reason.
    • A big part of the course is the mathematical basis of linear regression models. Don’t think I remember a single thing about the content other than it being boring and feeling meaningless to me.
  • 79-104 Global Histories
    • The topic was genocide and weapons of mass destruction. Fairly interesting. I enjoyed all three required books and would recommend them: Ordinary Men (Holocaust), Machete Season (Rwanda genocide), and Thirteen Days (the Cuban Missile Crisis).
  • (SI Leader) 21-241 Matrices and Linear Transformations
    • I applied to be an SI leader after my first semester because I wanted to lead 21-127, but I ended up being assigned to 241.
    • Put a lot of effort into it and got really good student feedback.

Other Commitments:

  • 1st-time SI leader for 21-241
  • Personal project on web development
    • This was my first attempt at software development after deciding to choose that as my career path, where I built a personal website written in React.
  • projects for Scotty Labs and Data Science Club
  • SWE internship application
    • I applied to 70+ places for Sand received 3 OAs - and failed all of them.

Workload: 48 units. A bit overwhelming during the first half due to the learning curve from three projects, slightly better towards the end.


Freshman Year

Summer 2020

Courses:

  • (Summer 1) 15-150 Principles of Functional Programming
    • Teaches Standard ML and some core concepts in functional programming. Way too fast-paced since it was only six weeks (they changed it to be 12 weeks in summer 2021). Some ideas are somewhat cool, but too novel for me to be sufficiently comprehended in that short of a time (e.g. continuations/lazy evaluations).
    • On top of the concept itself, I also didn’t particularly enjoy learning SML and was often confused by it.
  • (Summer 1) 36-225 Introduction to Probability Theory
    • Fairly easy with a chill workload, quite some useful knowledge and practice of basic probability theory, random variables and distribution functions, etc.
  • (Summer 2) 36-226 Introduction to Statistical Inference
    • The course content centers using probability to analyze and make inference about data, such as hypothesis testing and linear models, etc.
    • Relatively easy with some annoying math, although the content isn’t quite appealing to me.
  • ! (Summer 2) 33-124 Introduction to Astronomy
    • Perfect course for people who are interested in astronomy but don’t want to deal with the math or physics aspect of it too much. As someone who hates most natural sciences, I liked it a lot and learnt a fair amount. The workload was light.

Workload: Summer 1 was very heavy due to 150, summer 2 was chill.


Spring 2020

Courses:

  • 15-122 Principles of Imperative Computation
    • C (well, C0) is hard with no previous exposure, and it takes time for things to start making sense.
    • Lectures were quite boring, although objectively speaking the content is useful especially for someone who hasn’t systematically learnt about data structures like me.
    • Writing contracts and invariants and proving correctness was somewhat interesting of a concept, although it did get annoying at times.
  • 21-241 Matrices and Linear Transformations
    • Not quite interested in linear algebra, but it was tolerable since the content was easier than that of 21-127 and the workload was also lighter.
  • 76-101 Interpretation and Argument
    • Heavier focus on analysis and more involved writing techniques comparing to 76-100.
    • From what I heard, people’s experience in this class varies highly depending on which section they are in, since professors and topics are different. Even within the same section, the professor may have preferences for certain writing styles. (Same thing holds for 76-100)
  • 73-102 Principles of Microeconomics
    • I thought I was interested in economics until I took this course - it’s not the course’s problem though. It’s fairly easy, and my professor (James Best) was humorous and explained things well. Quite some overlap with AP Microeconomics.
  • 99-251 Seminar for Supplemental Instruction
    • Back then, to become a Supplemental Instruction/Excel leader, one needs to take this training course. Not sure if it’s still the case after the academic development department was restructured.
    • Practices some basics of teaching for collaborative learning, supporting academic development and stuff. I just treated it as break from schoolwork.
  • ! 98-182 (Student Taught Courses) Billiard Games: From Noob to Pro
    • Very fun and I enjoyed a lot. Pretty unfortunate that in-person practice was disrupted because of the pandemic.

Other Commitments:

  • CMU Overwatch team

Workload: light until the end of semester where I lost motivation to study because of the pandemic

Reflections: Anxiety hit me hard since the start of the pandemic in China, since my parents were there. Later in the semester I stopped playing for the Overwatch team because I couldn’t handle anything intense or competitive.


Fall 2019

Courses:

  • 21-127 Concepts of Mathematics
    • Covers the fundamentals of discrete math, including logic, proof techniques, basic set theory and number theory, etc. I’m not really a math person, but I found the content decently structured and well taught, and useful in many future courses.
    • The course is heavily proof-based. First 1/3rd of the course gave me a rough time because I wasn’t very good at writing rigorous proofs, but it got much easier once I got a hang of it.
  • 36-202 Methods for Statistics and Data Science
    • I wasn’t yet into data science at that time, but definitely found the content more engaging than AP statistics. A very easy course that covers quite some important fundamentals of statistics and provides a little R exposure.
  • 76-100 Reading and Writing in an Academic Context
    • As an international student, if I didn’t want to take it I would need to pass the placement test to skip it, but I didn’t. In hindsight, it might be a bad idea because I don’t think I learnt anything new from it, although it did help me brush up on my writing.
    • Most of the lower-stake assignments centered around basic writing skills, such as writing synthesis, presenting arguments, etc.
  • 66-106 Quantitative Social Science Scholars First Year Seminar
    • Covers the basics of social science research with quite some R exposure - some overlap with 202. Moderate amount of reading and lectures are discussion-based.
    • The seminar was also a good chance to know other peers in the QSSS program.

Other Commitments:

  • CMU Overwatch team

Workload: Very light - I spent most of my free time playing games and socializing.


Reflections

Teaching Experience

Sophomore Year: SI Leader for 21-241 Matrices and Linear Transformations

  • Supplemental Instruction is one of the supplementary learning resouces offered by the Academic Success Center. Being an SI leader usually involves developing your own weekly teaching materials (e.g. practice problems), which is not always an experience one can get from being a TA.

Junior & Senior Year: TA for 15-210 Parallel and Sequential Data Structures and Algorithms

  • TAing 210 helped me gain a deeper understanding in its content and appreciate (some part of) if more. That, plus the skill of explaining algorithmic ideas and of communicating with non-experts, have had long-lasting positive effects on me and my career.
  • I would highly recommend gaining some teaching experience during one’s time at CMU. I do think TAing different courses are more beneficial unless you want to undertake course development tasks, even though I didn’t follow this suggestion myself (I sticked to the same class for two years without doing more than teaching).

Academic and Career Choice

College Life