CMU Course Reviews

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.