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:

  1. 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.

  2. Default Project
    We encourage you to complete a project of your own design. However, we will provide at least one 'default project' idea for those if you with difficulty choosing, and this default project may have some additional scaffolding to give you a more secure path to a working project. Note, however, that there is no grade advantage to doing one or the other. All projects will be graded on the same criteria, and the default project is not meant to be 'easy.' We recommend the default option if:
    • You are finding it too difficult to come up with or choose an idea of your own
    • You wish to choose a project with a clear sequence of features to implement
    • Note that the default project will be likely to earn a grade in the B-range if completed well. You may be able to increase your grade a little bit if you add some substantial additional features, but you are not likely to earn an A with this route.
    We will aim to announce what the default option is on Monday of week 4.

  3. TA Resources
    During week 6, we will focus more resources on TP office hours, Ed, and other opportunities for you to receive guidance from the TAs. That being said, be aware that this is your project, it should demonstrate your abilities, and thus the TAs will mostly provide advice, and will not provide much technical assistance. You will need to do the planning, writing, and debugging primarily by yourself. Also, if you use material from beyond the course (for example, external modules, fancy algorithms, etc.) you should expect that we may not know your specific tech well enough to help you get unstuck. Plan the scope of your project accordingly.

  4. 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, and most semesters feature more time to work on your projects, so some projects in the gallery would not be a good idea to pursue this summer.

  5. TP Scope
    You can make almost anything, so long as:
    1. Your project has a rich, cogent, interactive user experience, and
    2. Your project includes a substantial and coherent body of Python code (which will be primarily what we grade)
    3. 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.
    • The code that we grade must be code that is new to you, written specifically for this term project since the first day of class. You can recreate something that already exists, but it cannot simply be a clone of something you have done before. Basically, something substantial about your project needs to 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.

  6. Notes about using Fancy Stuff...
    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 code 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 (for example) your own game logic may earn more points than using a sophisticated existing AI engine, even if an existing tool might "work better."
    • 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:
    • Mini-Games
      Do not make a bunch of weakly-glued-together mini-games. Make one big lovely project instead of gluing together a bunch of smaller ones.
    • Generative Art or Music
      Unless there is a richly interactive component, 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
      By default, your project must be built using an unmodified cmu_graphics framework and must adhere to MVC. This means under normal circumstances you cannot build your project using pygame, tkinter, kivy, panda3d, unity, blender, vpython, etc. There are two exceptions:
      • If it is actually impossible to do your project in cmu_graphics, and you can convince Prof. Taylor that your project is still appropriate for the class, you may be granted a rare exception. You must receive this approval before 7/16, without exception.
      • If you build your project in cmu_graphics first, you may then port it to a different framework if-and-only-if Prof. Taylor confirms that you have a safe project to fall back on if your attempts with the new framework fail.


    Finally, please be aware that projects in the following categories are exceptionally difficult, without necessarily yielding a higher grade:
    • 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!

  7. Expected Effort
    You should expect to put at least 10 hours of efficient, focused effort into this project.

  8. Citation
    You must 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 may result in a significantly lower grade, and in the worst offenses will lead to an Academic Integrity Violation if we believe you are claiming originality of code that you did not author yourself.
    Note that this means you should cite any code you take from AI. You may use some amount of code generated by AI (because a large portion of the class would ignore the rule if we banned it, and then we'd have to fail an unpleasantly large number of students) but you must cite it clearly, and you should be aware that we will be grading you based on your contributions, not what comes out of AI or a website or a tutorial or your friend etc.

  9. TP Advice
    Here are a few suggestions to help you have the best TP experience:

    1. Follow Your Passion
      The best, most satisfying, most enjoyable projects nearly always start with something you enjoy, something you care about.

    2. Aim High (but not too 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. We are here to help, so don't fear being a bit ambitious! That being said, remember that we only have a few weeks left, and only one week explicitly dedicated to the term project. External modules and new algorithms often carry hidden obstacles that may slow you down or halt your progress, so you should start early if you feel you must use these. (However, you do not need to use anything beyond what you have learned in the class.)

    3. 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.

    4. 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.

    5. Backup Frequently (even daily)
      At some point soon, we will provide instructions on how you must document your effort on your term project, so that we know you have been building your project gradually and thoughtfully. In the meantime, though, 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.

    6. 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!