CMU 15-112: Fundamentals of Programming and Computer Science
Class Notes: Term Project Assignment
Due: Thu 28-Apr at 4:30pm (no late submissions accepted)

See the Term Project Gallery!
Note: this is a long document. But: you really need to read all of it, very carefully, before starting any of it. You are about to invest serious effort creating the capstone project for this course. You need to take the time to carefully read and understand everything in this document before you get started.
This project is solo, in that every student must do their own independent project. However, unlike other solo assignments, you may be richly collaborative in terms of helping each other, including viewing other students' code to help them debug, openly discussing designs and algorithms, etc. Using resources wisely is an important aspect of this term project. However, you still must conceive and understand your entire design and you must personally write every line of code that you submit for credit.

Also: you may use any materials whatsoever, including source code, designs, images, text, sounds, or anything else, from any sources you may discover. You just need to very clearly cite each such use, so it is very clear what is yours and what is not, and in the latter case where the materials came from. And while you may include external materials, you will be graded solely on your original contributions.

Submit each deliverable of your project as a single zip file in Autolab. Keep it under 10 megabytes. This may require that your submitted version exclude some media that you include in the complete version on your own computer (and you may run the complete version in your grading session). If your project is over 10 megabytes, then in addition to submitting the reduced-size version via Autolab, you must submit the complete version to your mentor by the project deadline in some other manner (Dropbox, flashdrive, etc...).

Term Project

Your task is to design and implement a program of your choosing. You must program in Python unless your chosen task absolutely requires another language for some compelling reason (in this case you must also obtain written instructor permission to pursue such a non-Python project). It may be graphical, text-based, or even file-based. It may be a game, or a math or science application, or a baseball statistics package, or a productivity application (think Word or Excel, only very "lite" versions), or a shell script, or anything else you choose. This is a wide open assignment, and you are expected to be creative in your approach to it.

Also: you may use any materials, including any Python libraries (like vpython or Blender or Panda3d or processing-python-mode for 3d graphics, or PyGame for richer 2d game support, or pyMedia or pyAudio or aubio for multimedia, or numpy and scipy or sympy for scientific computing, etc, etc, etc). You should understand that using such materials requires that you train yourself on their use (presumably through online materials). CA's and instructors will try to assist as we can, but you should expect less direct support if you use libraries that we did not cover in class..

In fact, you may use anything (any code, any graphics, any sounds, anything at all) so long as you very clearly cite precisely where it came from and, if possible, who created it. You will only be graded on the portions of your project that you created entirely on your own, but you are welcome to use other materials as appropriate. Again, just be certain to make it abundantly clear what is yours and what is not.

Note: you may reuse code you have previously written for this course or otherwise, but you must cite yourself in this case and such code will not count towards your project grade (it is the same as using code from any other source). All re-used code must be cited clearly and appropriately, and all code graded for this project must be original code written by you explicitly for this project in this course alone.

You have an extended period to finish this assignment, with no other required assignments during the last 3 weeks. You are expected to invest at least 30 total hours into this project in this time, and it is further expected that your project will clearly reflect the quantity and quality of design and craftsmanship that goes along with that much time on this task. Naturally, most of you will exceed the 30-hour bar, but this is a minimum expectation for passing the term project.

What to submit

