CMU 15-112: Fundamentals of Programming and Computer Science
Class Notes: Term Project Assignment
Due: Wed 5-May 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 graphical, text-based, or even file-based. It 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 a shell script, 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 weeks of the semester, so you know where you stand and what additional work may be required to improve your grade.

    You have an extended period to finish this assignment, with no other required assignments during the last three weeks, and no other major course responsibilities between midterm2 and the (optional) 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. Many of you will exceed the 25-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 challenges of our all-remote learning this semester, 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 TP0.

    • You must use Python. If you want to use a different programming language for some reason, you will need to obtain special permission in an email from the course instructors.

    • You should produce an interactive Python application. If you want to create a phone app or webapp, or if you want to create a non-interactive application, you will need to obtain permission from the course instructors.

    • You may not do mini-games. You should have one reasonably rich and complex application, rather than a collection of smaller, not-so-complex so-called "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.

    • You must first pass a tech demo if you want to use external materials (Python non-builtin libraries or hardware). This tech demo is used to ensure that you know the external material well enough to avoid getting in trouble. 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. Remember that some modules like pygame are explicitly forbidden until MVP.

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

      Note 2: installing modules can be a pain. But the TAs have written a handy module manager to make it easier! Try it out with the following (which requires that you place the file in the same folder as your code):
      import module_manager

  2. Schedule

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

    • In Week 9: Term Project Preview
      On Thu 1-Apr, we had a preview discussion about your term projects, and the steps you should start taking in preparation at this point.

    • In Week 9: TA-led Mini-Lectures
      This week everyone also attended at least one TA-led mini-lecture to learn about new algorithms or modules you can use in your project. This was worth some points on hw9.

    • In Week 10: TP Mentor Ideation Meetings
      In week10, you met with your newly-assigned TP Mentors to help you be most effective during the ideation phase of your term project.

    • In Week 11: TP Assignment
      On Tue 13-Apr, the TP was formally assigned and extensively discussed today in lecture.

    • In Week 11: Optional TP Check-Ins (with TP Mentors)
      Also this week, you are strongly encouraged to check in with your TP Mentor, to discuss project ideas, designs, etc.

    • Tue 20-Apr: TP0: Progress Update + Tech Demo
      • Progress Update
        Meet with your TP Mentor for 15 minutes to check on your progress, discuss project ideation, design decisions, maybe even work on a bug or two.

        In your TP0 meeting, you will finalize your TP idea with your TP Mentor. If you do not have a TP idea, you would be behind on your TP progress, and your mentor will help you decide on one at this point. The point is: as of TP0, you are committed to your project's basic vision and goals. By this time you need to have made a decent start on the code (at least 150-300 lines).

      • Tech Demo
        If you wish to use any tech outside of Python and what we have covered in the notes, then you need to do a tech demo by this date. This includes if you wish to use any other libraries, modules, API's, hardware, and so on. If this applies to you and you're doing a tech demo, it's a good idea to meet with your mentor (or at least with other TA's and/or course faculty) well before this deadline to check in on how things are going, and to keep you both on the same page regarding expectations. That said, tech demos are your responsibility -- you have to demonstrate sufficient mastery of the tech to your TP Mentor that they believe you have a strong chance of using it productively in your TP. If you do not pass the tech demo by today, then you will need to restructure your project to work without the tech, at least until you reach MVP. We will not extend the tech demo deadline. You have one chance so start early. But, remember that you do not have to use tech, nor does it 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, your mentor may ask you to change the code to track a bright red object, and you would have to be able to do that, fairly easily, while your mentor watched to confirm.

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

    • Mon 26-Apr: TP1
      Meet with your TP Mentor for your TP1 checkin 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 (400-600 lines).

    • Sat 1-May: 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.

    • Wed 5-May: 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 design files related to the project.

    • Thu 6-May: TP Showcase (in lecture)
      Attend the Term Project Showcase in your assigned lecture (sorry, we do not have capacity for everyone to attend at the same time), and watch demos of amazing projects by your fellow students. Note: this event is required, but it is also a lot of fun!

    • Fri 7-May to Sat 8-May: 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.

    • Finals Period (Date TBD): TP Grades Released
      We will finalize and release TP grades as quickly as we can. However, finalizing is complicated even in person, and we expect that in some cases it may take a week or longer to do this remotely. We are committed to being as fair and consistent as possible in our grading, so this may take some extra time this semester. That said, we will get as many grades finalized as early as possible, so you have the most information available when you have to decide whether or not to opt-in to take the optional final exam.

  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. Given the challenges of remote learning this semester, 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, 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 two days 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). Thus, if you miss 4 TP meetings without quickly making them up, you will receive a zero on the project, equivalent to two letter grades on your semester average.
      • After two days, the clock resets, so if you continue to fail to make up that same meeting in two more days, that counts as yet-another missed meeting. Under no circumstances can you skip a required TP meeting. 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. So let's do just that! Let's all work hard so you can have a wonderful, enriching, satisfying term project experience.
    • 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.

    • 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 Hack112 must be cited as such and will not count towards your term project grade.

    • Office Hours and Piazza: there will be a new schedule of office hours during Term Project season. 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.

    • 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 a 15% penalty on TP1, a 25% penalty on TP2, 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 TP0. 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 each deliverable as a zip file 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.

    • Grace Days: These only apply to homework and not to the term project. You may not use any grace days for any TP deadlines.

    • Extensions: We also generally do not provide extensions on TP deadlines, and so we do not allow students to submit the deliverables late. That having been said, if you have a medical or personal/family emergency, email the professors to see if an extension can be arranged.

  4. Deliverables

    You will have 4 deliverables for this term project. TP0 and TP1 combined will count as one quiz grade ("tpQuiz1"), and TP2 will count as a second quiz grade ("tpQuiz2"). These are not a traditional quizzes, but which will be entered in the quiz category in our gradebook. Your TP grade will be determined solely by TP3, the last deliverable.

    Your mentor will mostly assess your deliverables in person (well, over zoom), 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 higher TP3 grade (the one that matters twice as much as every quiz combined).

    1. TP0 (due Tue 20-Apr at 8pm)

      The TP0 deliverable consists of whatever code you have at this stage. We expect at least 150-300 lines of code, depending on the complexity. This code may be prototype code, and so perhaps may not be part of your final project. It also may or may not have any user interface. But there still should be some code that shows clear progress in some parts of your project.

      In addition, you must also submit time data here. To do this, you should keep track of the time you spend on the project and enter it into the form. If you do not submit the timesheet, you will be penalized 5 points on the deliverable.

      Note: Your TP0 and TP1 collectively count for one grade.

    2. TP1 (due Mon 26-Apr 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.

      • Design Proposal [20 pts]

        Your Design Proposal should be submitted as a directory containing several files:

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

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

          • Competitive Analysis [2.5 pts]: A 1-2 paragraph analysis of similar projects you've seen online, and how your project will be similar or different to those.

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

          • Algorithmic Plan [2.5 pts]: A detailed 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 algorithmically most complex, and include details of the algorithm(s) you are using in those cases.

          • Timeline Plan [2.5 pts]: A timeline for when you intend to complete the major features of the project.

          • Version Control Plan [1.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)

          • Module List [1 pts]: A list of all external modules/hardware/technologies you are planning to use in your project. Note that any such modules must be approved by a tech demo. If you are not planning to use any additional modules, that's okay, just say so!

        • Storyboard [5 pts]
          Generate a storyboard that demonstrates how a user would interact with your finished project. Your storyboard should have at least six panels, and at least three of those should demonstrate features within the project. You may scan or take a picture of your storyboard and include it in the directory as the file storyboard.png (other acceptable filetypes include .gif, .jpg, and .pdf).

      • 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 working demo; it should just be a real start towards solving the core problems of your project. For most students, 400-600 lines of decent code would indicate a good start.

      • TP0 Meeting [0 pts]

        You should have met with your mentor the previous week to discuss your idea. If you miss this meeting, you will be penalized 25% of your combined TP0+TP1 grade. Also, if you missed the meeting, you still must make it up, as described in the "Required Meetings" section above.

      • 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 combined TP0+TP1 grade, and you still have to make up the missed meeting.

      • Timesheet [0 pts]

        In addition to the main deliverables, you must also submit time data here. To do this, you should keep track of the time you spend on the project and enter it into the form. If you do not submit the timesheet, you will be penalized 5 points on the deliverable.

    3. TP2 (due Sat 1-May at 8pm)

      Your TP2 deliverable consists of two components: a working demo and updated design 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.

      • 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 TP2 grade, and you still have to make up the missed meeting.

      • Updated Design Docs [0 pts]

        Many students update their design plans due to unforeseen problems or new ideas. You must add a new section to your design proposal, '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. You do not need to update your storyboard, but you should keep it in your design directory. If you do not add this update section, you will be penalized 5 points.

      • Timesheet [0 pts]

        Fill out another timesheet here to include the hours worked in the period between TP1 and TP2. If you do not fill this out, you will be penalized 5 points.

    4. TP3 (due Wed 5-May 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 TP0, TP1, and TP2 count towards a "tp-quiz" in the quiz category, TP3 will be graded as the main Term Project, and is constitutes the entire "term project" category.

      • Project Codebase [90 pts]

        The codebase should include all your python files and any other files (images, music files, etc.) required to help your project run. Your project should run robustly, should be algorithmically complex, and should have decent user experience. It may also have a well-designed user interface, depending on the project.

        When grading your project code, we also consider effort. The term project should take up the majority of your 15-112 time in the last 2+ weeks of the semester. The class is 12 units, which means 12 hours a week or 30 hours in 2.5 weeks; after subtracting 5 hours (for some additional lectures and other matters), this leaves 25 hours which you should spend on the term project. This means you need to spend at least 10-12 hours a week (naturally, the earlier you start on your term project, the less time per week you'll need to invest). Spending this time and showing real effort and progress in mentor meetings will factor into your score.

      • 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 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. 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 your mentor that you deserve a great grade!

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

      • Timesheet [0 pts]

        Fill out one final timesheet here to include the hours worked between TP2 and TP3. We will not apply a deduction to your grade if you forget to fill out this timesheet, but we will withhold your TP3 grade until you do so.

      • 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 certainly into more than one python file), 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 egregious style errors.

  5. Helpful Guides
    Here are some short and helpful guides on some TP topics:
    1. TP Guide on Features
    2. TP Guide on MVP