Course Reviews @ CMU
Commentary
As of Spring 2024, check out Ben's reviews.
As of Spring 2023, apparently Fan Pu, myself, and Abi are currently the top 3 Google results for "cmu course reviews". You'll probably get more value out of their course reviews because (1) they write more, and (2) they graduated with newer versions of the CS curriculum. I also link other random CMU students here, who may have more course reviews.
(because someone asked) As far as I recall, the first few people who made course reviews pages were myself, Frank, and Pranav. I couldn't find anything like this back in 2016. For me, I cared a lot about the answer to this question: given your grades in (some set of courses), is (this combination of courses) feasible? That's how I envisioned future CMU students using this, anyway. If you're a current student, I hope you find this page useful. Good luck, and go to office hours!
Reviews
☆: courses that I thought were worth attending CMU for. Roughly speaking, one star means "fundamental shift in mindset" and two stars means "transformative experience". A course without stars might still be good. Opinions are free if you want them, reach out by email.
Semester difficulty ratings: {light, medium, heavy, death} corresponding to {lots of free time, routine, strict routine and some all nighters, regular all nighters}. I generally aim for medium to heavy semesters.
Context: I entered CMU with decent programming background and meh math background. I'm generally better at systems than theory. I strongly prefer reading ahead.
- To elaborate on decent programming background,
- Learned C and Java in high school. Self-taught a bunch of random stuff on top of that.
- Programming projects prior to college included:
- Java: jmonkeyengine acid-base reaction simulator, Swing music player, Swing traffic intersection simulator, sockets-based IRC clone, video processing to extract comics, leJOS NXJ.
- Python: pandas data munging, web scraping, pywin32, simple opencv motion detection, some cybersecurity shenanigans.
- Google Apps Script, VBA: automating various things for work (bookkeeping, preparing legal letters) and for volunteer stuff.
- Simple IDA Pro cracking.
- To elaborate on meh math background,
- I'd never done competition math.
- Generally not much proof-based math, lots of "pattern match and plug in numbers" math.
- So take any assessments of programming and/or math difficulty below accordingly.
Format of (Grade Obtained, Star Rating, Course).
Undergrad
Fall 2016
- P 15-051 Discrete Math Primer
- A 15-122 Principles of Imperative Computation
- A 15-128 Freshman Immigration Course
- A 15-131 Great Practical Ideas for Computer Scientists
- B 15-151 Mathematical Foundations for Computer Science
- A ☆ 21-242 Matrix Theory
- A 76-101 Interpretation and Argument
- P 99-101 Computing @ Carnegie Mellon
Other commitments: desk services (Sat and Sun evenings)
Overall: light
Retrospective:
- I wish I knew what I was doing in college and got started with research this semester. I was never quite as free again.
- I definitely should have gone to office hours more for 151. It took a while to be comfortable being wrong / showing unfinished work.
Spring 2017
- A 15-150 Principles of Functional Programming
- B ☆ 15-251 Great Theoretical Ideas in Computer Science
- A 33-121 Physics I for Science Students
- A 73-100 Principles of Economics
- A 82-115 Beginning Arabic for Oral Communication
Dropped: 21-269
Other commitments: desk services (Sun midnight to noon)
Overall: death before dropping 269, heavy after
Retrospective:
- Working midnight shift in the same semester as 251 is a terrible idea. Though the money was very helpful at the time.
- I wish I took 213 in this semester. I would have been able to take more systems courses if I did.
Fall 2017
- TA 15-122
- B 15-210 Parallel and Sequential Data Structures and Algorithms
- A 15-213 Introduction to Computer Systems
- B 21-268 Multidimensional Calculus
- B 21-373 Algebraic Structures
- A 82-117 Arabic Conversation & Dialect I
- A 82-273 Introduction to Japanese Language and Culture
Dropped: 15-295, 80-180
Overall: death by math
Retrospective:
- I feel like I did not learn anything this semester particularly well because I spread myself too thin.
- 213 is an exception to the above statement, but in some sense I was overprepared for that class (cybersecurity background).
- The arabic and japanese culture classes are fun in general, and if you're looking for geneds, they're pretty decent. I just can't honestly say that they're worth the CMU price tag.
Spring 2018
- TA 15-150
- A 02-261 Quantitative Cell and Molecular Biology Laboratory
- B ☆☆ 15-359 Probability and Computing
- A 15-388 Practical Data Science
- A ☆ 15-440 Distributed Systems
- A 80-180 Nature of Language
- P ☆ 98-317 StuCo: Hype for Types
Other commitments: none
Overall: medium
Retrospective:
- I was probably not the target audience for practical data science (self-studied pandas, had answered reddit questions on it). If you've actually tried munging real datasets before, you'd probably have picked up most of these skills on your own.
- I really enjoyed the randomized algorithms portion of PNC.
- In my opinion, distributed systems is one of those classes that you go back to and appreciate more over time. I see a lot of people complaining about distributed in recent semesters, perhaps the shortened calendar is a factor there. I personally thought it had excellent value to effort ratio.
Fall 2018
- TA 15-150
- A 15-300 Research and Innovation in Computer Science
- B ☆ 15-312 Foundations of Programming Languages
- A ☆☆ 15-354 Computational Discrete Mathematics
- A ☆ 15-445 Database Systems
- A 70-364 Business Law
Dropped: 15-330
Other commitments: database group, Microsoft lounge
Overall: heavy
Retrospective:
- This semester was a little like a fever dream at times. I fell asleep (but somehow continued to take notes) in 312 a lot; not because of the material, I was just tired.
- 312 and 354 were actually kind of nice to take together, because they cover different views on similar material.
- I personally enjoyed taking business law. I am not sure why the class averages were always so low, but that worked in my favor since it was curved.
- 445 is probably the first time that most people will deal with a medium-sized codebase that they didn't write. The code quality this semester was rather bad, but that does accurately reflect what you can expect out there...
Spring 2019
- B ☆ 15-451 Algorithm Design and Analysis
- A 15-591 Independent Study in Computer Science
- A ☆☆ 15-721 Advanced Database Systems
- C 21-355 Principles of Real Analysis I
- P 69-102 Weight Training
- A 70-366 Intellectual Property and E-Commerce
- A 79-387 General Francisco Franco: Fascism and its Legacies in Spain
Other commitments: database group, paper submissions
Overall: heavy, sometimes death
Retrospective:
- Personal issues made an otherwise reasonable semester somewhat rough.
- This seems to be the point where a would-be phd-applicant starts worrying about publications, competitiveness, etc. It certainly was for me.
- The physical education courses are pretty chill, if you have the discipline to show up.
- IP law and business law were somewhat similar.
- I really liked 451 with AG/DW. Both of them are very caring professors and they were willing to entertain my half-baked algorithms question that came up in research.
Fall 2019
- TA 15-445
- A 15-418 Parallel Computer Architecture and Programming
- B 15-455 Undergraduate Complexity Theory
- B ☆☆ 15-857 Analytical Performance Modeling
- A ☆☆ 15-859 Algorithms for Big Data
Dropped: 15-462, 21-301
Other commitments: database group
Overall: death
Retrospective:
- Spent a lot of time trying to clean up BusTub (445's codebase) and help with projects.
- Got a little burnt out TAing this semester. Boundaries are important.
- 418 is a good first or second systems course. It is not so good as a fourth. I wish I took compilers instead.
- 857 is (unsurprisingly) well-taught, though it didn't bring me closer to my goal of actually being able to use this material in real life.
- I really love the material in 859 and I would bet on it being part of the future. Great teaching too. I did find it quite hard, though -- trying to really understand the material consumed most of my life this semester.
- UCT is pretty well-taught too. It would probably have gotten a star if it weren't outshined by the other two courses; it incorporated some newer results in my semester so it isn't just standard Sipser.
- I wish I had the time and/or energy to stick with graphics. CMU graphics is looking very strong in general.
Spring 2020
- A ☆☆ 15-410 Operating System Design and Implementation
- A 15-780 Graduate Artificial Intelligence
- B 21-301 Combinatorics
- A 33-120 Science and Science Fiction
Other commitments: essentially nothing
Overall: heavy
Retrospective:
- COVID-19 happened. Semester went remote halfway.
- OS deserves its pedestal. I think it is excellent as
either a first-course (for the highly motivated and confident) or asa systems capstone (it ties everything together nicely). In recent semesters, I think there have been some issues with feedback latency, so I would no longer recommend it as a first course until that's resolved. - Combinatorics was more interesting than expected. Covered a little spectral graph theory, probabilistic stuff.
PhD
PhD life is very different from undergrad life.
- You take 2 courses whereas in undergrad you'd take 3-5 comparable courses.
- Your courses should all have some aspect of research to them.
- You shouldn't be spending most of your time on classes, but on research instead.
Practically, I find that this means:
- You actually have the time to do the reading.
- You even have the time to take nice notes and really absorb the material.
Incidentally, if you're also a CMU ugrad thinking about CMU CS PhD:
- You generally need to take six courses, of which four must be from different breadth categories.
- You can transfer at most one course from undergrad to PhD.
- That course must not have been used for any requirement whatsoever.
- You must have gotten at least a B.
- So although I took three courses that would count towards the phd (15-857, 15-859, 15-721 by request), in practice I only got to count one (15-721).
- I hear that if you took undergrad AI, you really don't want to be taking grad AI (which is just watered down undergrad AI). I took grad AI as an undergrad to get out of taking it as a PhD student, but there are other courses in the AI category now.
Fall 2020
- No classes
Fall 2021
- B 10-701 Introduction to Machine Learning (PhD)
- A ☆☆ 15-888 Computational Game Solving
Retrospective:
- Back to in-person lectures! (Though I eventually stopped going to 701...)
- I am really glad that I stayed here as a PhD student and therefore got to take 888. Easily one of the best taught courses that I've taken here at CMU, and it definitely has some of the best notes. Assuming that GF is going into academia, I envy his students. TS is also a very solid lecturer. I feel like 888 material deserved to have been covered somewhere in the CMU ugrad CS curriculum, perhaps as a special topic for 451. Way too interesting to not know. Also, their research group just seems overpowered in general? Good stuff.
- 701 is a standard intro ML course. Pretty good professors this semester.
Spring 2021
- A 15-745 Optimizing Compilers for Modern Architectures
- A 15-884 Machine Learning Systems
- S 15-996 Diversity, Equity, and Inclusion in Computer Science and Society (Pilot)
Retrospective:
- Still Zoom lectures, unfortunately.
- 745 is a nice course for learning about dataflow frameworks and traditional compiler passes, but you're probably not going to be doing anything particularly cutting-edge there.
- 884 used to be a UW course before the prof joined CMU. That prof switched from offering 15884 to 10714, I would probably suggest taking that instead.
Spring 2022
- A 15-799 Advanced Topics in Database Systems: Self-Driving Database Systems
Retrospective:
- Comprehensive survey of what you get when you're marketed a "self-driving database" by someone nowadays. Paper reading seminar class.
- I liked the index recommender project (though as a disclaimer, I helped with that). You build a prototype of what people are forming startups / services over today, which feels reasonably real.
- Done with courses!
Fall 2022
- TA 15-445
Retrospective:
- Contrary to my expectations going in, I was very hands-off while TAing this semester. I think this was my most relaxed semester of TAing since 122. Chi revamped the codebase significantly (infrastructure backend too).
- I spent a long time trying to find a good explanation for extendible hashing. I finally wrote up an explanation that I'm happy with.
- I'm still trying to find a better way of remembering wound-wait / wait-die. Some things are just too weirdly named to remember...
Spring 2023
- TA 15-721
Retrospective:
- Wrote a new project from scratch (infrastructure, writeup, autograder, refsol, etc) for probably the last time at CMU. I'm pretty pleased with how it went; feedback was positive and there's a natural progression for extending this project in the future.
- Done with TA requirement! Six semesters, over a thousand students, and more than a hundred hours of OH later, I wonder if I'll ever TA at CMU again. At CMU, PhD students typically do not TA more than necessary. I'm glad this semester went well, I am content to end my TAing career here.