You will have 3 weekly deliverables for this term project, each graded separately, the first two counting towards quiz grades rather than directly towards the term project grade, and the last deliverable (#3) determining the entire term project grade. In addition, this semester there is one smaller deliverable as part of hw8 -- even though that is related to the term project, it is factored into the hw8 grade and is not factored into the term project grade.

Grading will generally be done in person with your mentor. Note that some of these deliverables are a bit underspecified here. This is not a design course, per se, and so we do not expect you all to be experts at writing proposals, or storyboards, etc. Just do your best, but be sure to give this serious consideration. We expect a large amount of effort to go into the design of your project, as well as into the actual writeup and presentation. In any case, if you have any questions about what we are looking for here, discuss it with your mentor, since they will be grading you!

Deliverable #1 [grade folded into quiz10 grade]
Due Tue 12-Apr at 8pm

Mandatory TP1 grading meeting
You must meet with your TP mentor to discuss your tp1 deliverable, in any case no later than Tue 12-Apr at 11:59pm. For those of you who are traveling, this meeting may occur via Skype. However, if you cannot do that, then you must submit your tp1 deliverable early and have this meeting prior to the tp1 deadline. In all cases, this meeting must occur by the Tue 12-Apr 11:59pm deadline (which is separate from the tp1 deadline, which is 8pm that same day).

Optional (though strongly recommended) Deliverable Previews
This deliverable includes several items that are technical and complicated, including your proposal, competitive analysis, storyboard, etc. To increase the chances that you are meeting the expected standards for this project, you are strongly encouraged to review these deliverables with your mentor prior to the deadline, perhaps even several times. In particular, you will want to submit multiple drafts of your project proposal to your mentor well ahead of the deadline, and then have numerous discussions on the feasibility and suitability of your proposal during this phase of the project.

Project zip file
Place all the following in a single zip file which you will submit to Autolab. Again, be sure it is under 10 megabytes, omitting or truncating media as required to do so.

Project Proposal
Include a complete and thorough project proposal, clearly defining the problem you intend to solve and a fairly detailed description of how you intend to solve it. In particular, your proposal must list all modules/technologies you plan to use outside of Tkinter.

Technology Demonstrations
For each module/technology you listed in your proposal, you must include a demonstration of your suitable competency with that technology. This demonstration will be done in person at your meeting, but you also need to include in your submission the code artifacts and any other materials required in this regard. Note: anyone who cannot demonstrate mastery of their required technologies by this date will have to modify their term project to no longer use those technologies. Your mentor will determine what "suitable competency" means, but it is not enough to merely run a demo that you downloaded and did not modify in some meaningful way.

Competitive Analysis
This is a written document summarizing your competitive analysis, where you scour the web and find several existing products that are similar to what you propose. You need to use those products and carefully think about them, then list a few features in those products that are especially compelling, that you plan to include in your program. Also, list some anti-features, which are features you do not like in those products and plan to change in your program. Do not just exhaustively list all the features of those apps, since they will have tons of features that are not really relevant to your program. Stick to those few features that are directly relevant to what you are building. This is not a short piece of work. Doing a competitive analysis well will take several hours at least.

Here you should include hand-drawn pictures (do not worry about making them pretty) showing how your app will work from the user's perspective. Using your storyboard, you will walk your mentor through the user experience of your program, and you will do this prior to writing lots of code. This way, your mentor can help you make any necessary adjustments to your design prior to your having a huge investment in a large code base.

Code Artifacts
You must have some code artifacts showing some early work, perhaps not working demos, perhaps some compelling demonstrations of various technologies (not just the default demos that most modules provide, but your own original code, even if based on those demos). In addition, you need to have some code that clearly is attempting to solve some of the core problems you are addressing. This does not require a working demo, but it does require that you must show some very clear progress in that direction. This is at the discretion of your mentor, but for most students, 200-400 lines of decent code would be a minimum amount at this point.

A timesheet
In your top-level project directory, include a file named "timesheet.txt". In this file, keep track of the time you spend on the project. There is no specific time requirement, and more time will not necessarily equate to a higher grade. Again, though, it is expected that you should invest at least 10 hours per week and 30 total hours to obtain a satisfactory grade.

Deliverable #2 [grade folded into quiz10 grade]
Due Wed 20-Apr at 8pm

Mandatory TP2 grading meeting
As with tp1, you must meet with your mentor soon after the TP2 deadline to discuss your TP2 deliverable. This meeting must occur by Thu 21-Apr at 10pm.

Project zip file
Place all the following in a single zip file which you will submit to Autolab.

Previous Files and Updates
Include all the files from the previous deliverable, and also include the file updates1.txt that explicitly calls out any updates you may have made to the documents you submitted in the first deliverable.

Working Demo
At this point, you should have a working demo of your project, approximately at what would be considered a C-level final project. It may be missing features, it may have a less-than-polished user interface, it may have bugs, it may even crash more than desired, but it has to basically work for some reasonable definition of "work". Again, your project must clearly show results consistent with at least 10 hours per week of productive effort, with most students investing more than that.

Code Artifacts
To be clear, it is expected that your working demo include significant code artifacts, with considerable progress beyond your deliverable #1 code artifacts.

A timesheet
See above for details.

Deliverable #3
Due Thu 28-Apr at 4:30pm

The Project Zip File
Submit a single zip file named containing all the files described below except your term project video, which will be handed in separately (as described above).

Project Video
In the file project-video.txt, include the URL of a web-hosted (say, in YouTube) short video (say, 1-to-3 minutes long) demonstrating your project. Do not show every last feature. Instead, show the most important features, the highlights, the parts that are distinctive. You may just use a screen capture utility if you wish, along with a voiceover. Or you may just use a webcam or other video camera (even a decent cell phone camera) and directly video your screen. You do not need expert production value, and in particular you do not have to edit your video (and so you can have pauses, imperfect scene changes, and occasional verbal slips). However, the video should be of sufficient quality, and should clearly demonstrate your project, such that we can use it as part of our grading process (though we will also run your code, and in fact you will also run it for us). We may also place (excerpts from) some videos in a student term project gallery on the course website. Also, critically, your video should meet your own standards so that you could reasonably place it in an online portfolio of your academic work, and submit it to a prospective employer as part of your CV.

Project Source Files and Support Files
Include all your project's .py files, along with all other files (.jpg, .midi, etc) that are required to build and run your project. If you have more media than can fit in 10 megabytes, you will have to omit some of the media. It is far preferable for your program to still run properly, for the most part, without the excluded media in this case. If your project is over 10 megabytes, then in addition to submitting the reduced-size version via Autolab, you must submit the complete version to your mentor by the project deadline in some other manner (Dropbox, flashdrive, etc...).

Project Readme File
Also, include a file named readme.txt that explains at a high level what your project is and how it should be installed and run. If you use any 3rd party libraries, be sure to either include the library in your submission (preferred), or if this is impossible, to include very clear instructions on where and how to download and install the library.

Design Documents
In your top-level project directory, include a directory named "design", and in that directory place all your design documents. At a minimum, this must include a paragraph or two describing the problem you are solving and the general approach your code takes to solve it. After reading this, another programmer (or a CA!) should be able to make sense out of the module or modules you designed and the most important functions they contain. Also, you should discuss your user interface (assuming you have one, as most of you will), explaining not just what your program looks like but why it does so. For example, many of you started your projects by studying similar programs on the web -- you should list those here and explain what was good and bad about those programs and how they influenced your design. You should also include any other supporting design documents you might have (particularly from earlier deliverables), such as storyboards or any other materials you made in the course of designing your project.

A timesheet
In your top-level project directory, include a file named "timesheet.txt". In this file, keep track of the time you spend on the project. There is no specific time requirement, and more time will not necessarily equate to a higher grade. Again, though, it is expected that you should invest at least 30 hours to obtain a passing grade.

How will you be graded?

These are the general grading guidelines we use. However, grading these open-ended term projects is notoriously subjective, and some projects simply will not conform to this rubric, and many others will require some smaller adjustments here and there to the rubric. With all this in mind, we take considerable measures to ensure that we are as fair and consistent as possible in our grading. As such, we will do our best to grade in the spirit of this rubric, while ensuring that works of similar quality, sophistication, and scope result in similar grades, even if those works are extremely distinctive in nature.

Complexity and Sophistication [30 pts]
Projects should show a level of complexity and sophistication in their design, coding, and user experience, all in keeping with your hard-won programming prowess. They should be neither too simplistic nor too complex. They should also be interesting, though we will take a broad view of this.

Robust Operational Program [15 pts]
Your program should work. It should load and run with no exceptions. It should not crash or hang, even in the face of undesired input.

User Interface [15 pts]
To the extent that it is appropriate for your particular project, you should have a polished user interface. For projects without an end user experience, these points will be distributed across the other grading criteria.

Effort [15 pts]
Once again: you are expected to invest at least 30 hours into this project, and it is further expected that your project will clearly reflect the quantity and quality of design and craftsmanship that goes along with that much time on this task.

Design [15 pts]
Your design should include well-chosen functions, data structures, and algorithms, explained in a clear design document as noted above.

Style [5 pts]
Your code should abide by all the style guidelines we have discussed in this course. It should also include complete (but concise) test functions where appropriate!

Presentation [5 pts]
Both your video and your oral presentations should clearly highlight the most interesting and important aspects of your project. And while we do not require expert video production value, your video still should be reasonably well done. For example, the voiceover should be very clear, concise, and easy to understand.

Bonus [0 to 10+ pts]
For extraordinary work, we may award bonus points. Please discuss more ambitious bonus attempts with the instructor prior to investing too much time into them!

Additional Grading Issues:

Mentor CA
Each of you will be assigned a "Mentor CA" for your term project. While every staff member is happy to help you at any time, it is expected that your Mentor CA will provide most of your support and guidance during the course of your term project. Also, your Mentor CA will be grading your term project. You are encouraged to discuss your grade with your Mentor CA during the course of the term project, so you know where you stand and what additional work may be required to improve your grade.

Weekly Meetings
At least once weekly during the course of the project, you shall meet with your Mentor CA, both to review your progress on that week's deliverable, and also to discuss your project in general and keep you moving along efficiently and effectively. Note that your weekly progress will get factored into grades, but grading issues will not be discussed in these meetings.

Missed Meetings
You are expected to attend your scheduled meetings with your Mentor. Of course, if you have a documented medical or other such emergency, we understand. Otherwise, the first time you miss a scheduled meeting, there will be a 2.5% deduction on that week's deliverable, then a 10% additional deduction on each subsequent occurrence.

Receiving Your Grade
The first two deliverables will be graded in informal meetings with your Mentor. The final deliverable will have a more extensive grading process. During the period after the term project due date up to Sunday night, each of you should meet with your Mentor CA for 10 minutes to present your term project and discuss your grade. Sign-ups for these time slots will be handled by email by each Mentor CA. While 10 minutes is not much time, your Mentor CA will have been working closely with you for some time and so should already have a fairly detailed understanding of your project (hence the value of those weekly progress reports). In any case, we'll really need to stick to the schedule, so you should show up at least 5 minutes early, and you should bring your own computer and have your project running and ready for your presentation prior to meeting your Mentor CA! Expect to spend no more than 5 minutes presenting, discussing your overall design and any clever features that you have created, leaving adequate time for your Mentor CA to ask questions! Also, if you do not sign up for in-person grading, or you miss your reservation, then you must reschedule prior to Sunday night, at a time that is convenient for your Mentor, or you will receive 0/100 for your term project grade! To ensure grading consistency, a second Grading CA may attend your presentation. Also, after all the presentations, the 15-112 faculty and staff will meet to discuss edge cases and to further ensure that grades are as uniform as possible across all sections and all graders.

This is meant to be educational but also good fun. Enjoy (and work hard)!!!

carpe diem - carpe diem - carpe diem - carpe diem - carpe diem - carpe diem - carpe diem