CS10 Final Project Specification
Updates
All updates will be posted here.
- v. 1.00 November 14, 2013 -- Initial release.
- v. 1.01 November 16, 2013 -- Wording fixes.
- v. 1.10 November 18, 2013 -- Added progress report info, Updated Scoring
- v. 1.20 November 24, 2013 -- Add Python as an accepted language.
- v. 1.30 December 3, 2013 -- Info about Write-ups added
The Goal of this Project
This is your chance to show off everything that you have learned this semester in a final project of your choice and design. You can design almost anything you want, using all of your programming knowledge to produce something that is interesting, useful and challenging. Ultimately, you should spend time designing algorithms and writing code, as opposed to developing sprite graphics. Think about the vast amount of knowledge you have gained (and you HAVE learned a lot!) and apply it in a fun way!
You will and your group will work on a two part project. One will be a group portion where you and your teammates will work together and a bigger program. The second part with be an individual portion where you will can extend your group assignment with your own features, or write a new smaller program. Refer to the details for each section below.
Important Dates
- Project Proposal: due November 22, 2013 at 11:55pm via Google Form
- Project Progress Report due November 27, 2013 at 11:55pm via Google Form
- Final Project: due December 6, 2013 at 11:55pm via bSpace
Project Proposal
This document will consist of filling out a form and describing the overarching purpose of your project. Is it a game? A sound-based application? After describing the main purpose, discuss the "scope" of the project - the types of things users will and will not be able to do with it. This can include a basic plot line for a game or movie, a list of options for a utility, and so on. If appropriate, talk about things that you've already done in lab that you may use in your project.
This is generally a non-technical document and should describe big ideas more than the technical details of how it will be done. However, it should also be clear that you have an idea of where to start working on the project. You can submit this form via the link on the class calendar. Although you will be able to tweak your project idea after your proposal has been submitted, the gist of it should stay the same. Make sure that you are happy with your idea since you'll be spending a good bit of time with it.
We are more worried about the content of your proposal than the length of it. Make sure that you give us enough detail to judge the difficulty of your proposed project. In addition, please make sure you include details of everyone who is in your project group.
You will also need to decide in your proposal how each group member will extend the program for the individual portion of this assignment.
Project Progress Report
The progress is due on the date listed on the course website at 11:55PM via Google Form. There will be two (2) assignment submissions. One for the group and one for the individual submission.
Project Submission
The project is due on the date listed on the course website at 11:55PM to bSpace. There will be two (2) assignment submissions. One for the group and one for the individual submission.
GROUP Submission Items:
- Only One (1) person from each group should submit these four (4) files.
- All four of these items should be completed as a group. You may choose to split up work between your group members, but all members should contribute equally to the final product.
- Project File. This is the XML file with all of the code you wrote as a group. It should be named either the title of your project or include your names in the file.
- Summary Write-up. This should be a PDF or plain text file and is described below.
- Video Presentation. This should be a video demonstrating the group portion of your final project. See the video section below for some helpful guidelines.
- “partners.txt”. This is a short plain text file (handily named “partners.txt”) which should include only the names and SID’s of those in your project group. Here is a sample file:
- Bob Belcher: 123456789
- Alice Abernathy: 987654321
INDIVIDUAL Submission Items:
- Every group member must submit these four (4) items.
- Project File. This is your own file which includes all the work you put into the individual portion. If you are making a feature extension to the group portion, make it clear what code is new. This file could be entirely different from (i.e. not based on) your group file, or the group project file plus your individual add-on. Your individual contribution should be different from that of your partners!
- Summary Write-up. This should be a PDF or plain text file and is described below.
- Reflection Write-up. This should be a PDF or plain text file and is described below.
- Video Presentation. This should be a video demonstrating your own portion of the final project. See the video section below for some helpful guidelines.
Basic Project Guidelines
In order to receive full credit, there are a few simple requirements which each part of your project (the group and the individual) must meet. Refer to this list as you complete your project. Don’t worry about length, you should meet the majority of these simply by using common sense. We’ve included the whole list for your convenience.
- Your project can be completed in Snap pr Python.
- You should work in a group of 2 or 3 students. Expectations will be higher for groups of 3 than groups of 2. Your partners may be from any section/lab of CS10.
- Your project should have some redemptive quality such as one of the six broad categories listed below under “Project Ideas”. Redemptive quality can be defined as anything that demonstrates or uses a complex algorithm, attempts to solve an interesting problem, or has educational value.
- Your project must be “G-Rated.” Pretend that your overly-strict mother is watching you work...but not in a creepy way!
- You must have a clear way to run your program. In Snap, that means using the “Green Flag”
- You should use script variables at least once. (Really, we promise you don’t want 100 variables cluttering up the left side of Snap).
- You should appropriately comment your code. See the “Style” section below for some helpful tips!
- Create your own blocks. (Again, you’ll thank us later. We promise. <3)
- Use lists in your project in some way.
- "Style" points will be awarded for nicely structured code. See below for things which may be considered good style.
- Finally, your project should not be trivial for (you or) your group to finish. We expect it to take time, but it should also be an idea which you can accomplish. We’ll help you judge the difficulty of both the individual and the group portions of your project.
Summary Write-up Guidelines
You should answer this questions for both your individual portion and your group portion of the project. You don’t need to write a novel for these questions. The questions you’ve answered in the progress report will be very similar to your individual summary.
- State the area of focus your group chose to explore.
- Describe the purpose of your collaborative (or individual) program and how it relates to your area of focus.
- If you used anything other than Snap, describe what you did.
- Describe how a user runs and interacts with your program. Provide details that allow a novice user to experience the full functionality of your program. This must include sufficient detail for a novice user to perform actions such as clicking on buttons or filling in text boxes. He or she should be able to run your program from beginning to end.
- Demonstrate that your program illustrates abstraction.
- Identify and select a segment (or segments) of code from the program that illustrates the use of abstraction. Upload a pdf document with cut-and-pasted code, either as text or a screenshot.
- Your answer should be no more than one page of code.
- Explain how the selected code illustrates the use of abstraction.
- Explain how the code fits into the overall program you wrote.
- Include supporting visuals and non-textual representations if needed, and upload them as pdfs.
- Demonstrate that your program illustrates a complex algorithm.
- Identify and select a segment or segments of code in the program that illustrates a complex algorithm. Upload a pdf document of cut-and-pasted code, either as text or a screenshot. Your answer should be no more than one page of code.
- Describe the purpose of the selected algorithm and how fits into the overall program you wrote.
- Explain how the selected code implements the algorithm.
- Include supporting visuals and non-textual representations if needed, and upload them as pdfs.
- Explain how your program demonstrates the appropriateness and effectiveness of your chosen language and programming environment by describing your use of programming elements and how they allowed you to manage the complexity of the program.
- Identify and discuss one significant runtime error or bug you encountered while writing the program. Include:
- What was the error or bug?
- What process did you use to discover it?
- What modifications did you make to the code to fix it?
Reflection Write-up Guidelines
This will be a short write-up that describes your experience working in a group.
Describe the collaborative process you used to create your shared program and your collaborative summary. Keep your descriptions at a strategic level (e.g., how you divided the task, roles you each played) rather than an operational level (e.g., dates and lengths of time you met). Answer the following questions:
- How did you share or divide the work, and why did you choose to divide the work in this way?
- How did you coordinate your efforts?
- What worked well, and what did not work well, in your collaboration?
- How did you benefit from working with a partner?
Video Guidelines (and Tips!)
Your group should make a 1 minute video which demonstrates your group project, and each member should make a 1 minute video demonstrating their individual portion of the project. It should be a screen recording showing a working project, and have a little bit of explanation about how it works and what your insanely awesome project does. Upload this file with your submission to bSpace. Remember, we aren’t here to judge the quality of your video, only the code! Have fun and show off your hard work, the more entertaining the video, the better!
Additional tips about capturing the video is here. Feel free to ask any questions on Piazza if you need help.
Complexity Guidelines
Appropriate complexity for this code will revolve around well executed code or an advanced internal algorithm. Needlessly repetitive code or a large number of sprites or sound effects created outside of Snap! will not be considered in determining your project’s complexity for grading. Rather complexity of design, such as how code is organized and used for different sprite and blocks, successful implementation of a difficult programming task, well coded complicated algorithms (such as Dijkstra’s Algorithm, the A* algorithm, and many others) or statistical analysis programs, will all be considered in whether difficulty of the project meets the minimum requirements.
As an example: A simple platformer itself is not complex enough, however a platformer with an interesting and codeable feature, such as a drawable platform feature to solve puzzles, is acceptable. A piano which has keys that can be played is not complex enough. However, a piano which can record the notes and beats at which the piano is played is acceptable (allowing for playback of recorded songs would be even better!). A maze game is not ambitious enough unless it has features such as AI opponents and powerups or a random generator and solver.
If you are working in a group of three, you program should be even more complex, possibly adding in two of these types of elements into your program.
Hopefully, this, combined with input from your TAs in lab will give you an idea of an acceptable complex project. After submitting your proposal the TA will respond with formal feedback on your team’s project idea and whether the idea is under ambitious, over ambitious, or just right. Remember, the idea should be for you to tackle a difficult problem, but one which is within your reach.
Group/individual breakdown:
Since you will have multiple people working on it, the group portion should be more complex than your individual portions. A logical breakdown would be to program the main functionality of your program as a group, and then have each group member add a single feature for their individual portion.
Style
Here are a set of guidelines which are considered good style, and that should be followed in order to obtain style points for the project. Nicely styled code may go far beyond this short list, but following these will lead you in a positive direction. Style isn’t merely being pedantic; good style will keep your thoughts organized and make debugging and building out a project much easier over time.
- A reasonable number of descriptive comments. Comments should explain what a more complex block of code does, not simply how it does it. (Don’t comment everything, but make sure you do comment where it’s helpful!)
- Using Script Variables within blocks and scripts where appropriate and global variables only for items which require global access.
- Avoiding repetitive code. Instead of hardcoding cases, thing about how you could use loops or blocks more effectively
- Following conventions for blocks. (i.e. Predicate blocks should only return True or False)
- Using descriptive and helpful variable or block names. Not only will these help you and your partner, but they will help the readers too.
- Breaking more complex problems into smaller parts. Make simple, but useful blocks and split your code into sections to make the program more readable.
- If you have input from a user, try checking (or “validating,” as it’s called) the answer to make sure it’s a value you expect.
Project Ideas
If you want some suggestions for your project we recommend looking at the below categories. Please remember that projects should not include any gore or violence; all projects must be “G-Rated”. Projects generally fit in one of the following broad categories:
- Any Game With A Purpose such as mentioned in our readings.
- Educational oriented program that aims to be helpful and instructive for its users such as an open heart surgery walk through or a math learning game. (Note: A typing tutor game should be avoided unless you have a specific and exceedingly creative inspiration regarding implementation and design)
- A computer algorithm that plays a game “intelligently” such as an AI for Connect Four.
- This can be any kind of program that takes in inputs and provides some kind of result via internal algorithms such as a graphing calculator or a genetics probability calculator and demonstrator.
- Get in touch with your artistic side by creating a visual or musical program that acts as a medium for user to exercise or practice their creative talents such as a drawing program that saves images and can redraw how they were drawn or a musical instrument trainer.
- Rules are given for a system and then variables can be changed either via random input or user defined input for the program so that it can run a simulation on the elements involved for the user. Such examples include a traffic simulator, a fish tank, or a physics simulator. (Note: a physics simulator is extremely difficult and should only be attempted for a final project with constant monitoring from a TA)
Hardware Projects
If you are interested, we have hardware that you can work with on this project that is compatible with Snap:
Device | Compatibility | Description |
Hummingbird | Snap | Microcontroller with a number of inputs and outputs to help Snap and your program interact with the real world. |
Finch | Snap | Small wheeled robot with different sensors and functions which can be accessed via Snap. |
Please talk to your TA if you are interested in using one of these for your project and they will sign you out for the device. Hardware projects can be incredibly exciting but do be aware that there can be extra difficulty in getting everything to work correctly.
Example Projects
Please don't use another person's project to start creating your own -- we want you to start from scratch. Nevertheless, getting inspiration from other projects, programs, etc. is encouraged. Here are some past CS10 projects that may be good for generating ideas. These were made by past CS10 students as final projects. Please note that the requirements for the project have changed somewhat since previous semesters. Since the project this semester is split up into smaller parts (individual, group), your project is not necessarily expected to be as complex as the ones listed here.
SPEECH SYNTHESIS
http://youtu.be/NosmTTvm3kg?hd=1
SUDOKU 10.0
http://youtu.be/_yAzgt4AGbY?hd=1
SKETCH3D
http://youtu.be/1pKjSIMVysg
MAZE SOLVER
http://youtu.be/z3uP0rNo0aA
GANGSTABOT3000
http://www.youtube.com/watch?v=1Rv6rky4uaI
DANCING 4 DUMMIEZ 2.0
http://www.youtube.com/watch?v=tbSc04pqNlw
Grading Rubric
This is a preliminary (i.e. subject to change) breakdown of how your project will be graded. Each section will be split between your individual portion and the group portion.
| Group | Individual |
Project Proposal | 5 pts |
|
Summary Write-up & Reflections | 5 pts | 5pts |
Meeting Basic Project Guidelines | 10 pts | 10pts |
Style | 2.5 pts | 2.5pts |
Meeting your Goals & Complexity Guidelines | 10 pts | 10pts |
Total | 32.5 pts | 27.5 pts |
Extra Credit Opportunities
We have some ways that you can earn a couple extra points on your project. These are meant to be fun things for you to consider working on, but don’t do them solely for the points! (It may take more time than they are worth in points, but can also be enjoyable).
Social Relevance. A small amount of extra credit will be available for the project if you choose a highly socially relevant topic (education, health, etc). The amount of extra credit will be based on the size of the population impacted and how much they are impacted by your project.
Hardware Usage. If your project effectively uses any of the hardware mentioned above, a small amount of extra credit may be available. Talk to a TA to get some ideas for how to best use the available hardware.
Tips
- Slip days. Remember that you have slip days! At the beginning of the semester, we gave you three slip days for homework and projects. You can use these slip days to work on your projects beyond the deadline, without detriment to your project grade. Using a slip day counts as using a slip day for every member of your group. If one of your members has two slip days and the others have three, then you may only use up to two slip days before one of your members incurs a penalty.
- Comments and good naming. As you work through your project, we ask that you comment your code to make it easier for us to grade, and also to make it easier for any person who wants to know how your code works.
- Saving and backups. Please save copies of your projects frequently. Make sure to export your project as an XML file regularly to have multiple, working backup copies. In particular, if you think that your project is at a stable state, save a non-cloud backup copy, before you make any substantial changes to it. Emailing it to yourself or project partners is a good method of backing up your work. This will allow you to "rollback" to a stable copy of your project if you make a substantial buggy change. Dropbox automatically records all past saved versions of your project.
- Sharing files. Use a service like Dropbox, Box.net, or Google Drive for sharing files with your group. (All are free!) Some even have the advantage of automatically saving previous versions of your files which is definitely handy.
- In-lab project work days. We will have labs devoted to time to work on your project. Make sure all your group members meet at the same time, if possible. (Remember, you may attend any lab section time!) Use the opportunity to get instant feedback from your TA or bounce ideas off of your fellow classmates. Feel free to help others (and get help too!) even from those not in your group.
- Import tools and libraries. Don’t forget to import tools and libraries in Snap! for some useful pre-built blocks. In addition, feel free to use any code you have already made yourself in lab or in homework.
A Final Word of Warning
Getting to design projects of your own can be exciting, and it is very easy to underestimate how long it will take to accomplish a particular goal. Remember although the TAs will be happy to help you bring your idea to life, you won't have lab-like guidelines for making this happen. It may take a lot longer to make your project than you think. That being said, don't hold back if you think you can make something truly grand! We're here to help you realize an idea you love!
CS10: The Beauty and Joy of Computing
Final Project Specification