Final Projects

Project Guidelines

Students are expected to select and complete a substantial course project during the semester on a topic related to the class.

Projects should be done in groups of two (though individual or three-person projects may be discussed on a case-by-case basis). The expectations will naturally depend on the number of group members.

The first step is to submit a project proposal. The proposal should explain what you expect to learn from the project (i.e., why is it interesting to you?) and should include a work schedule. Make sure to budget time for writing a short project paper (~5 pages) describing the project and for preparing a short (~15-20 minutes, depends on number of projects) project presentation during the last week of classes. The project proposal should be one or two pages long. The main purpose of the proposal is for me to give you feedback on its feasibility.

The main goal of the project is to allow you to customize the content of the course to your own interests. The goal is not to force you all to produce novel results in one semester. Course projects like this often lead to collaborations that eventually yield exciting research. In the hopefully-likely event that you end up enjoying your project, come see me about taking it further (say, to publication).

Project Scale

I do not expect each project to lead to novel results, though I hope some projects will lead to publication!

Project Kinds

If you want to do an implementation or theory project, and you are not yet sufficiently familiar with the area of the project, you should start with a brief survey and then turn it into a research project. While research is necessarily open-ended, be sure that you have a well-defined goal for the end of the semester so that you have something to write up and present.

Survey Projects

Pick an area in which you are interested. Read at least six papers thoroughly and at least six other papers "superficially". I will help, but you should do most of the work in finding the relevant papers. Then, write a paper on what you have learned:

Keep the scope narrow enough so that you can say something interesting. Please do not pick an area that already has good survey papers available (or be sure to provide evidence to me that your survey will be different in some way).

Implementation Projects

Pick a fragment of a language or a relevant algorithm, and implement it! There is no firm limit on the amount of code.

An implementation project should feature "numbers": controlled, experimental results that help to sway your audience in favor of a point you are making.

Your implementation must be relevant to language design or analysis. It could also be relevant to language implementation, provided that it has sufficient conceptual content and is close enough to the course.

Theory Projects

Theoretical projects are similar in spirit to implementation projects, except that they deliver a system of formal definitions and proofs rather than a collection of source code. Rather than evaluate the system empirically, using "numbers", theory projects are evaluated based on what they prove.

The Status Update

The Status Update is a short write-up (less than one page). It should explain what you have done so far and how you plan to meet your goals in the final month of the project.

The Presentation

The presentation should be short (roughly 8-10 min, depending on the time constraints) and should describe what the problem was, what the difficulties were, and what was accomplished or learned. You will find it much easier to prepare the talk using slides that follow a concrete, simple, motivating example.

While preparing the talk keep in mind who your audience is. You will be presenting to colleagues who are eager to find out (1) about new exciting facets of programming languages and (2) how much fun you had. Plan to motivate the project (i.e., why is this important?) and to describe what you learned from it. Keep in mind that your colleagues have not read all the papers that you have read to do the project.

The Paper

Your write up at the end of the semester should be in the form of a short research paper. The project paper should have an abstract and an introduction describing the tackled problem, its motivation, and a very brief summary of the accomplishment.

The body of your paper should describe in some detail what you did to address the introduced and motivated problem. Before concluding, give a survey of related work from recent programming languages literature. The paper should end with a conclusion putting in perspective the accomplishment of the project and mentioning the open problems. Finally, the paper should include a bibliography of cited papers.

You should write your project paper as if you were submitting it to a top-tier programming langauges conferences. You might want to browse the papers from the following conferences to get a sense of these articles:

I strongly encourage you to skim some papers from the proceedings above. Reading through a collection of these papers will give you a sense of how PL papers tend to look, and also may help you to find a topic for your project.

Your project paper should be 5-10 pages, as necessary. You will turn in a PDF as well as your sources. You will want to use the LaTeX class file or Word template produced by SIGPLAN.