A chronology of the courses I have taken thus far at Carnegie Mellon University.
Inspired by Abigale Kim's and Wan Shen Lim's excellent course reviews.
Disclaimer
My opinions are just that. Take what I say with a grain of salt, and keep in mind, this is from the perspective of someone with prior experience in systems programming. Your mileage may vary.
Spring 2021
- 15-112: Fundamentals of Programming and Computer Science
This semester, I cross-registered in 15-112 at CMU while a student at community college. I later transferred fully to CMU.
Despite coming in with prior experience, this course gave me a rigorous set of fundamentals to draw upon compared with my self-taught background, and provided fun opportunities to work on projects for the course hackathon and the term project.
My term project in particular is memorable, as I made a multiplayer FPS game with a custom 3D graphics engine. Fighting with the performance limitations of Python was very interesting, and I learned a lot working on my project. You can check out my project here!
If you are coming to CMU and unsure whether or not you should take this course, I would say it depends on what you want to do. Starting 122 in your first semester would be a more difficult start, but it would allow you to push further in the CS curriculum, allowing you to take 213 in your freshman year if you like. On the other hand, 112 may give you a stronger foundation.
I will say, the course has also changed a lot since I have taken it, so I can't speak as much for the student experience using the new CS Academy system, for example. I can say that I very much enjoyed having Professor David Kosbie as my instructor—I found him an engaging lecturer and a very inspiring person.
Fall 2021
- 17-214: Principles of Software Construction: Objects, Design, and Concurrency
- 21-127: Concepts of Mathematics
- 33-104: Experimental Physics
- 84-104: Decision Processes in American Political Institutions
Post-transfer to CMU, I had gotten credit out of 15-122 and was able to skip it. To be cautious in my first semester, I took 17-214 with the non-CS version of concepts.
17-214 was a nice experience overall, and it covered design patterns and basic software engineering skills quite well. I think this course was ultimately not very challenging, however, and I would have been better served to take 15-213 directly.
21-127 was my first experience with discrete math—I thought it was quite difficult at the time. I had Professor Garrett Ervin, who has unfortunately moved to Caltech since then—he was a very clear, kind, and understanding lecturer. Looking back, I would have preferred to have taken the CS 15-151, since stronger fundamentals in discrete math would have served me well through the rest of the CS curriculum.
84-104 was an unexpected hit for me—the course is taught by Geoffrey McGovern (whose name is I believe in the Wean stairwell somewhere), and he stands out to me as a very charismatic lecturer, who was clearly having a lot of fun teaching the course. There are many reading assignments, but I found them very interesting. Overall, I would definitely recommend this course.
Spring 2022
- 12-100: Exploring CEE: Infrastructure and Environment in a Changing World
- 15-150: Principles of Functional Programming
- 15-213: Introduction to Computer Systems
- 21-241: Matrices and Linear Transformations
- 98-242: Student Taught Courses (StuCo): Intro to Esoteric Programming Languages
15-150 is surely one of CMU's most iconic courses. I came in with no functional programming experience at all, and leaving it gave me background knowledge that is still useful to this day. I would recommend this course to even non-CS students at CMU who are interested in programming.
15-213 is one of my all time favorite courses at CMU. I thoroughly enjoyed the labs, and I think that the course does a very good job of teaching what it sets out to teach, in a fun and engaging way. For me personally, I feel the workload was lower than 15-150.
98-242 is one of the most fun StuCos I have ever taken (and I have taken many). I highly recommend this course if the thought of learning about and laughing at esoteric programming languages sounds like your idea of a good way to spend a weekday night.
Fall 2022
- 15-210: Parallel and Sequential Data Structures and Algorithms
- 15-251: Great Ideas in Theoretical Computer Science
- 15-330: Introduction to Computer Security
- 98-317: Student Taught Courses (StuCo): Hype for Types
I would generally not recommend taking 15-251 and 15-210 at the same time, unless you find yourself very adept at this sort of content. It was pretty taxing to me and I felt the courses did not play well off of each other, scheduling or content wise.
15-251 was certainly a tricky course, but the quality of the lectures and course materials is very high. Additionally, Ada is an amazing lecturer, and perhaps made the entire course for me.
15-330 was a very nice experience for me! It is a combination of advanced 15-213 attacklab-esque buffer overflow exploits, cipher proofs, and web exploits. The assignments were very fun, I learned a lot, and the workload was relatively light. An example of a well designed course, in my opinion. I had Parno as a lecturer, who was completely excellent.
Spring 2023
- 15-411: Compiler Design
- 15-312: Foundations of Programming Languages
- 15-281: Artificial Intelligence: Representation and Problem Solving
- 79-372: The Rise and Fall of Pittsburgh Steel
- 98-008: Student Taught Courses (StuCo): Intro to Rust Lang
15-411 was a great experience for sure. I was blessed, partner-wise, and so the workload was very manageable and I learned a lot. I will say, I wish that the lecture content was more in-depth—the field of compilers has so much to offer, and I really feel that these lectures only scraped the surface.
15-312 was a surprise hit—one of my all-time favorite classes. It is a complete overview of the field of programming languages, showing how to formally reason about how programming languages are defined (static semantics) and the way they step during execution (dynamic semantics). Bob Harper is an absolute legend and was a complete joy to learn from. A very good friend of mine was a TA at the time, and that likely contributed to my enjoyment. I will say that in my semester, I found the exams significantly more difficult than the homeworks.
79-372 was an interesting class that my roommate randomly proposed that I take with him, and it ended up being very fun. The readings can be a little taxing, but the content is very interesting and I learned a lot from this course. The lecturer was definitely having fun teaching the content, which is always a plus. At the end of the course, he gave us all t-shirts and we got to tour a real steel mill during operation.
Summer 2023
- 21-259: Calculus in Three Dimensions
Fall 2023
- 15-445: Database Systems
- 15-451: Algorithm Design and Analysis
- 85-104: Psychopathology
- 98-341: Student Taught Courses (StuCo): Build Your Own Breadboard Computer
15-445 is an amazing course. Andy Pavlo is one of my favorite lecturers of all time—he really brought the topic to life for me, and his passion for databases, fast and organized lecturing style, and hilarious sense of humor made me look forward to every lecture (the rumors are true—there is a course DJ). Databases are now my favorite field of computer science, thanks to this class.
98-341 was an excellent excuse to build a 6502-based computer on a breadboard. A good friend of mine is the leader of this course, and he was very knowledgeable and did an excellent job supporting the students. Highly recommended, if building a computer on a breadboard sounds fun to you.
15-451 is personally the most difficult class I have taken at CMU. The idea of a course giving you an "algorithmic toolbox" is appealing, and I did learn about interesting algorithms from this class, but the scope and exams are not to be underestimated.
Spring 2024
- 15-410: Operating System Design and Implementation
- 15-721: Advanced Database Systems
- 98-179: Student Taught Courses (StuCo): Introduction to Japanese Mahjong
- 98-374: Student Taught Courses (StuCo): Steep by Steep: Investeagation into Tea Culture
15-410 is entirely deserving of its reputation. Building nearly an entire kernel in a semester obviously requires an immense time investment, and results in several baffling debugging experiences. Through the comprehensiveness of the projects and the amazing quality of the lectures, I definitely feel I got a lot out of the course. Despite this, it is definitely not a course for everyone, and I would recommend most students do not take this course due to the enormous opportunity cost.
15-721 is an excellent continuation of the concepts introduced in 15-445, pushing the discussion started in the last class into areas of active research. Considering the fact that I am currently specializing in the field of database systems, this course is perhaps the most impactful one I have ever taken. The knowledge presented to me in this course has been completely and utterly invaluable. The query optimizer project I picked up as part of this course is also proving to be a fruitful endeavour. If you are interested in database systems, or going beyond what was taught in 445, I cannot recommend this course enough.
Fall 2024
- 15-712: Advanced and Distributed Operating Systems
- 36-218: Probability Theory for Computer Scientists
- 33-120: Science and Science Fiction
If you would like to hear more about my experiences at CMU, feel free to shoot me an email!