CS257-Programming with Concurrency
Fall 2005

Time and Place: WF 2:30-4:00, Maxwell Dworkin 319
Mandatory Section: F 4:00-5:00, Maxwell Dworkin 319
Email: cs257@eecs.harvard.edu
Home page: http://www.eecs.harvard.edu/~nr/cs257/
Instructor: Norman Ramsey, Maxwell Dworkin 231
(Office hours Mon 4:30-5:30pm, Wed 1:30-2:30pm)
Staff Assistant:Hetchen Ehrenfeld, Maxwell Dworkin 133
Teaching Fellow: Geoff Mainland, Maxwell Dworkin 238

Plan of study

CS 257 will study concurrency from a programming-language perspective: design, application, and implementation. Emphasis will be on three kinds of material: We will also venture briefly into theory and applications of concurrent languages.

The syllabus will be approximately as follows:

A new, improved schedule is online.

CS 257 will be run in a seminar format. Participants will meet twice weekly; once for 90 minutes and once for about two hours. Most meetings will be devoted to presentation and discussion of papers chosen from the professional literature, although background lectures will be given from time to time as needed.


Because the course is based on discussion of papers, class participation is paramount. The course will also involve one homework assignment and a substantial final project. The bulk of a student's grade will be based on his or her class participation and on the project.

One homework assignment will be to build a simple application using a concurrent programming language, and one to model an application using a modeling tool.

The project will offer each student broad latitude to tailor a project to his or her own interests; possibilities include a design project, a programming (application) project, an implementation project, a program-analysis project, or a theory project. Oral and written presentations of each project are expected. I hope, at the end of the course, to invite a jury of distinguished visitors to attend a short workshop, in which students will have the opportunity to present their project work.

There will be no examinations.


A student considering 257 should have a background in either systems or languages. Useful background includes synchronization, call stacks, machine instructions, and programming-language semantics. No student is expected to have all of this background: it is sufficient to have grasped material in CS 152 (Programming Languages) or CS 153 (Compilers) or CS 161 (Operating Systems). A student who is interested in the topic but does not have any of these prerequisites may enroll in the course only with the instructor's permission.

Project calendar

The following calendar gives all the deadlines for the project:
Wednesday, November 23
Topic determined. By the end of the day today, we need to reach final agreement in writing (by email) about what you will do as your class project.

Monday, January 9
``Submission draft'' due. You should give us a draft of your project paper. This draft should meet the same standards of clarity and completeness as a draft you would submit to a professional workshop. Unlike a professional submission, however, it need not describe substantial original research. In other words, it needs to be good enough that we can assess what you've done and advise you on your presentation.

This deadline is firm; because I am leaving town the next day, I need printed paper in my hand by 5:00 PM Monday.

Tuesday, January 17
The project workshop. You will have 30 minutes to present the results of your final project. Plan on giving a 25-minute presentation and allowing 5 minutes for questions. At the workshop, you will receive feedback that will be directed both at your presentation and also at revisions you may wish to make in your paper.

You are expected to attend all the talks at the workshop; plan accordingly.

If you have little experience giving presentations, please consult the section on ``How to give a talk'' at my web site.

Friday, January 20
Final paper due. This deadline gives you a few days to make changes based on whatever feedback you will have received at the workshop.

Workshop Schedule

The workshop will take place on Tuesday, January 17, in Maxwell Dworkin 319, from 1:00 to 6:00:
1:00Evan MalloryA Profiler for Newsqueak
1:30Kevin DonnellyTransactional Synchronization
2:00Paul GovereauArrows for Concurrency
3:00Mike HamburgRewriting Concurrent Code into Sequential Code
3:30Phil EzoltRestartable Atomic Sequences for Linux
4:30Adam RobenDesign and Implementation of a Concurrent Window Manager for X11
5:00João DiasVerifying Lock-Free Malloc
5:30Matthew FluetA Monadic Account of First-Class Synchronous Events
6:00 Workshop ends (closed session for jury)