Final Project

The climax of this course is its final project. The final project is your opportunity to take your newfound savvy with programming out for a spin and develop your very own piece of software. So long as your project draws upon the course’s lessons, the nature of your project is entirely up to you, albeit subject to the staff’s approval. You may implement your project in any language(s) as long as the staff approves. You are welcome to utilize any infrastructure, provided the staff ultimately has access to any hardware and software that your project requires. All that we ask is that you build something of interest to you, that you solve an actual problem, that you impact campus, or that you change the world. Strive to create something that outlives this course.

Inasmuch as software development is rarely a one-person effort, you are allowed an opportunity to collaborate with one or two classmates for this final project. Needless to say, it is expected that every student in any such group contribute equally to the design and implementation of that group’s project. Moreover, it is expected that the scope of a two- or three-person group’s project be, respectively, twice or thrice that of a typical one-person project. A one-person project, mind you, should entail more time and effort than is required by each of the course’s problem sets. Although no more than three students may design and implement a given project, you are welcome to solicit advice from others, so long as you respect the course’s policy on academic honesty.

Extensions on the final project are not ordinarily granted, except in cases of emergency.

Ideas

Here are just some of the possibilities. Discuss any and all with the the staff! And if you’d like to solicit collaborators for an idea you have, do post in Ed!

• a web-based application using JavaScript, Python, and SQL
• an iOS app using Swift
• a game using Lua with LÖVE
• an Android app using Java
• a Chrome extension using JavaScript
• a command-line program using C
• a hardware-based application for which you program some device

Ideation Workshop

Need help thinking of a final project idea? Sign up for the Tech for Social Good Ideation Workshop to brainstorm ideas that solve real problems. All you have to do is come in with a particular interest (ex: climate change, social justice, education), and we’ll walk you through all the steps to narrow that down to a specific idea (ex: webapp that helps people shop from carbon neutral online retailers). The workshop is on sign up here.

Combining Courses

If taking some other course this semester that has a final project, you are welcome and encouraged to combine this course’s project and that course’s project into one, toward an end of applying lessons learned in CS50 to some other field, so long as the joint project satisfies this course’s and that course’s expectations. Before pursuing a joint project, though, you must disclose to both courses and receive approval from both courses.

Specifications

Proposal

due by

The proposal is your opportunity to receive approval and counsel from the staff before you proceed to design. If collaborating with one or two classmates, each of you should submit a proposal, even if identical.

The staff will either approve your proposal or require modifications on your part for subsequent approval. Your proposal, even if approved, is not binding; you may alter your plan at any point, provided you obtain the staff’s approval for any modifications. Projects submitted without approval may not receive credit.

Here’s how to complete your proposal.

1. Execute cd to ensure that you’re in ~/ (i.e., your home directory).
2. If you haven’t already, execute mkdir project to make (i.e., create) a directory called project in your home directory.
3. Execute cd project to change into (i.e., open) that directory.
4. Execute wget https://cdn.cs50.net/2020/fall/project/proposal.zip to download a (compressed) ZIP file.
5. Execute unzip proposal.zip to uncompress that file.
6. Execute rm proposal.zip followed by yes or y to delete that ZIP file.
7. Execute ls. You should see a directory called proposal, which was inside of that ZIP file.
8. Execute cd proposal to change into that directory.
9. Execute ls. You should see a file called README.md therein.

Edit that file in CS50 IDE, answering the questions therein. To submit your proposal, follow these instructions.

1. Download your proposal’s README.md file by control-clicking on the file in CS50 IDE’s file browser and choosing Download.
2. Go to CS50’s Gradescope page.
3. Click “Final Project: Proposal”.
4. Drag and drop your README.md file to the area that says “Drag & Drop”.

You should see a message that says “Final Project: Proposal submitted successfully!”

Status Report

due by

Not only is the status report intended to keep the staff apprised of your progress, it is an opportunity to keep yourself on track. If collaborating with one or two classmates, each of you should submit a status report, even if identical.

Here’s how to complete your status report. Log into CS50 IDE and then, in a terminal window:

1. Execute cd to ensure that you’re in ~/ (i.e., your home directory).
2. If you haven’t already, execute mkdir project to make (i.e., create) a directory called project in your workspace directory.
3. Execute cd project to change into (i.e., open) that directory.
4. Execute wget https://cdn.cs50.net/2020/fall/project/status.zip to download a (compressed) ZIP file.
5. Execute unzip status.zip to uncompress that file.
6. Execute rm status.zip followed by yes or y to delete that ZIP file.
7. Execute ls. You should see a directory called status, which was inside of that ZIP file.
8. Execute cd status to change into that directory.
9. Execute ls. You should see a file called status.md therein.

Edit that file in CS50 IDE, answering the questions therein. To submit your status report, follow these instructions.

1. Download your status report’s status.md file by control-clicking on the file in CS50 IDE’s file browser and choosing Download.
2. Go to CS50’s Gradescope page.
3. Click “Final Project: Status Report”.
4. Drag and drop your status.md file to the area that says “Drag & Drop”.