CS152-Programming Languages
Harvard University
Spring 2007
(Professor Ramsey is no longer offering this course)

Time and Place: MWF 11:00-12:00, Maxwell Dworkin G135
Email: cs152@fas.harvard.edu
Home page: http://www.eecs.harvard.edu/~nr/cs152/
Instructor: Norman Ramsey, Maxwell Dworkin 231
(Office hours Monday 2:30–3:30 and Wednesday 2:00–3:00)
Staff Assistant:Hetchen Ehrenfeld, Maxwell Dworkin 133
Teaching Fellow: Paul Govereau, Maxwell Dworkin 309
(Office hours Tuesday and Thursday 1:00–2:00)
Section: Mondays 8:00–9:00PM, Science Center 111


CS 152 is a survey course in programming languages. The goal of the course is to give you intellectual tools that will help you use, evaluate, choose, and design programming languages. You will learn to ask questions about language safety and classification of errors, type systems, formal semantics, abstraction mechanisms for both functions and data, and memory management.

CS 152 provides an introduction to the study of programming languages as an intellectual discipline. The elements of this discipline include specifications based on abstract syntax, lambda calculus, type systems, and dynamic semantics. You must be comfortable with recursion and with basic mathematical ideas and notations for sets, functions, etc.

CS 152 uses the case-study method to give you experience with languages that go beyond the simple imperative paradigm. Case studies will cover languages from the functional, logic, and object-oriented families. Example languages may include Standard ML, Smalltalk, CLU, Scheme, and Prolog.

Case studies are reinforced by suitable programming exercises. CS 152 assumes previous experience programming in imperative languages like C, C++, or Java. Good programming skills are essential, and we assume some knowledge of C. You should plan to complete about a dozen programming assignments over the course of the term. The more interesting or amusing assignments include garbage collectors, Hindley-Milner type inference, and some game-playing programs.

CS 152 is suitable for graduate students, especially those whose primary research interests lie in related fields such as compilers, software systems, or artificial intelligence. Graduate students whose primary interests lie in programming languages may find that CS 152 overemphasizes programming practice and underemphasizes foundations.

Note: CS 152 does not cover implementation of conventional, imperative programming languages, which are covered in CS153 (Programming-Language Compilation).

For more information

You can send in an anonymous course evaluation or suggestion at any time, and you can read what the critics are saying.

Related independent study

CS152 students might be interested in the following opportunities for independent study, many of which are related to topics covered in the course.