Final Project (100 Points)
Overview
We have covered a wide range of assignments and class exercises spanning 3D design, drawing shapes and fractals, audio processing, image processing and information hiding, particle simulations, maze solvers, and databases. Now it's time to use some inspiration from these assignments to implement your own medium scale project from scratch. Try to pick something that interests you, and be mindful of the grading rubric below. Don't worry too much about intentionally trying to hit all of the goals there, though; if you just start pursuing something you're interested in and it's complex enough, it's very likely you will hit the objectives naturally.
Objectives
- Students will learn to scope out and follow through on a medium sized, open ended project
- Students will practice object oriented design from scratch
- Students will show facility with C++ programming
- Students will learn how to give and receive constructive feedback in a professional setting.
Scoping
One of the biggest challenges will be to appropriately scope out your project under the time constraints. You want to have enough done that it's clear what's interesting about the problem, what's working, and what the future challenges are. In this way, you can think about your efforts this semester as the background work you might do to write a grant. Whatever you do, you don't want to over-engineer and get stuck without anything to show.
To get an idea about scoping, have a look at these excellent videos. Even though they're about video game design, much of the wisdom there applies to scientific projects as well. In sum, you can think about this project as finding a "thin slice" through an idea. You want to slice all the way through from start to finish, even if you have to really simplify some steps.
Documentation
To save time in class, students will be required to make videos summarizing their work. Students may want to talk over a slide show and/or show some live demos of code they wrote. Feel free to upload this video to Microsoft Stream or to Youtube.
A good open source screen capture option for Windows is Captura. For Linux, I use RecordMyDesktop. There is also an option to record directly in Powerpoint while you're narrating the slides, and the final result can be uploaded directly to our Microsoft Stream. Click here for more information.
Once the videos are completed, each student will be randomly assigned 3-4 videos from other students in the course to watch and for which to provide quality critical feedback. In particular, whether positive or negative, your feedback must be both specific and actionable. This feedback will factor into the participation grade.
NOTE: I will of course also be watching each video carefully myself.
No formal writeup will be required for the projects, but students will be expected to submit a brief document summarizing their accomplishments in bullet form, providing a summary of completed code, and providing directions to run the code.
Grading Rubric
Below is how I will score your final submissions
To Receive an A
- Each item required for a grade of B is included
- Classes use information hiding (public/private/protected) and a clear separation between implementation (cpp files) and specification (h files)
- The program runs without memory leaks
To Receive a B
- Each item required for a grade of C is included
- Code is well encapsulated within methods and classes
- Code has been reused where appropriate, using object oriented paradigms
- Code is clean and well-documented
To Receive a C
- Each item required for a grade of D is included
- The program uses at least two different classes in tandem
-
The program uses at least one of:
-
Templates (your own, or classes you use from the standard template library like
vector
andmap
) - Inheritance
- Abstract classes
-
Templates (your own, or classes you use from the standard template library like
To Receive a D
- It is possible to build your program from scratch by using makefiles or cmake, without errors
- The project must be either different from or a significant extension of things we did in class.
- Your program runs to the specification of what we agreed on during the final project proposals