This is the mandatory CMU course review page. Be aware that the following reviews are highly opinionated, your mileage may vary, and course instructor/content may change, so please check with other sources (e.g. Faculty Course Evaluation data) before registering.
Timeline
| Year | Fall | Spring |
|---|---|---|
| 2020-2021 | 15122 18100 | 15251 15252 |
| 2021-2022 | 15150 18220 | 15210 18213 18310 |
| 2022-2023 | 15418 18240 18370 | 15411 18290 18349 |
| 2023-2024 | 18422 18746 | 15445 18525 |
| 2024-2025 | 15605 15814 18726 | 11642 11868 15719 |
ECE Classes
18310: Fundamentals of Semiconductor Devices
310 is a must-take class at CMU, as long as you are an ECE student. Imagine how bad it is to join some silicon initiative by a fruit company, or write matrix multiply computer programs, without understanding how sillicon, pn-junction, and transistor work. And it’s taught by the best professor at CMU! This class is also extremely useful for subsequent digital and analog circuit classes.
18349: Introduction to Embedded Systems
I’m not sure about this one. While it talks about many interesting stuff in ARM architecture, on the other hand, spending one semester learning a bunch of IO standards might not worth your time, and the projects are too easy (maybe <100 LOC?)
18370: Fundamentals of Control
This is a good course if you like control systems. The professor is really nice. And learning about linear control systems sounds helpful to getting into the robotics field.
18422/18622: Digital Integrated Circuit Design
Welcome to the SRAM project! This is the digital IC course at CMU, so you can’t miss it if you want to do hardware. And you’ll get to know the professor and the course mascot.
18525/18725: Advanced Digital Integrated Circuit Design
This is a project course - design your digital/analog IC, a fruit company will pay for your chip tapeout (remember the silicon initiative?) and give you some gift. [This website is not sponsored by any fruit company.]
15746/18746: Storage Systems
This is a software system class (crosslisted as 15746). Course content is pretty interesting (flash, SSD, hard drive, filesystems), and projects (SSD flash translation layer + cloud filesystem) are awesome.
15719/18709: Advanced Cloud Computing
Similar to Storage Systems, this is another software systems class. It mostly talks about things like AWS, Apache Spark, Kubernetes, which feels somewhat boring (my goal is to learn computer science, not coding interviews). Maybe cloud computing itself is a pretty practical field for some specific cloud service providers?
CS Classes
15411/15611: Compiler Design
This course has 15 units. The workload is large, but it is 100% worth your effort. The course project is writing a compiler from (almost) scratch, and 411 goes over everything from frontend to backend. The professor is great, and the course content will be interesting to both systems and programming languages people.
15418/15618: Parallel Computer Architecture and Programming
This class teaches high-level parallel architecture (things above ISA) mostly from a software perspective. It does teach some architecture knowledge (cache coherency) but it’s not a computer architecture class (like 18447). The projects (SIMD, CUDA, MPI) are very interesting and useful for learning the abstracted architecture and doing performance optimization. Just be aware that CUDA has evolved a lot since then and taking this class is really an intro to learning CUDA.
15445/15645: Database Systems
I find the database project a bit disappointing - they give you some starter code that has almost everything working, and only left out a few simple, unimpressive modules for you to implement (such as some random linked list and hash tables). As the result, students don’t get to implement most of the content from lectures, which is not great. Although there is an advanced database course following this one, so there might be something more interesting over there.
15410/15605: Operating System Design and Implementation
I feel like people tend to exaggerate a lot about the workload of this class. It’s a pretty nice class that designs and implements an operating system of your own, which is most of the course. It can be a rare opportunity to learn about operating systems, especially when Windows NT and Linux are popular enough that very few engineers are trying to write a new operating system.
15814: Types and Programming Languages
This class is really cool. It is fantastic to learn about PL and type theory after just programming, so that you know how to design a new programming language in the future. 15814 extends a lot of PL knowledge from computer design so it makes sense to take compiler class first. There’s also a course project that lets you choose between extending a language, proving some PL theorem, or working on your own PL research.