Project

Recall the academic integrity policy: turn in your own work and cite all sources.

“Creative” (A Light in the Attic),
by Shel Silverstein

Design and implement something fun and functional using Haskell and your newfound advanced programming skills.

Will you break free from the creative confines of Wordle? Maybe, maybe not. Either way, be creative!

You may work in groups of either one or two students. Groups of two should propose and implement projects that befit the effort of two people rather than one.

Successful projects may incorporate many flavors. You might take ideas from a previous programming assignment and extend them in a substantial way. You might read up on and incorporate optional or more advanced topics in your implementation — for example, parser combinators, Traversable, monad transformers, generalized algebraic datatypes, zippers, lenses, mutable state, and much more.

See the discussion board for additional suggestions about project ideas, libraries, etc.

Milestones

The project is worth 15% (~2 homeworks), factored into three milestones. Late days cannot be used for any milestone.

Project details announced Week 4
Milestone Points Due
1 Proposal 3 Fri Nov 10 11pm CT Week 7
2 Progress report 2 Fri Dec 1 11pm CT Week 9
3 Final submission, report, and presentation 10 Thu Dec 7 11pm CT Week 10

Part 1: Proposal

Write a proposal that describes your concept and what you hope to accomplish. The proposal should be roughly a few paragraphs in length, written in a file called proposal.{txt,html,pdf}.

Consider organizing your goals into “easy”, “medium”, and “challenge” categories or milestones. Plan how your project might take a variety of forms, depending on how the work progresses.

Consider also what additional topics, beyond those already covered in the course, you might need to carry out your concept. Which of these will you be able to learn on your own, given the scope and timing constraints of the project? What resources have you found that will help you? Would some of these topics require attention dedicated in class and/or office hours?

Feel free to discuss potential ideas with each other, in groups in class or through (either public or private) posts on Ed. As with all your work, document any direct sources of inspiration, either from conversations or other resources such as the internet.

We expect to give a thumbs-up to the vast majority, if not all, proposals that describe a concept involving code and artwork of roughly the same magnitude as one or two homeworks. We will provide feedback and suggestions — and perhaps any required adjustments — within a few days, so that you can get started soon after.

Part 2: Progress report

The purpose of this milestone is to encourage steady and significant progress toward your final submission. Submit work-in-progress code you have developed. If you would like, you may also include any documentation or a preliminary report (called progress.{txt,html,pdf}).

Part 3: Final sketch, report, and presentation

The final submission will consist of your implementation and a written report submitted to your respository, followed by a presentation. Deadline for final project submissions is Thu Dec 7 11pm CT.

Code

Where appropriate, your implementation should employ functional programming concepts that we have practiced during the course. Organize and comment your code. Follow the style guidelines hinted at by any editors or tools you use.

Report

Write a brief report.{txt,html,pdf} file that describes your project, adapting from proposal.* and progress.* as appropriate. Provide a high-level overview of how the code is organized — for example, which file is which? where do the different pieces of code live and what do they do? — and how to view, experience, or interact with your project.

We would like to collect some of the projects you create and share them, for example, on the course website. If you would like your project to be posted publicly, please say so in the public-release.md file in the starter repo and indicate the string (name) you would like to be displayed with your project.

Presentation

Afterwards, you will give a brief presentation, roughly 5 minutes, to the course staff, followed by a few minutes for questions, discussion, and hoorays. You may choose whether or not to open the presentation to classmates.

Together, your presentation and report will introduce us to your concept and implementation, before we assess and grade the project.

We will schedule several presentation sessions during finals week divided into 10-minute slots. The times and a signup sheet will follow.

You will have the choice to:

  1. Present and answer questions live over Zoom,

  2. Pre-record your presentation for us to watch (during your slot) and then answer questions live over Zoom; or

  3. Pre-record your presentation for us to watch (during your slot) and then answer questions asynchronously by email or Ed.

Either way, I’d recommend that you practice your presentation; time zooms when you’re “at the podium.” But if you choose to pre-record, don’t worry about adding polish or making it fancy — just record what you might otherwise say if presenting live.