Class Notes: Term Project Preview
This week we will discuss the term project, so that
you can get started on the hardest part -- deciding what
you will do! Some things to consider:
- This semester we will announce a scaffolded project description which will be the default for completing the term project requirements. (Imagine something with a list of features for you to implement one-by-one, like Tetris but with a little less detail.) If you are concerned about your grade and/or you do not have a project idea that you are very passionate about, this is probably the most straightforward least-stress option. However, if you are willing to take a riskier path, you may choose to design your own project instead.
- Regardless of whether you take the scaffolded or self-directed path, you will have a TA mentor who will check in with you periodically and can provide high-level guidance on the direction of your project. However, bear in mind that we cannot provide extensive debugging or technical help. Your project will be written by you, and you'll need to be largely self-sufficient in doing this, though we will of course provide advice and feedback along the way.
- If you wish to opt in to creating a project of your own design, start thinking about your term project now! You can do most anything you wish so long as it clearly
demonstrates your programming skills.
- Review the Term Project Gallery!!!
- You can make almost
anything, so long as it follows the rules below, has
a rich interactive user experience,
and at least one interesting algorithmic aspect to the solution. Also note that your idea does not have to be new, so if you want to recreate something that already exists, that's perfectly fine.
- If you are going to invest the energy necessary to design your own project, you should choose something you enjoy, something you care
about, something you can be proud of,
something that can help you both
academically and professionally.
- Aim just a bit beyond what you think you'll be able to create. It's easier to prune an overly-large
project idea than to grow an overly-small project idea.
- Focus both on user experience and on algorithmic sophistication, as both factor heavily in your tp grade.
- In any case, avoid mini-games. Make one big lovely project
instead of gluing together a bunch of smaller ones.
- Also, avoid generative art or music.
While these are somewhat popular projects
historically, they rarely result in successful outcomes and so should be avoided. It is very
hard for us to grade a generative art or music
project precisely, since they are so deeply subjective.
Plus, they don't really have much of a user experience
in most cases, and we put great value on a rich
interactive user experience.
If you have an idea for a highly interactive project with a generative art component, this may be ok, but you should email your idea to Mike or one of your TAs to check whether it will be an appropriate term project. Also, as we will discuss,
projects involving sound (such as rhythm games or voice changers)
are generally disallowed because of their extreme difficulty, reliance on modules, and very high risk of failure.
- We do not recommend using external modules/libraries/tech. Using these does not add algorithmic complexity to your project, and we will only grade based on original code you produced. You can make a lovely term project
and earn a very high grade using nothing more than what
is in the course notes. By default, you may not use any of these things until you have reached MVP
status (i.e. a minimal passing project) and thus you must be able to reach MVP without it.
If you wish to ignore our advice and use external tech before MVP, you will need to demo its full extent
and receive approval no later than TP0 (keep reading, and we'll release more details soon).
- All projects must be built using cmu_graphics and must adhere to MVC.
(This means you cannot build your project using pygame, tkinter, etc.)
Once your project has reached MVP, you may use other animation/app frameworks
with your TP mentor's approval, though this is rarely a good idea. This
restriction was created due to the 90% fail rate of projects that began
in other frameworks like pygame.
- Without explicit permission from Mike (which is unlikely if you haven't already discussed your project with him), you cannot
use any robots or other hardware in
your term projects. The one exception is that you may
try to use game controllers as input devices if you
are so inclined, so
long as all of your code runs entirely on your laptop
(and not on an external device) and in Python.
- Also, based on hard lessons learned by previous 112 students,
some modules are explicitly disallowed until after you reach
MVP (Minimum Viable Product/Project):
- Disallowed until after MVP:
- All graphics and animations except cmu_graphics including:
tkinter,
kivy, pygame, blender, opengl, panda3d, vpython,... (note that this includes code / widgets that you may find online like text boxes, etc. Even if we allowed these, you would receive more points by creating these yourself, from scratch.)
- Complex ML and AI modules, including:
pytorch, tensorflow, keras, ...
- Multiple threads, processes, or computers
(so no webapps, cloud apps, server-based apps,
sockets, ...)
- pyaudio, aubio, pydub, pygame
- Any language except Python.
- You may do a tech demo (more details to come soon) to seek approval for the following modules:
- numpy, scipy, matplotlib, pandas, openpyxl, scikitlearn, nltk, biopython
- opencv, openpose
- requests, beautifulsoup, selenium
- sqllite (and other sql and no-sql database modules)
- cloud API's (twitter, ibm watson, twilio, ...)
- Other Modules:
For any module not on either list above, please
ask on piazza or at faculty OH if it is allowed
before MVP (with tech demo) or disallowed until after MVP.
- Have fun!