Project 4: Final Project
CS112 culminates in a final project. This project is to be completed over the last weeks of the semester, and can be done either solo or in pairs. The goal is to demonstrate your understanding of the concepts we’ve learned over the semester and to have some fun exploring a computer-science project of your choice!
The most important thing is that your project should be something that you care about or enjoy working on. We have provided a few suggestions, but you can also do a project of your choice. We want to help you design a project that makes you happy.
Do you enjoy baking? Try a project that makes baking easier or more fun. If you like music, you could try a project related to music. Maybe you like gaming…you could implement a (SHORT) text-based game; in fact we’ve considered assigning that as a project before!
Task: Explore your interests and come up with a project idea that you would enjoy working on! If you’re having trouble coming up with an idea, feel free to reach out to the course staff for help. Get started early; the sooner you start sketching an idea, the further you’ll get with your project.
Timeline
- Project Group Formation due Nov 12th
- Submit here
- If you’re working in a pair, only one person per group has to submit
- Project due end of day Dec 10th (Tuesday)
- You will hand in your code and tests.
- You will also hand in a README describing your project and the structure of your code.
- Project presentations will be on Dec 13th and Dec 14th
- If you need to present by Zoom, that’s OK. We don’t want you to remain on-campus for longer than you need to (especially since that might lead to increased travel costs and so on). But you should be prepared to demo either way.
Project deliverables
You should submit all code files that you wrote for your project, as well as any test files you wrote, along with a README. The README should present a brief summary of your project. We will use your README as a guide to understand your code.
The README should not be long. Write at least 2 sentences for each segment, but do not write more than 2 paragraphs for any of them. It should include the following sections:
- Goal: This section should describe, in your own words, the goal of your project. What are you trying to accomplish? This section can include things you wanted to do but weren’t able to complete.
- Implementation: This section should describe the actual implementation of your project. What design decisions did you make? What data structures did you use? What functions, classes, and methods did you develop, and what were they for?
- Results: This section should describe the results of your hard work. Did you accomplish all of your goals? Feel free to include any measurements you did, example program inputs and outputs, or screenshots. This is also the place to tell us about testing: how did you ensure that your code is correct?
Project Presentation
We will do project presentations in person or over Zoom. Doing a presentation is mandatory, and is one of the main ways your project will be evaluated. The presentations will be informal (i.e., don’t make slides!); you will just be walking through your project with Tim (and possibly one or more TAs). All group members should be prepared to answer questions about any aspect of the project. Presentations will be scheduled in 20 minute slots, but should only take 15 minutes; the other 5 minutes is for Tim to take notes, send follow-up questions, and so on.
Project Ideas
Note: We really encourage you to work on something that you care about. So think of a project that you would enjoy working on!
But in case you’re having trouble coming up with an idea, we’re here to help! We have come up with a number of suggested project templates. You can implement one of these ideas as written, implement a modified version, or work on some other project of your choice. Regardless, we recommend looking over the suggestions to get a sense of how to scope your project.
We’ve included a suggested group size range for each project. We expect more from larger groups.
- Project 1 extensions:
- A novel dataset (1 to 2 people): Use your classifier from project 1 with a new dataset of your choosing (one from another class, or collected via a web API). The bulk of this project will likely consist of reformatting the data so that you can use it with your classifier.
- Testing project 1 (1 to 2 people): In Project 1 you built a genre classifier, but didn’t evaluate its effectiveness. For classifiers like the one you built in Project 1, a standard way to evaluate accuracy is to divide your data into a “training set” and a “test set.” Instead of computing your tf-idf model from all of your data, you’d compute it from a subset of your data–say, 80% of the songs; this is called the training set. You’d then measure its accuracy on the remaining 20% of songs; this is the test set. You’d need to calculate how often it identifies the correct answer, and compare your results against a reasonable baseline (say, always guessing the most common genre).
- Project 2 extensions:
- Local temperatures (2 people): In the Project 2 climate simulation, each country’s temperature was a simple function of the total carbon in the atmosphere. For this project, you could add a second type of pollution that affects polluting countries more than other countries. You’d need to track each country’s emissions separately and calculate each country’s temperature based on both the global carbon total and the local and global totals of this new molecule. You should implement a new policy or two that interacts sensibly with this new molecule. Take advantage of polymorphism!
- Project 3 extensions:
- Scraping a different site (1-2 people): In project 3, you extract data from the BDR. Choose another site with interesting data that’s otherwise difficult to access and write a program to extract those data. Depending on the complexity of the site, this project could be appropriate for different group sizes; a group of three students could consider combining data scraped from multiple websites.
- Something Completely Different: Do you have a dataset that can be represented as a tree, maybe from your other coursework or independent research? Could you simulate some natural phenomenon in code? Do you have a hobby that could benefit from a particular computer program? We highly encourage final projects related to your own interests – if it involves writing a program to solve a problem, it’s probably a great project!
Content by Doug Woos, Tim Nelson, Robert Lewis, Ben Ryjikov, Ashley Chung, and Annabelle Gao. Special Thanks to Doug Woos and Kathi Fisler for designing previous iterations of this project.