Project

The project is an open-ended software development experience. Think of it as an activity that takes place instead of a final exam and that requires corresponding intensity. There will be four milestones in the project: Charter, Alpha, Beta, and Release. In the Charter phase you will form a team and propose the system you plan to build. In the remaining phases you will build out and evaluate some part of of your system, write a brief report on your progress toward your final goal, and submit your code for evaluation.

Deadlines

Requirements

The primary educational objective of this project is for you to gain experience with programming langauge ideas, either in a theoretical or application context. Potential projects include:

Size: If you are doing an implementation-oriented project and working in OCaml, you should aim for several hundred to a few thousands lines of code. If you are doing a theoretical project, expect to submit a 5-10 page technical report containing any formalization and proofs.

Source control: You are required to use Git to manage your source code. You are welcome to make your work on this project public.

Teams

You are welcome to do the project solo or with a partner. However, if you have a partner, both members of the team must contribute to the project.

Grading

The project is worth 25% of the final grade, and will be broken down as follows:

Why is the Final phase worth so much more than the Alpha and Beta phases? It’s not because you should do five times the work all at the end: it’s because we don’t want any initial stumbles to have too great of an impact. We encourage you to work at a consistent pace throughout the project.

Charter

Your task in this milestone is to form a team and decide what you want to build. There is only one deliverable: the project proposal. You may also include an optional team expectations agreement.

Team Formation

Proposal

Submit a short (1-2 page) document containing the following information:

Team Expectations

Teamwork isn’t always easy. But when teams work and communicate well, the benefits more than compensate for the difficulties. One way to improve the chances that a team will work well is to agree beforehand on expectations. If you are working with a partner, we recommend creating a Team Expectations Agreement. On a single sheet of paper, put your names and list the rules and expectations you agree as a team to adopt. We suggest that you start with this:

Feel free to modify as you wish. Make your expectations fairly thorough without being unrealistic. For example, “We will each solve every part of the assignment completely before we get together” or “We will get 100% on every assignment” are probably unrealistic. You might want to reference the section below on “Teamwork and Roles” as part of your expectations. There is no need to upload this agreement to CMS, although you’re free to include it in your charter if you like.

Alpha

Your task in this milestone is to complete a first coding sprint. That is, you should build some functionality, test it, submit your source code and a progress report, as well as a brief blog post, as described below.

Coding Sprint

For this Alpha phase, your technical goals can be extremely modest. However, you should aim to get some functionality running. In most cases, this will typically consist of an initial implementation of some piece of the overall system that has been prototyped, plus some tests for validation. If you are pursuing a language implementation, you could “subset” the system by building just one piece (e.g., ASTs, type checker, interpreter), or by considering only some of the constructs in the language (e.g., basic expressions but no top-level declarations yet). In any case, the key thing is to have something that runs.

You should submit your code as a Zip file named prototype.zip on CMS, and include instructions for how to build and run your code in a README file.

Progress Report

You’ll put together a self-evaluation of your progress at the end of the Alpha phase by writing a brief progress report. Your report should be approximately one or maybe two pages long. It should contain the following information:

You should submit your progress report as a PDF named report.pdf on CMS.

Blog Post

We’re also asking you to put together a brief blog post for the whole class to read. This post can be as short as a few hundred words. It should be written for a general audience familiar with CS 4110-style material. You may include accompanying graphics if helpful. Your blog post should cover:

You should format your blog post in Jekyll-flavored Markdown and submit a Zip file named blog.zip on CMS that contains a file alpha.md with your blog post, along with any other supporting files (e.g., images).

Rubric

The Alpha phase will be graded as follows:

Beta

Your task in this milestone is to complete a second coding sprint. That is, you should build some additional functionality, test it, submit your source code and a progress report, as well as a blog post, as described below.

Coding Sprint

For this Beta phase, your technical goals can still be modest, but you should have some significant functionality running. Typically you would have enough done to be able to demonstrate the main features of your project.

You should submit your code as a Zip file named prototype.zip on CMS, and include instructions for how to build and run your code in a README file.

Progress Report

You’ll put together a self-evaluation of your progress at the end of the Beta phase by writing another brief progress report. Your report should be approximately one or maybe two pages long. It should contain the same information as for the Alpha phase. You should submit your progress report as a PDF named report.pdf on CMS.

Blog Post

We’re also asking you to put together another blog post for the whole class to read. Now that your project is more mature, the post should aim to be more thorough than for the Alpha phase. Again, it should be written for a general audience familiar with CS 4110-style material. You may include accompanying graphics if helpful. Your blog post should cover:

You should format your blog post in Jekyll-flavored Markdown and submit a Zip file named blog.zip on CMS that contains a file beta.md with your blog post, along with any other supporting files (e.g., images).

Rubric

The Beta phase will be graded as follows:

Note that the blog post is worth slightly more in this phase, and the report is worth slightly less.

Peer Feedback

Your task here to provide feedback to two of your peers on their projects, based on their Beta blog posts. You’ll receive a CSV file on CMS with two NetIDs, as well as an alternate.

If one of the two NetIDs is a close friend or your project partner, please use the alternative. If more than one of the NetIDS is a close friend or your project partner, contact the instructor for a different assignment.

To find the blog posts, navigate to

https://www.cs.cornell.edu/courses/cs4110/2020fa/blog/<netid>

where you replace <netid> with a specific NetID. You’ll need to authenticate with your NetID.

Your feedback should be structured as a simple ASCII text file with the following sections.

It’s totally fine to be brief – e.g., giving 2-3 sentences for each section is fine, and you can provide a bulleted list rather than complete paragraphs. The main goal here is to convey helpful feedback.

Please keep the tone of your feedback positive and constructive, especially when it comes to suggestions. Keep in mind that the blog posts describe works-in-progress. Not all projects will be far along as others at this phase. Your goal here is to provide helpful assistance, not critical evaluation.

Please email your feedback to <netid>@cornell.edu, again replacing <netid> with a specific NetID. Note that in the case of group projects, just one NetID is listed in the CSV. The expectation is that this person will forward the feedback along to their partner.

Finally, upload your two feedback files to CMS for grading. Everyone who submits feedback as described above will receive full credit.

Final

Your task in this final milestone is to finish your project. You’ll complete any required coding, documentation, and testing, and write a brief report. Your sumbission must provide a README file that describes how to build and run your code.

Report

You’ll put together a self-evaluation of your progress at the end of the Beta phase by writing another brief progress report. Your report should be approximately one or maybe two pages long. It should contain the same information as for the Alpha and Beta phases. Instead of “Goals for next phase” please identify some possible next steps for this project, were you to continue it. You should submit your progress report as a PDF named report.pdf on CMS.

Demo

Design a demo for your system and put together clear instructions for how to run it. The demo does not need to be sophisticated (but it should be more than just running unit tests). It’s fine to have both positive and negative examples (e.g., here’s a program that does not pass the type checker). However, the demo should illustrate the main features of your system. Make sure that all required inputs are provided, including any interactive input from the user.

Rubric

The Final phase will be graded as follows:


Acknowledgment: The structure of this document is adapted from the CS 3110 project. The list of sample team expectations above is from the University of Waterloo Centre for Teaching Excellence, citing Levin and Kent (2001).