CS 3520/6520: Programming Languages
Fall 2019   TTh 12:25-1:45   WEB 1230
Matthew Flatt (mflatt@cs.utah.edu), Instructor
Yuwei Wang (ywang@cs.utah.edu), TA
Zhengyang Liu (liuz@cs.utah.edu), TA
Kurt Bruns (kurt.bruns@utah.edu), TA
For help, reach all TAs and instructor at cs3520@racket-lang.org
Schedule/Homework Page


Learn programming ideas that will help you understand programming languages and become a better programmer. Write interpreters using Plait, which is a dialect 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 Plait language, which is a dialect of Racket. Naturally, no experience with Plait or Racket is assumed.

All lectures for the course are presented online in video form. In 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 last fall.

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 edition.

Course Schedule and Homework

Schedule/Homework Page

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

Homework assignments are also attached to the schedule page. 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 7.3 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 a regular office hour, but students are encouraged to send e-mail to the instructor to schedule an appointment for other times.

Monday1:15pm-3:00pm  WEB L130 Zhengyang & Kurt
Tuesday2:00pm-4:00pm  WEB L130 Yuwei
Wednesday1:00pm-3:00pm  WEB L130 Kurt & Zhengyang
Thursday9:30am-10:30am  MEB 3256 Matthew (email to make sure)
Thursday2:00pm-4:00pm  WEB L130 Yuwei

Grading, Cooperation, and Cheating

Homework is graded on the following scale: check+ = 100% for perfect or nearly perfect work, check = 80% for somewhat flawed but acceptable work, check- = 50% for seriously flawed work, 0 = 0% for missing or completely unacceptable work, and check++ = 110% for perfect work plus extra credit (when specifically offered). All homework assignments are weighted equally.

Exams are graded on a scale of 0 to 100 points.

A final assignment will be similar to a homework assignment, but larger, and the handin process will be a meeting with the instructor. The final assignment serves much the same role as a final exam.

Final grades will be calculated by combining homework and exam grades as follows:

Homework 55%
Mid-term 1 15%
Mid-term 2 15%
Final assignment 15%

Late policy: Homework submissions will be accepted up to 48 hours after the deadline. For each student, up to two late homework submissons will be accepted without penalty. After a student's first two late submissions, a late submission within 24 hours of the deadline will be penalized 25%. A submission more than 24 hours late but less than 48 hours late will be penalized 50%.

Collaboration policy:

Working with others on assignments is a good way to learn the material and we encourage it. However, there are limits to the degree of cooperation that we will permit.

When working on programming assignments, you must work only with others whose understanding of the material is approximately equal to yours. In this situation, working together to find a good approach for solving a programming problem is cooperation; listening while someone dictates a solution is cheating. You must limit collaboration to a high-level discussion of solution strategies, and stop short of actually writing down a group answer. Anything that you hand in, whether it is a written problem or a computer program, must be written in your own words. If you base your solution on any other written solution, you are cheating.

When taking a quiz or exam, you must work completely independently of everyone else. Any collaboration here, of course, is cheating.

We do not distinguish between cheaters who copy other's work and cheaters who allow their work to be copied.

If you cheat, you will be given an E in the course and referred to the University Student Behavior Committee. If you have any questions about what constitutes cheating, please ask.

For information on withdrawing from courses, appealing grades, and more, see the college’s academic guidelines.

For information on repeating a class, co-requirements, academic misconduct, and more, see the department’s policies and guidelines.

For information on campus safety, see the university’s statement.

The University of Utah conforms to all standards of the Americans with Disabilities Act (ADA). If you wish to qualify for exemptions under this act, notify the Center for Disabled Students Services, 160 Union.
Last update: Friday, September 13th, 2019