Project proposal
This is the first step of your final project. You won't need to start working on implementing your project until mid November, but we want to give you plenty of time to work out a good project idea.
Your job now is to come up with a project proposal, a sketch of what you plan to do for the final project. The project itself will be due at the end of the semester, but this proposal will allow you to get feedback about your plans before you get started.
Proposal steps:
Choose a partner
Like the last few homework assignments, you project should be done in pairs.
Having a partner for the project is required. With permission, a group of three people may work together.
Choose a topic
The topic of your project should be something that you and your partner are interested in! And fun! Perhaps you would like to go deeper into one of the topics that we have covered in this course. Perhaps there is different topic that you have studied in a different course and that you would like to try out in Haskell.
Note that your project must have some sort of design element to it: whether it is designing a library, or an embedded language, or a new type class, or an application. Projects that are merely porting an assignment from a freshman or sophomore level course to Haskell are rarely successful. You should aim for a project that will take you and your partner around 3 weeks to complete.
When choosing your application domain, browse this state of the Haskell ecosystem. You should choose a topic where Haskell excels (i.e. marked "Best in Class" or "Mature"). Topics in other domains could lead to frustration and do not give you an opportunity to demonstrate what you have learned this semester. Read the description of "Immature" application domains carefully; some may work for your project, but others may be completely unsuitable. Your project must also connect to the topics that we are covering in class and in an interesting way. You can write C-like code in Haskell, using the IO monad and imperative arrays, but we don't want to see that.
You should do some research to see what libraries are already available and easy for you to use (see Stackage). However, you can use any library that works with GHC 9.4.5, even if it is not distributed with Stackage. If there is already code to do what you want to do, don't despair. It is fine to extend, redesign, rethink, or even redo from scratch an existing library. The only caveat is that you acknowledge all outside code and respect their license agreements.
Based on our experience in the past, we know that some projects don't work very well because they fail to provide enough depth. In particular, we would like you to avoid the following topics:
- Web crawler
- Huffman encoding
- L-systems visualizer
- Graph algorithms
Write a 2-3 page PDF document following this template. You may edit this LaTeX file to generate your proposal.
Submit your document to gradescope. Make sure that you include your name, your githubid, your partner's name and your partner's githubid at the top of the file.
This proposal is worth 10 points of your final project grade. This grade is based on eventual, successful completion. If it ends up that the project you submit is unsuitable, we'll work with you to find a better alternative and give you opportunity to resubmit your proposal for a better score. There is no need to ask us ahead of time whether you have a good project idea; this process is already designed to give you exactly that feedback.
If you are stumped, you and your partner can submit multiple project ideas in your proposal and we can help you select the best one. Or, if you just cannot think of a project, you can write down Haskell and computer science topics that you would like to explore more fully and we can work with you to come up with a concrete project in this space.