Final Project — Modular Extensibility

The final project is a chance for you to independently explore some aspect of the seminar that you found interesting. You will write a short paper about your project and give a short presentation to share your findings with the rest of the group.


  • 27 June: Proposal — Send to me by email a brief (1–2 paragraph) written proposal for your project. The details of your proposal will be described below.

  • 21 July: Presentation — Give a 12 minute presentation on your project in our seminar meeting. After each presentation we will have 8 minutes of discussion, where you will answer questions about your project from the rest of the group.

  • 28 July: Document — Submit a short written document (~1000 words) summarizing your project and the insights you shared with the group. You are encouraged to incorporate feedback from your presentation.

Project Options

For the final project, you may choose one of two options.

Option 1. Programming Project

If you choose this option, you will apply one or more of the techniques (e.g. languages or design patterns) that you encountered in the seminar to a small programming project of your choosing. The idea is that, by actually using the techniques that you choose, you gain insights that are not obvious from reading alone. The goal is to get to these insights, not to produce a perfect piece of software. The scale of the project should be something that you can do in a weekend or less.

If you choose a technique that was the main focus of one the papers that we discussed, your main contribution should be adding depth to the discussion that we already had. For example, what problems did you encounter that we may have missed? Were you able to devise workarounds for limitations of the technique? Is it more suited for certain kinds of extensions but not others?

If you choose a technique that was only mentioned or cited in the papers we read (or perhaps that we never discussed at all), your main contribution can be adding breadth to our discussion by comparing the technique (e.g. its advantages and limitations) with other techniques that we spent more time on.

A good strategy might be to try implementing your project using two different techniques and comparing the results.

For the programming project option, your proposal should focus on the following details.

  • Scenario — What is the scenario that you want to support? Ideally a scenario involves at least two people (e.g. a library maintainer and a client programmer) and a need for extensibility in at least two dimensions (e.g. adding both new cases and new operations). You should choose something that is not an expression interpreter or a shape language! :-)

  • Techniques — What technique(s) do you plan to use to implement your project?

  • Motivation — What is one thing you hope to learn from the project, or what are your expectations? It’s OK if you end up learning or observing something else, but you should have some reason for choosing the project that you do.

Your presentation and written report should introduce the scenario, describe the techniques that you used, state your goals/expectations, and then describe and present your results, preferably using code examples from your project.

Option 2. Research Project

If you choose this option, you will read, summarize, and compare two additional papers that supplement the main content of the seminar. The idea is to explore some other techniques (e.g. languages or design patterns) for supporting modular extensibility that we didn’t have time to discuss in the seminar.

For the research project option, your proposal should contain the following details:

  • Papers — List the two papers that you plan to read and report on.

  • Motivation — Why did you choose these two papers? What do you hope to learn?

You may choose the two papers however you like. Some good sources are the Further Reading list below the schedule on the course web page, and the “Related Work” sections of the papers we have discussed in the seminar. I recommend you pick two papers that are somehow related since this will probably help you get more out of both of them. A good strategy may be to pick one interesting looking paper first, then choose another paper that references or is referenced by your chosen paper.

Your presentation and document should focus on two things: (1) sharing the most important aspects of the techniques you read about with the group, and (2) comparing these techniques to the techniques we discussed in the seminar.

Help with Choosing a Project

I want you to find a project that is both fun for you, and that contributes to the seminar in an interesting way!

If you would like some help developing a scenario for a programming project, please send me an email with some rough ideas and we can brainstorm. Or, if you would like help choosing papers for a research project, send me an email with some notion of what you’re looking for and I’ll make some recommendations. For example, what paper from the seminar did you like best? What questions do you still have, or what do you want to know more about?