CMU 15-112: Fundamentals of Programming and Computer Science
Class Notes: Term Project Assignment
Due: Fri. 12-Aug at 5pm (No late submissions accepted)


Critical notes:
  1. Description
  2. Schedule
  3. Policies and Rules
  4. Deliverables
  5. Helpful Guides

  1. Term Project Description

    Your task is to design and implement a program of your choosing. Your project may be a game, or a math or science application, or a baseball statistics package, or a productivity application (think Word or Excel, only very "lite" versions), or anything else you choose. This is a wide open assignment, and you are expected to be creative in your approach to it.

    Each of you will be assigned a Mentor TA for your term project. While every staff member is happy to help you at any time, it is expected that your Mentor TA will provide most of your support and guidance during the course of your term project. Also, your Mentor TA will play the largest role in grading your term project. You are required to discuss your project with your Mentor TA during the last week of the semester, so you know where you stand and what additional work may be required to improve your grade.

    There are no other required assignments during the last week. You are expected to invest at least 15 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. Many of you will exceed the 15-hour bar, but this is a minimum expectation for passing the term project.

    The term project is very open-ended, but there are a few restrictions:

    • Note: in addition to the restrictions listed below, due to the compressed nature of the summer, we listed a few additional restrictions in the Term Project Preview document here.

    • You may not use hardware -- that is, not without special permission in an email from Professor Taylor no later than Sunday Aug 7.


    • You must produce an interactive Python application.

    • You may not do mini-games. You should have one reasonably rich and complex application, rather than a collection of smaller, not-so-complex "mini-games". It is fine for you to embed a mini-game or two into your larger application if it really adds to the whole. But you cannot have a collection of mini-games and call that a term project.

    • Generally speaking, you may not use non-built-in modules until you have reached MVP. If you wish to use a non-built-in module before MVP (like numpy or pandas, for instance) you must first meet with Prof. Taylor and pass a tech demo no later than Sunday Aug-7. This meeting is so that we can make it clear that we do not recommend using modules and so that you can convince us that A) you know the external material well enough to avoid getting in trouble, and B) your grade is high enough to withstand a potentially catastrophic term project grade if you spend too much time trying to make a module work and C) that using the module will somehow enable you to do something you couldn't do without it. If you fail the tech demo and insist on using the external material anyway, we will ignore any part of the project that uses the external material while grading (and will likely fail as a result), so do not do this. Remember that some modules like pygame are explicitly forbidden until MVP.

      Note: once your project reaches MVP stage (as measured by your mentor), you may add on any external modules you want. This typically happens around TP2.


  2. Schedule

    Many events happen during Term Project Season! This is your guide to all of them.

    • Wed 3-Aug: TP assignment
      The TP was formally assigned and extensively discussed in lecture.

    • Sat 6-Aug: TP mentors assigned

    • Sun 7-Aug: Initial meeting with TP mentor.
      • You should meet your TP Mentor for 15 minutes to check on your progress, discuss project ideation, design decisions, and your schedule for the coming week.

        You should come with either a basic start on your project or at least some ideas, and maybe a few backups. As of the end of Sunday, you should be committed to your project's basic vision and goals. By this time we hope you will have also made a decent start on the code (at least 100-200 lines) though you are not yet required to submit anything to Autolab.
      • There are no points directly attached to this check-in, but you will receive significant deductions if you are not appropriately communicative and responsive to your TA (see "Required Meetings" below).

      • Tech Demo and Approval for external tech / modules
        If you wish to use any tech outside of Python and what we have covered in the notes (at least, before you reach MVP), then you need to meet with Mike for approval by this date, and ideally before that. Make sure to schedule this with Mike a day or two in advance. Remember, we do not recommend that you use external tech / modules. This includes if you wish to use any other libraries, modules, API's, hardware, and so on. Tech demos are your responsibility, and you only have one chance to pass them. If you do not get approval on or before Sunday, then you will need to restructure your project to work without the tech, at least until you reach MVP. Remember, you must demo the tech in your meeting with Mike, and we will not extend the approval deadline. You have one chance so start now and do not expect approval. But, remember that using tech does not increase your chances of a good grade. It is easier to create a successful term project without additional tech.

        While the specifics of your Tech Demo vary for each student, depending on how you intend to use your tech, in general you must show that you can deftly use the tech as required. For example, for opencv, you might demo that you can track a bright green object that the user is moving around. Then, we may ask you to change the code to track a bright red object, and you would have to be able to do that in the same meeting fairly easily.

        Your tech demo cannot just be example code you found online. Also, you must show your tech working inside of the cmu-112-graphics framework.

    • Mon 8-Aug: TP1
      Meet with your TP Mentor for your TP1 and submit the TP1 deliverable on Autolab. By TP1 you are expected to have finalized the design plan for your project, and you should have created a sizable amount of working code (ideally about 200-300 lines).

    • Tue 9-Aug: Check-In 2
      Touch base with your mentor before 10pm ET to receive feedback on your progress and pacing. Your mentor will let you know if this meeting should be over Zoom, in-person, or email, depending on your progress, and will initiate the scheduling of the meeting (if applicable). There are no points directly attached to this check-in, but you will receive significant deductions if you are not appropriately communicative and responsive to your TA (see "Required Meetings" below).

    • Wed 10-Aug: TP2
      Meet with your TP Mentor for your TP2 checkin and submit the TP2 deliverable on Autolab. By TP2 you should be at a Minimum Viable Project (MVP) stage, with the majority of the project's core code implemented. If you wish to show your in-progress project in Thursday's showcase (which may help your grade and earn you lots of admiration from us and from your fellow students), you will let us know on Wednesday evening. (We'll share details on how to do that through Piazza.)

    • Thu 11-Aug: TP Showcase (in lecture)
      Attend the Term Project Showcase during lecture and watch demos of amazing projects by your fellow students. We expect that most of these projects will be works-in-progress since the final project is not due until Friday, but that's ok! Note: this event is required, but it is also a lot of fun!

    • Thu 11-Aug: Check-In 3
      Touch base with your mentor before 10pm ET to receive feedback on your progress and pacing. Your mentor will let you know if this meeting should be over Zoom, in person, or email, depending on your progress, and will initiate the scheduling of the meeting (if applicable). There are no points directly attached to this check-in, but you will receive significant deductions if you are not appropriately communicative and responsive to your TA (see "Required Meetings" below).

    • Fri 12-Aug: TP3 (Term Projects are Due)
      Submit the TP3 deliverable on Autolab. TP3 should be your completed final project, including a readme file, a video demo, and all other supporting files related to the project.

    • Fri 12-Aug: TP Grading Sessions
      Meet with your TP Mentor for your TP3 live demo. You may only present work that was completed before the TP3 deliverable deadline. Note that the TP3 meeting is very important, as it is where your mentor will decide what your grade should look like. Your mentor will send an email with sign-ups for time slots. We strongly suggest that you be ready 5 minutes early to your time slot, with your computer prepared to give a demonstration, so that none of your time is wasted. Your demonstration should take no more than five minutes so that your mentor has adequate time to ask you questions.
      If you miss your TP3 meeting, not only will you have the standard missed-meeting deduction, but we will grade your project without your input, which will likely result in an even further lowering of your grade.

    • The following week: TP Grading
      We will finalize and release TP grades as quickly as we can. However, finalizing is complicated even in person, and every TA is involved in grading every project to ensure that we are as fair and consistent as possible. We will provide feedback on your term project grade, but our grading process is very robust, so we do not accept regrade requests unless you believe we have completely missed a feature in your project (which is very very rare). Remember also that we automatically and carefully consider every semester grade which lies on an edge between one letter and the next. You will receive a fair and objective grade.

  3. Policies and Rules

    The term project is different from the other assignments and exams in 15-112. Therefore, it has its own special set of policies and rules. Note that the main course policies still apply, unless they are overruled by the policies described here.

    • Required Meetings: All the meetings listed in the schedule above are required. We have added the following additional policies to help everyone make the best decisions and be the most effective:

      • You cannot pass the term project without attending every required TP meeting.
      • All TP-related meetings are required. You need to show up on time, and pay attention the whole time.
      • If you show up late to a meeting, (or if you do not do a required check-in by 10pm) you lose 5% of your score on the next TP deliverable per minute. If you are 5 or more minutes late, this counts as a missed meeting instead. You must schedule a new time to meet as soon as possible.
      • If you miss a meeting (without a seriously good excuse), you must make it up. You will not just lose points, you will fail the term project (worth 20% of your semester grade) if you do not quickly make up missed TP meetings.
      • To be more precise: if you miss a meeting (or fail to set up a required meeting in the first place), you have 18 hours to make it up. You may still lose points for missing the meeting, but those will be limited to that event. After two days, you will incur a direct deduction to your final term project grade. The drop will be 10 points the first time (worth 2% of your semester grade), and will double each subsequent time (so then 20 points, then 40 points, then 80 points). These accumulate, so if you miss 3 meetings without making them up, you will lose 70 points from your final term project grade (1.4 letter grades from your semester average).
      • Under no circumstances can you skip a required TP meeting or fail to do a check-in. If you have truly extenuating circumstances, you must let your TA know in advance, as soon as possible, and you must very quickly make that meeting up. You have to make up all missed TP meetings to pass the project.
      • Note: We hope that nobody loses any points at all on anything. That's not our goal here. Our goal is to keep you positive and engaged and trying hard and meeting success on your term project. We also want to make sure that every minute of our TA's time is spent productively helping you forward.
    • Collaboration: This project is solo, in that every student must do their own independent project. However, unlike other solo assignments, you may be richly collaborative in terms of helping each other, including viewing other students' code to help them debug, openly discussing designs and algorithms, etc. Using resources wisely is an important aspect of this term project. However, you still must conceive and understand your entire design of your project, and you must personally write every line of code that you submit for credit. You should also cite (in detail) any assistance you receive from anyone who is not a current 112 TA or faculty member.

    • Prior Work: You may use code that you've written for past assignments, or code that you've written for projects outside of this course, but you must clearly cite this code as having been written for a different purpose. For a citation example, see here. We will only grade you on code developed specifically for this semester's 112 term project. All un-cited term project code must be completed by you within the current semester. Also, any code from prior 112 assignments or the 112 notes must be cited as such and will not count towards your term project grade.

    • Office Hours and Piazza: Subject to any announced changes on Piazza, Office Hours and Piazza will be at the same times as previous weeks. TAs will still provide help, but they will not know precisely how your term project works, so you will need to be prepared to ask specific questions. We encourage you to rely primarily on your term project mentor for larger strategic questions. Also, as always, it is ultimately your responsibility to debug your code.

    • Online Resources: You may use any materials whatsoever, including source code, designs, images, text, sounds, or anything else, from any sources you may discover online. However, you must very clearly cite each such use, so it is very clear what is yours and what is not, and in the latter case where the materials came from. We will grade you only on your original contributions from this semester, and we will penalize use of external materials without citation. This includes code that you wrote in a prior course, including 112. Note that you must also clearly cite code that comes from the course notes! Non-cited external code will receive (at a minimum) a 15% penalty on TP1, a 25% penalty on TP2, perhaps more depending on the nature of the offense, and will be investigated as potential Academic Integrity Violation cases in TP3. Note that an egregious lack of citation may be considered an academic integrity violation, even on TP1. It must be clear to your mentor which code is purely original, which code is yours but based on external resources, and which is copied. You must cite your sources, always.

    • Submission: You will submit TP1, TP2, and TP3 as zip files on Autolab. If you don't know how to zip a file, learn how here. Please note that Autolab will not accept submissions larger than 10 MB. If your zip file is larger than this, submit the core part of your project to Autolab, at least including all your Python code and your readme file, and submit the rest to your mentor via some standard, reasonably secure file sharing method such as Google Drive.

      Note: if your project requires more than 10 MB, it is your responsibility to submit a 10 MB subset that meets the submission requirements, and to also -- by the same deadline -- to provide your grader with easy access to your full project. We prefer that this be via online file sharing, such as Google Drive.

      We will not accept late submissions in general, which includes late submissions due to misformatted/incorrect materials or finding out too late that your project is larger than 10 MB.

    • Extensions: We also generally do not provide extensions on TP deadlines, and so we do not allow students to submit the deliverables late. This is largely because submitting a deliverable late will leave you with less time for the next one and will only add stress without giving you any additional time. That having been said, if you have a medical or personal/family emergency and absolutely cannot submit on time, email Mike directly to see if an extension can be arranged (but in almost all cases, if you are able to submit at all, it is better to submit the current state of your project even if it is not where you would like it to be). Please note that extensions on TP3 are extremely rare and unlikely (perhaps 1 in 250), as they impair our ability to have the whole staff grade your project fairly, and Friday is the final day of the semester. Barring the most extreme circumstances (typically involving multi-day hospitalization or equally dire circumstances) we will need you to turn in whatever you have for TP3 on time. Fortunately because you have almost a full week to work on this project, a last-minute emergency would still leave you with many days of prior progress.

  4. Deliverables

    You will have 3 deliverables for this term project. TP1 and TP2 will count as a single combined quiz grade (which will show up in Autolab as "tpQuiz"). This is not a traditional quiz, but it will be entered in the quiz category in our gradebook. Typical median grades will be around an 80, so they fit well in this category. Your TP-category grade will be determined solely by TP3, the last deliverable.

    Your mentor will mostly assess your deliverables in person, though they will not assign you a number grade until after consulting with other TAs in the class after the meeting. Each of the deliverables comes with a rubric, but these rubrics are fairly general, as projects vary so widely. In general, we expect a large amount of effort to go into the design, writeup, implementation, and presentation of your project.

    The purpose of the intermediate TP deliverables is to give you feedback, and the grade is part of that. Getting 100 is exceedingly rare, because there is always room for improvement. Just like the quizzes, median grades in the high-B or low-C range are typical, so do not view an 80 as an indicator that you are behind everyone else. If you do not like the grades you receive, however, take the feedback to heart, improve your work habits, and increase your rate of progress. Most students do, as reflected by their typically higher TP3 grade (the one that matters as much as every quiz combined).

    1. Daily check-ins (7-Aug through 12-Aug)
      Starting on Sunday 7-Aug until you submit your project on Friday 12-Aug, you will need to check in with your mentor at least once each day, primarily to give them an update and to receive feedback on your progress and pacing so far. You will meet with your mentor for TP1, TP2, and TP3 (see below) and these meetings can count as your check-in for those days. You will also need to meet with your mentor for your first check-in on Sunday 7-Aug. Depending on your progress, your mentor will let you know whether your check-ins on Tuesday 9-Aug and Thursday 11-Aug will be over Zoom or in person or whether an email update from you will suffice. There are no points directly attached to the Sunday/Tuesday/Thursday check-ins, but you will receive significant deductions for missing a check-in or if you are not appropriately communicative and responsive to your TA. Check-ins should occur before 10pm ET each day unless otherwise specified, and you should arrange the time at least 12 hours in advance with your TA if not sooner.
    2. TP1 (due Mon 8-Aug at 8pm)

      The TP1 deliverable consists of two main components: a design proposal and preliminary code. You should finish these components before meeting with your mentor, so that you can present them to your mentor in full. You can submit all the required files within a single zip file on Autolab, under the TP1 assignment. If your file is larger than 10MB, read here for info on how to submit.

      Note: While there are some detailed requirements for design docs here, we ask that you please keep them very concise. Be thorough, but be brief.

      • Project Plan [20 pts]
        Write up a proposal file (in the file proposal.txt, or .docx, or .pdf) which should include the following components:

        • Project Description [5 pts]: The name of the term project and a short description of what it will be.

        • Structural Plan [5 pts]: A structural plan for how the finalized project will be organized in different functions, files and/or objects.

        • Algorithmic Plan [5 pts]: An algorithmic plan for how you will approach the trickiest part of the project. Be sure to clearly highlight which part(s) of your project are most complex.

        • Version Control Plan [5 pts]: A short description and image demonstrating how you are using version control to back up your code. Notes:
          • You must back up your code somehow!!!
          • Your backups must not be on your computer (ideally, store them in the cloud)
          • Google Drive is a common option, or GitHub if you are comfortable with it.

      • Preliminary Code [80 pts]

        In addition to the design proposal, you should also submit code artifacts showing some early work on the project. This does not need to be a fully-working demo; it should just be a real start towards solving the core problems of your project. For most students, 200-300 lines of decent code would indicate a good start, but this varies depending on your level of organization and complexity. However, we do not grade by line count.
        Your code should reflect your structural plan, and should include function and class headers for any functions or classes you plan to write in the future.

      • TP1 Meeting [0 pts]

        You'll meet with your mentor to check in and demonstrate what you've accomplished so far. If you miss this meeting, you will be penalized 25% of your TP1/TP2 grade, and you still have to make up the missed meeting.

    3. TP2 (due Wed 10-Aug at 8pm)

      Your TP2 deliverable consists of two components: a working demo and updated project plan docs. You should submit all the files in a single zip file to Autolab, this time under TP2. If your file is larger than 10MB, read here for info on how to submit.

      • Working Demo [100 pts]

        At this point, you should have a working demo of your project that meets your project's version of MVP (Minimum Viable Project). This generally requires that the core features of the project should almost all be implemented such that they more or less work. The code may be missing features, it may have a less-than-polished user interface, it may have bugs, it may even crash more often than desired, but it has to basically work for some reasonable definition of "work". Once your mentor confirms that your project has reached MVP status, you are guaranteed to get a Term Project grade of at least a 80% on the code portion of tp3. Note that this confirmation will happen via email after consulting Mike and Emily.

      • TP2 Meeting [0 pts]

        You'll meet with your mentor to check in and demonstrate what you've accomplished so far. If you miss this meeting, you will be penalized 25% of your TP1/TP2 grade, and you still have to make up the missed meeting.

      • Updated Project Plan [0 pts]

        Many students update their plans due to unforeseen problems or new ideas. You must add a new section to your plan, 'TP2 Update'; in this section, you should list any design changes you have made. If you made no changes, simply say so in this section. Keep your old planning work, though you do not need to update these sections directly (a TP2 Update section is sufficient). If you do not add this update section, you will be penalized 5 points.

    4. TP3 (due Fri 12-Aug at 5pm)

      TP3 is your final term project deliverable, and should be your completed term project. The main deliverables are the project codebase and source files, a readme file, a demo video, and your updated design docs. Place all of your files into a single zip file and submit on Autolab, under TP3. If your file is larger than 10MB, read here for info on how to submit. Recalling that TP1 and TP2 count towards a "tp-quiz" in the quiz category, TP3 will be graded as the main Term Project, and constitutes the entire "term project" category.

      • Project Codebase [90 pts]

        The codebase should include all your python files and any other files (images, etc.) required to help your project run. Your project should run robustly, should be algorithmically complex, and should have decent user experience. It is ok if there are some bugs and room for improvement (after all, you only have one week) but it should feel reasonably "finished." It should also have a reasonably well-designed user interface.

        When grading your project code, we also consider effort, as demonstrated to your TP mentor. The term project should take up the majority of your 15-112 time in the last week of the semester. There are no recitations or other assignments in the final week of the summer semester, so we would expect you to invest about 15 productive hours into your project. Spending this time and showing real effort and progress in mentor meetings will factor into your score.

        Note: It is a very good idea to try running your code on another computer! If we can't run your code, we can't grade it. The most common reason for us not being able to run code is either A) missing files that you haven't given us, or B) absolute paths to supporting files, like 'User/mdtaylor/Documents/KimcheeAdventure/CheePic.gif'

      • Readme File [5 pts]

        You must include a new file, readme.txt, which must include the following components:

        • A short description of the project's name and what it does. This may be taken from your design docs.

        • How to run the project. For example, which file the user should run in an editor. If your project uses data/source files, also describe how the user should set those up.

        • Which libraries/modules you're using that need to be installed, if any. If you can include the library in the submission, that is preferred.

        • A list of any shortcut commands that exist. Shortcut commands can be used to demonstrate specific features by skipping forward in a game or loading sample data. They're useful for when you're testing your code too!

        A competent programmer should be able to run your project after reading the readme file, so make sure to include all necessary files in your submission!

      • Project Demo [5 pts]

        There are two parts to the project demo: the video demo and the live demo.

        • Video Demo [2.5 pts]:
          Important Note: since a video that reasonably closely follows our submission specs is essential for our grading purposes, we will not grade any project that does not include a reasonably well-made video. This means that you will receive a 0 without one.

          This should be a 1-3 minute video (and no more than 5 minutes in any case) that captures the main idea of the project. It should show the most important and coolest features of the project, with narration to explain how it works. This demo should not provide a full walkthrough of the whole project, and does not need to cover every single feature; think of it as more of a trailer for the project as a whole. Your video demo should be uploaded to YouTube (or some other video hosting service), and your submission on Autolab should include a file called demo-video.txt that contains a link to the uploaded video.

          The quality of the video and audio does not need to meet any particular standard (as long as it meets your standards such that you'd be happy to include it in your own portfolio). Feel free to use a video camera or a screen capture program to record. As for creating the videos, one approach is to use zoom -- create a meeting just with yourself, share the screen (with sound if you wish), record the meeting, and you're set. Also, on Macs, Quicktime is a great option. Another solid choice is Screencastify -- a Chrome plugin that can record the entire screen easily (not just Chrome), integrates directly with Drive and YouTube, and is overall really easy to use. That said, you can use any video creation software you wish. Also, note that parts of some demo videos may be selected to appear in the TP Lightning Round video.

        • Live Demo [2.5 pts]: In your TP3 meeting, you will need to provide a live demo to your mentor (and possibly one or two other TAs). This demo can be up to 5 minutes long and should cover all the core components of the project, especially anything your mentor might not notice when they test the code themselves. This is your chance to convince our TAs that you deserve a great grade, so make sure you are prepared to explain your project well.

      • Design and Documentation [0 pts]

        Your submission should include the design directory from the previous deliverables. The proposal should have a new section, 'TP3 Update', which includes any design modifications made since the previous update (or says that no changes were made if no changes were made). You will not be penalized if this section is not included, but it may negatively impact your mentor's ability to grade your project, as they may not be aware of new features you've added.

      • Style [0 pts]

        Writing your term project code with good and consistent style will make your life much easier! In particular, we expect that you will organize your code in a sensible way, and that you will have a short comment at the top of each file describing what the file does. We will not directly grade your code for style, but we reserve the right to deduct points for egregiously poor style. Also, good OOP class design (while not strictly necessary) will likely help your grade, indirectly and directly.


  5. Helpful Guides
    Here are some short and helpful guides on some TP topics:
    1. TP Guide on Features
    2. TP Guide on MVP
    3. TP Guide on Tech Difficulties
    4. TP Guide on Game AI
    5. TP Guide on Mazes
    6. TP Guide on Pathfinding
    7. TP Guide on Terrain