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

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

  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, so some projects in the gallery would not qualify according to this semester's guidelines.

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

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

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

  8. 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).

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

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

    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)
      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!