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:
- Start Planning Now
Start thinking about what you would like to build for your term project now! You can do almost anything you wish so long as it demonstrates mastery of your core 112 skills.
- Scaffolded Project
Most of you should complete a project of your own design.
However, you may elect the scaffolded project option by the tp1 deadline.
The scaffolded project provides a specific project idea with guidance
on how to structure your project and what features to work on first.
We recommend the scaffolded option if:
- You want a safer route to at least a C on the term project,
and you are ok with not getting an A and perhaps not a B on the project.
- It is possible to get a B on the scaffolded project by adding more complexity
to it.
- It is not likely you would get an A on the scaffolded project.
- TP Mentor
You will be assigned a TP Mentor who will check in with you periodically and can provide high-level guidance on your project. However, bear in mind that we cannot provide extensive debugging or technical help. Your project will be written by you, and you will need to be largely self-sufficient in doing this.
- TP Gallery
Review the Term Project Gallery.
This is a great source of ideas for your project. However, bear in mind
that the term project guidelines vary by semester, so some projects in the gallery
would not qualify according to this semester's guidelines.
- TP Scope
You can make almost anything, so long as:
- Your project has a rich, cogent, interactive user experience, and
- Your project demonstrates a 112-level of sophistication
in code and algorithm design.
To be more precise:
- Your code must demonstrate your mastery of the core 112 material in Python.
- Your code must be new to you. You can recreate something that already exists,
but it cannot be something you have already done. It must be new to you.
Note that the "same feature" can be designed to various levels
of sophistication. For some clear examples of this, see the
TP Guide on Features.
- TP Anti-Scope
You are free to use sophisticated algorithms (such as Minimax, A-Star,
Dijkstra's, Prim's, etc) data structures (such as Graphs, Heaps, etc),
or modules (such as opencv, pyaudio, etc),
but these will not directly improve your project's grade.
While you may receive some credit for using complex materials,
your code and algorithm sophistication will be based chiefly on your
novel contributions, and not on how you use pre-existing materials.
This is not meant to limit you in any way. Some project ideas may require
that you use such materials. Again, feel free to do so. Just be sure to understand
how we will grade such projects. You must include original work with 112-level
sophistication, and your grade will be based chiefly on your novel contributions.
To be clear:
- You can make a lovely term project and earn a stellar grade using nothing more than what is in the course notes.
- Your novel contributions matter more than your use of existing materials.
So your own "AI" may earn more points than using a sophisticated existing
AI engine.
- Simply using existing modules or copy-pasting (and citing!) code from
a tutorial will earn few if any extra points. That said, adapting the
same content in an interesting way would earn a few more points.
Also, the following are disallowed (even after tp2):
- Mini-Games
Do not make mini-games. Make one big lovely project
instead of gluing together a bunch of smaller ones.
- Generative Art or Music
It is impractical for us to grade a generative art or music
project precisely, since they are so deeply subjective.
For this reason, these are disallowed.
- Non-CMU-Graphics Projects
All projects must be built using an unmodified cmu_graphics framework
and must adhere to MVC. This means you cannot build your project
using pygame, tkinter, kivy, panda3d, unity, blender, vpython, etc.
- Non-Python Projects
Your project must written in Python.
- Mobile Apps or Web Apps
You may not write Android or iPhone apps or web apps for this project.
In addition, the following are disallowed until after tp2:
- ML and AI modules
These include pytorch, tensorflow, and keras.
- Multi-process apps using sockets
Sockets are especially challenging to debug, even when using starter
code you might find online.
Finally, these topics are allowed, but be aware that they are
particularly challenging, so if you opt for these, proceed with caution.
Also, to do these projects, you must pass the
Tech Demo by tp0:
- Robots and other hardware
If you do not have hardware experience, you should not choose this option.
Even if you do, experience suggests that this is a difficult path
for a term project.
- "Real Time" apps
Many students who attempt to write "rhythm games" (like Guitar Hero)
are frustrated by how hard it is to properly synchronize audio
with graphics and animations. Proceed with caution!
- Expected Effort
You have an extended period to finish this assignment, with no other required assignments during the last few weeks, and no other major course responsibilities between midterm2 and the final exam. You are expected to invest at least 25 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. Some of you will exceed the 25-hour bar, but this is a minimum expectation for passing the term project.
- Tech Demos (tp0)
If you plan to use any external modules,
you must demonstrate mastery of those materials
in an in-person Tech Demo with your TP Mentor by the tp0 deadline.
If you do not pass the Tech Demo, or if you do not have a Tech Demo,
then you must not use such materials until after the tp2 deadline.
In any case, you are free to use any materials after the tp2 deadline,
so long as your TP Mentor confirms that you are "on track" at that
time (we will explain this more in the Term Project specification).
- Citation
It is absolutely essential that you properly cite any and all non-original
materials you use, including code, images, tutorials, or any other materials
that are not in the course notes. Citations must appear directly in your
Python file where you use the cited material, and must include the URL of the
source material, and must make it very clear what work is entirely yours,
partially yours, or not yours.
Failure to properly cite materials will result in a significantly lower grade,
and in the worst offenses will lead to an Academic Integrity Violation.
- TP Advice
Here are a few suggestions to help you have the best TP experience:
- Follow Your Passion
The best, most satisfying, most enjoyable projects nearly always
start with something you enjoy, something you care about.
- Aim High
The best projects aim just a bit beyond what you think you will be able
to create. Your skills are growing quickly, and you may be surprised at
just how much you can do by semester's end. Besides, it is much easier to
prune an overly-large project idea than to grow an overly-small project idea.
Finally, we are here to help, so don't fear being a bit ambitious!
- Be Incremental
The best projects also are incremental, so that you can safely
build a solid base project and then add increasingly challenging features
as time permits.
- Build Your Portfolio
The best projects also help start or add to a portfolio that can benefit you both
academically and professionally. Countless former students have reported
that their 112 term projects helped them get internships or jobs, or
helped them once on the job.
- Backup Frequently (even daily)
Be sure to frequently backup your code, whether to Google Drive or github
or some other way. It's best to include the date in the folder name of each
backup, so you can easily go back in time if needed.
- Have Fun
Finally, do not stress over this project. You have worked very hard to acquire
solid foundational coding skills. This is your chance to show yourself and the world
what you can do with those hard-won skills. And for most of you, this is the first
large coding project you have designed and built. This is a wonderful
accomplishment! It will come with some challenges, even some bumps along the way.
Don't panic and don't stress as those happen.
As you surely know by now, failure is part of the coding process.
Embrace this reality, and keep your balance.
Have fun, and good luck!