So far, we've written quite a number of small programs in C and C++ to get a handle on the languages and be able to make meaningful comparisons with other languages that we know already.
For the rest of the semester, you will work in groups of 2 (or 3) towards a substantial C++ project of your own design. "What" the project is is not really important, other than it being interesting and fun for you so that you are motivated to work hard until the end of the semester.
Alphas and projects are not required to run on eniac. Ideally they should (it makes them easier to grade), but it is not strictly necessary.Here is an overview of the due dates and milestones for this project. See the individual sections below for more details on what is required for each milestone.
Deliverables: Submit your project proposal as a PDF or using the text submission via Canvas. Only one member per group needs to submit a proposal.
Feedback on the feasibility and scope of your project will be given via Canvas. You should share the feedback on your proposal with the rest of your group.
As laid out in your proposal, you should have some part of your project started by now. It does not have to be finished, or even functional or runnable, but you should have some small part of the project done by now. This checkpoint is here to make sure that you do not get a bad grade on the project due to starting it too late! Please do not procrastinate too much!
Deliverables: Submit your alpha version as a zip file via Canvas. Only one group member needs to submit an alpha version. We will provide feedback on your current status via Canvas. Please share this feedback with your group!
During the last class period, your group will present your project to the class. Your presentation shold cover (1) a general overview of your project, (2) a brief summary of your project's code design, and (3) a live demonstration of your project that exhibits both functionality and completeness of the promised components. Make sure that in your presentation you clearly demonstrate all of the components that were promised in the original project proposal document. If one of the components could not be completed, make sure to explain why.
The summary of your project's code design should highlight any interesting pieces of C++ code that you used in your project, including templates, inheritance, or any other advanced features. Show us the coolest parts of your code!
Deliverables: Presentations should last TBD minutes, and all group members should speak. We will be cutting your group off if you run overtime, so a practice run would be a good idea! Be prepared to present from a group member's laptop. If this isn't feasible, for any reason, let me know in advance.
You will want to start by dividing up parts of the project among the group members. Of course, there will be overlap and a need for all the parts to work together, but many programs have independent parts that can be developed in parallel. If each member has a specific task to complete, everyone will get more done.
When you start coding, it is strongly recommended to start with core functionality over gloss. The project deadlines can arrive quickly, and you want to make sure that the interesting parts are done. I have seen students spend a week or more just collecting artwork for a game; don't make this mistake.
As a further piece of advice, plan out regular meetings (recommended weekly at minimum) with your partner. You will get more done and have fewer bugs than if you both work separately and just communicate via email.
Continue to ask questions on Piazza! Because everyone is working on a separate project, you can be a little more detailed with your questions. Take advantage of this!
Deliverables: Submit a zip file of your project code via Canvas. Only one group member needs to submit for the final project. The same guidelines apply as always. You must submit a Makefile, and should NOT be submitting extra files (.o, ~, etc.). You are also required to submit a README.txt file, as detailed in the project requirements at the top of the page.