Skip to content

Welcome to CS 538!

This is an advanced undergraduate-level course covering the theory and design of programming languages. This course will introduce students to two real-world languages at the cutting edge of programming language design: Haskell and Rust. Through hands-on experience, students will learn about functional, imperative, and concurrent features common across many modern programming languages. In parallel, the course will also introduce ideas from the theory of programming languages by developing mathematical, core versions of the main languages. By studying these simplified languages, we will address questions like: How can we describe a programming language? How can we specify the behavior of programs? How can we ensure that programs don't go wrong?


  • Course: CS 538, Spring 2019
  • Location: CS 1325
  • Time: Tuesdays and Thursdays, 4:00-5:15


  • Canvas: We will be using Canvas for all assignments and grades.
  • Piazza: Please post all questions on the course Piazza instead of sending email.

Course Staff

  • Instructor: Justin Hsu

    • Email:
    • Office hours: Wednesday 5:00-6:30
    • Location: CS 6379
  • Teaching Assistant: Stephen Lee

    • Email:
    • Office hours: Friday 10:30-12:00
    • Location: CS 5331


  • Who should take this course?

You should, if you want to learn about (a) functional, imperative, and concurrent programming, (b) cutting-edge programming languages and how they try to prevent bugs at compile time, (c) mathematical models of programming languages. You should also be prepared for some struggle when you try to convince the compiler that your program is indeed correct.

  • What are the pre-requisites?

Ideally you will have completed the main sequence (CS 200/300/400) or equivalents, but at a bare minimum you should be familiar with at least one programming language, whether from a previous class or from personal projects. There is minimal overlap between this course and CS 536; you can take the courses in either order, or even in parallel.

  • Will there be programming?

Yes, there will be programming.

  • Will there be math?

We will not be doing any proofs, but there will be mathematical notation and you will learn lots of Greek symbols.