CS 3520/6520: Programming Languages
Fall 2023   MW 11:50-1:10   CTIHB 109
Ben Greenman (blg@cs.utah.edu), Instructor
Matthew Flatt (mflatt@cs.utah.edu), Instructor
Alec Mills, TA
For help, reach all TAs and instructors at help-cs3520@lists.utah.edu
Canvas page course schedule


Learn programming ideas that will help you understand programming languages and become a better programmer. Write interpreters using Shplait, which runs on top of Racket. Watch lecture videos online.

Although CS 3500 is the only course prerequiste for undergraduates, students should have significant programming practice beyond CS 3500 before taking this course.

Why Programming Languages?

This course presents a set of ideas about programming. Most of the ideas count as general programming language concepts; they are such good ideas about programming that they are baked into practically all modern programming languages. Other ideas presented in the course count as functional programming, because they have been emphasized in a certain family languages—althoughs that distinction grows less relevant as programming languages evolve, since good ideas about programming tend to get absorbed into general programming languages and practice.

The course presents those ideas primarily by having you implement interpreters, although you will also implement some type checkers and compilers. Those kinds of programs are particularly well suited to functional programming techniques, which is why the course gives you practice writing functional programs. At the same time, the process of implementing a programming-language construct as part of an interpreter provides a deeper understanding of the concept than merely using the construct in a few programs.

The ideas presented in the course will help students more easily recognize the capabilities of current and future programming languages. The ideas should also help students become better programmers in general. The goal is of the course is not to prepare students to implement new programming languages, although the concepts of the course are certainly a prerequisite for any student who has that goal.

Students taking the course should have significant programming experience already, but no previous experience with functional programming is required; the course will teach those concepts. We will implement interpreters in the Shplait language, which implemented within Racket. Naturally, no experience with Shplait or Racket is assumed.

All lectures for the course are presented online in video form. In (virtual) class, students will present homework solutions and/or work through homework-like problems as a group.

For a detailed list of topics covered by the course, see the schedule for Fall 2020 (but the material there will be adjusted this semester to use Shplait).

Reference Book

No textbook is required, but the course content is derived from the following book:

 Programming Languages: Application and Interpretation, Second Edition
Shriram Krishnamurthi
 Also available as PDF

As an extra resource, you may want to consult the first or third editions.

Course Schedule and Homework

Canvas Page

The course Canvas page contains a tentative schedule in the modules listing, which will be revised throughout the semester. Video lectures, slides, and programs, and solutions to in-class exercises for each lecture will be posted there.

Homework assignments are also posted in Canvas. Homework is typically assigned weekly, and it is usually due the following week, but there will be exceptions. Homework grades and solutions are accessible from the handin-status server.

Programming Environment

We'll use the DrRacket programming environment, version 8.9 or later.


Course Communication

Announcement from the teaching staff will be posted on Canvas.

To ask questions, either contact the teaching staff through Canvas (preferred) or send e-mail.

When asking a question in a place where it makes sense to show your code (i.e., in a direct message to the instructor or a TA):

Office Hours

The TAs will be available at regular hours. The instructor also holds regular office hours, but students are encouraged to send e-mail to an instructor (Ben or Matthew) to schedule an appointment for other times.

Monday 4:00pm-6:00pm MEB 3515 Alec
Tuesday12:00pm-2:00pm MEB 3515 Ben
Wednesday 4:00pm-6:00pm MEB 3515 Alec
Thursday12:00pm-2:00pm MEB 3252 Ben


Last update: Tuesday, October 10th, 2023