University of Virginia, Department of Computer Science
CS655: Programming Languages, Spring 2001

Calendar | Challenges | Lectures | Manifests | Problem Sets | Projects | Resources | Syllabus


Course Description

Programming languages are tools for describing and reasoning about computations. In this course we will explore different kinds of languages for describing computations, and tools for reasoning about the meaning of programs in those languages.

Course meetings: Tuesdays and Thursdays, 12:30-1:45 in Olsson 228E.

Textbook: Harold Abelson and Gerald Jay Sussman. Structure and Interpretation of Computer Programs.

"The Wizard Book" - this book is required and will be used heavily in the first half of the course.
In addition, we will read many research papers. A list of recommended books for background reading is available at

Expected background: Experience programming in several different languages, some compiler experience, at least one theory course. If you are not a graduate student in Computer Science, you must obtain permission from the teacher to take this course.

Teacher: David Evans
phone x2-2218 (office), (804) 825-1362 (mobile)
officeOlsson, 236A
office hoursMonday 1:30-2:30; Thursdays after class; other times, by email appointment.

Web page: - Check this page frequently for couse announcements. All lectures and assignments will be available on the web.


Since this is a graduate course, all assignments except the registration survey and final exam are optional. You will receive a grade based on how well you convince me you understand the most important material covered in the course.

One way to do that is by doing well on the problem sets. Another way to do that is by producing a quality research paper on a topic relevant to the subject matter of this course. Another way to do that is by doing well on an oral final exam. Another way to do that is by regularly contributing keen insights in the class discussions.

Problem Sets

There will be several problem sets. All will involve thinking. Some will involve programming, some will involve mathematical reasoning, and some will involve writing short essays.


It is important that students read the assigned papers and come to class prepared to discuss them.


Students will conduct a research project. It is hoped that most students will be able design a project that is relevant to the course subject around their thesis research.

Students may work on the project individually or in small groups.

Final Exam

There will be an oral final exam covering the whole course and scheduled near the end of term.

Collaboration Policy

Your fellow students are your best resource. Students are encouraged to discuss readings and problem sets in study groups. On some assignments, students will be required to work with a partner (possibly selected randomly by the teacher).

Students are also encouraged to consult outside experts - many of the authors of papers we read are easily available by email.

Always list the resources you used (students, outside experts, papers, web sites) on your submission.


Grading will be based on how well the student is able to convey a good understanding of the course subject matter. No fixed percentages will be used, but the assignments, class participation, project and final exam all provide opportunities for students to convey their understanding.


The first part of the course introduce tools for understanding the meanings of programs and programming languages. We will focus in particular on the language Scheme, an extremely simple and powerful functional language, and on tools needed to understand the formal semantics of Scheme.

The second part of the course will look at programming paradigms in historical context and develop additional tools for reasoning about languages and programs. We will look at the programming languages Algol60, the most influential of all programming languages; CLU, one of the first and best languages for data abstraction; and Java (if you haven't heard of this one, you should take a different course). Reasoning tools will include axiomatic semantics and denotational semantics.

In addition, we will look at some of the recent research in programming languages. Topics will be influenced by students' interests, but will likely include: proof-carrying code, tuple spaces, and aspect-oriented programming.

See for a detailed and updated lecture schedule.

CS 655 University of Virginia
Department of Computer Science
CS 655: Programming Languages
David Evans