  I present a new approach to teaching a graduate-level programming languages
course focused on using systems programming ideas and languages like
WebAssembly and Rust to motivate PL theory. Drawing on students' prior
experience with low-level languages, the course shows how type systems and PL
theory are used to avoid tricky real-world errors that students encounter in
practice. I reflect on the curricular design and lessons learned from two years
of teaching at Stanford, showing that integrating systems ideas can provide
students a more grounded and enjoyable education in programming languages. The
curriculum, course notes, and assignments are freely available:
http://cs242.stanford.edu/f18/
