Thoughts on CMU courses (and reflections on my college experience). Inspired by similar pages.
☆ are the courses I personally enjoyed and found fun
! are those I considered (objectively) good or useful
☆☆ are those I personally benefited a lot from and thought were worth taking, on top of the above
Degree: BS in Information Systems + additional major in Computer Science
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, if any, STEM background other than several years of experience in Pascal and a little knowledge of Java (from APCS) and Python.
Table of Contents
- General Thoughts
- Fall 2022
- Summer 2022
- Spring 2022
- Fall 2021
- Summer 2021
- Spring 2021
- Fall 2020
- Summer 2020
- Spring 2020
- Fall 2019
Always prioritize your mental health.
Grades may or may not matter, but under most circumstances it’s meaningless to stress over it too much, and don’t identify yourself with your grades.
I don’t think it’s beneficial to push yourself too hard in terms of course schedule unless you’re a workaholic, a genius, or both.
They say college is a good time to explore your real interest, but I do think one should think about career goals rather sooner than later. I regretted not doing it earlier.
Imposter syndrome is no joke, especially at a school like CMU. Just keep in mind that people always share their achievements more than their failures and struggles.
- ☆ 15-466 Computer Game Programming
- 15-451 Algorithm Design and Analysis
- 17-363 Programming Language Pragmatics
- (TA) 15-210 Parallel and Sequential Data Structures and Algorithms
Workload: schoolwork by itself wasn’t bad, but doing full time job hunt on top of it is quite overwhelming
- I returned to Amplitude for a second internship (backend SWE) on the same team.
- ! 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
- (TA) 15-210 Parallel and Sequential Data Structures and Algorithms
Workload: objectively lighter than the previous semester but the work was more frustrating
Reflections: I spent a lot of time this semester reflecting on the series of choices I made in the past few years in terms of academics, future career, and just life in general, that led me to where I am right now, and identified the gap between who I am and who I want to become. Closing that gap requires non-trivial effort, the exact reasons of which does not fit into the theme of this post, so I won’t go into details here (but maybe in a separate post). Luckily, I am making continuous progress (albeit slowly).
- ☆☆ 15-440 Distributed Systems
- Go is a cool language and it’s been growing on me. It was a bit unintuitive to work with at first, but I appreciated it more over time.
- Interesting course content, covering most fundamental design principles and techniques of distributed systems. But 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. I personally didn’t have a big issue with it, but I also had a good partner which helped.
- Working through the projects was just a huge battle with all sorts of concurrency issues. Read more about them here.
- ☆ 15-459 Quantum Computation
- Took this course purely because I’m interested in the topic and it only discusses the CS and math side of the field, with no physics involved - I’m not really into physics.
- Turned out to be quite a bit harder than I expected - guess I’m just not a theory person. Also, it would have been easier had I taken 251 before it, which is much more crucial of a prerequisite than 210.
- Still really rewarding though (few things feel better than finally understanding why quantum computers can break RSA), and Ryan O’Donnell is very nice and teaches well, so I’m glad I didn’t drop it (even though I ended up with a suboptimal grade).
- 67-262 Database Design and Development
- The first half of the course (SQL basics) was entirely a review for me, so it was pretty boring. The second half talks about transactions, integrity constraints, some database design principles and MongoDB, which was somewhat new, but still too slow paced. Raja is a good and caring professor though.
- ☆ 76-270 Writing for the Professions
- Very flexible topic choice for all the projects (except the first one, which is job application materials) and I enjoyed working on (and put a lot of effort in) all of them. Would have benefited from the course even more had I taken it in my sophomore year.
- (TA) 15-210 Parallel and Sequential Data Structures and Algorithms
- I originally wanted to TA 15-213, but Charlie asked me if I was interested in TAing 210, so here I am.
- I enjoyed teaching students algorithms and problem solving techniques, but not so much debugging their code (I guess it’s lucky that I didn’t end up TAing 213).
- Received pretty good feedbacks and was also able to gain a much deeper understanding on the course content myself. Overall rewarding experience.
Major: Finished CS minor and decided to further get a double major.
Workload: heavy during the first half, manageable in general
Reflections: I am still mad about the IS department not letting me take 67-272 and 67-373 together next semester, despite my strong academic standing and proposal to take another CS class before that, which is definitely enough preparation for 373. So I cannot graduate in three years because of this one course, which is slightly unfortunate (ironically the IS department always says they pride themselves in the flexibility of their program). Therefore I made up my mind to get a double major in CS.
This was also a semester with multiple big changes in life. Starting therapy at CaPS definitely helped me manage my anxiety better when facing many uncertainties.
- I interned remotely at Amplitude as a backend software engineer, and was surprised by how much I grew during my 12 weeks there. At the beginning, I relied a lot on my mentor; being uncertain about the quality of my work, I would consult her about everything big or small. But I quickly realized that I could figure out most things on my own and often notice details that others have overlooked, so I became more confident in my abilities and that formed a virtuous cycle.
- I ended up finishing my internship projects a lot faster than expected. Around the same time I discovered a bug in production where a feature was optimized incorrectly, which resulted in wrong computation of data, so I took on this 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 another internship for a few reasons. First, I liked the culture there and my team was especially nice and fun to work with, which I value a lot. Also, I felt like I could (and did) make an impact, because regardless of seniority, people were supportive and valued my opinions. For example, I got to work with our Chief Architect and several other senior members for the hackathon project and made important contributions. Lastly, the company was quickly expanding at that time, launching new products and preparing to go public, so there would be a lot of opportunities for me to learn new things while leveraging my existing knowledge to reduce onboarding overhead.
- ☆☆ 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.
Major: Transferred into information systems.
Reflections: A semester where things magically started getting better. I received an ideal internship offer on the first day of the Chinese New Year, so throughout the semester I didn’t have to worry about much outside of school work. Getting into IS did mean I could no longer graduate early though.
- ! 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.
Major: Still in stats ML, but applied to transfer to information systems.
Workload: pretty heavy during the first half due to projects, slightly better after I had some exposure
Reflections: I finally thought about my career path seriously, and leaned toward software development rather than data science as I used to, despite having zero development experience. Hence, I started working on various web projects and applying to SWE internships, although with no luck (applied to 70+ places, got three OAs, failed all of them). Later in the semester I decided to transfer to IS since it aligned with my career goal better.
- (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 pretty heavy, summer 2 was chill
Reflections: Worst semester in terms of mental status, resulting in many decisions that I later regretted. This plus how painful 150 turned out to be discouraged me from transferring to SCS. So I was on track to graduate in 2.5 years, but that also pressured me to immediately think about my career goal, which was stressful.
- 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.
- CMU Overwatch team
Major: Declared statistics and machine learning because I wanted to do data science related work.
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.
- 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.
- 15-112 Fundamentals of Programming (Dropped)
- I didn’t need to take it, but I was worried that my programming fundamentals was not solid - I barely remembered anything from APCS.
- Dropped it five weeks into the semester because the course annoyed me more than it benefited.
- CMU Overwatch team
Major: DC undeclared, leaning towards statistics by the end of the semester. Due to various reasons, was also considering transferring to SCS.
Workload: light once 127 clicked
Reflections: In hindsight, I should have just taken 15-122 and 76-101 this semester. But the transition from high school to college in another country turned out to be harder than I expected, so I don’t completely regret not pushing myself harder.