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 this course’s lessons, the nature of your project is entirely up to you. You may implement your project in any language(s). You are welcome to utilize infrastructure other than the CS50 Codespace. All that we ask is that you build something of interest to you, that you solve an actual problem, that you impact your community, 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.

Ideas

  • 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

Getting Started

Creating an entire project may seem daunting. Here are some questions that you should think about as you start:

  • What will your software do? What features will it have? How will it be executed?
  • What new skills will you need to acquire? What topics will you need to research?
  • If working with one or two classmates, who will do what?
  • In the world of software, most everything takes longer to implement than you expect. And so it’s not uncommon to accomplish less in a fixed amount of time than you hope. What might you consider to be a good outcome for your project? A better outcome? The best outcome?

Consider making goal milestones to keep you on track.

If using the CS50 Codespace, create a directory called project to store your project source code and other files. You are welcome to develop your project outside of the CS50 Codespace.