This course surveys the principles of modern programming languages and provides a glimpse of contemporary programming languages research. This is an implementation-heavy course, where you will build typical language-based tools such as interpreters, type-checkers, and type inference algorithms. You will also implement emerging technologies, such as program verifiers and "fancy" type systems. This course satisfies a CS Elective for the CS Major (BS/BA).