Capstone Project Proposals
The capstone course is the culmination of your efforts in computer science. This is your chance to put
together a single project that draws on everything that you’ve learned over the last 3½
years. This page is here to help you put together your proposal.
Scope
Your proposal is expected to draw upon some or all of the material you’ve seen in your courses, but should
also involve an independent exploration of new intellectual territory. There are two broad categories of
projects:
- Those in which students pull together multiple topics from across courses and (hopefully) explore
some new domain as part of constructing a large project. For example, you might build a tool that uses
networking techniques to fetch content from web pages, stores it in a database, and then
applies a machine-learning algorithm to look for patterns or meaning.
- Those involving an in-depth investigation of one particular topic but to a much greater extent than
you’ve seen it in class. For example, you could propose an improved algorithm for training a neural
network, for example, then implement it and rigorously compare its effectiveness to existing
approaches.
Regardless of the approach you take, you’ll be expected to write a final report and make an oral
presentation at the end of the semester.
Teams
In the real world, programmers and computer scientists work in teams to solve problems. We expect that the vast majority
of projects in this class will be done by teams of 2-4 people. Not only will this let you work on your teamwork skills, but
it means that you can tackle a larger and more interesting project, of which you will be prouder.
Of course, there are some situations in which a team isn’t the right approach. For example, if you’re doing
a “depth-style” research project, it might make more sense to go alone. You might also find that
you’ve got a project that you really want to complete but that doesn’t get anyone else
excited. However, for the most part you’re expected to work in groups, and you’ll have to justify going solo
in your proposal.
Ideas
Start by thinking back on the projects and assignments you’ve done so far. Were any of them
particularly enjoyable? What did they have in common? Alternatively, is there anything in one of your
classes that you wish you had learned?
Another option is to look forward instead: what would you like to see yourself doing after you graduate?
What kinds of projects could you work on that will give you an edge when it comes to interviewing, will give
you some direct experience, or will give you a taste of what your chosen field is like.
Another option is to look for a client, and see what needs they have. You could contact your favorite
charity in Tacoma and see if they need a custom-made program or app. Or you could find a faculty member or
campus group that has a similar need.
Finally, don’t underestimate your fellow senior CS students. One of them might have a great idea, but
is looking for partners. Alternatively, just talking to one of them might inspire you to do something
related but distinct.
Games
Games are controversial, and require special thought. Some professors have a negative opinion toward
games—they seem them as an uninteresting distraction. Others are more nuanced and circumspect.
My opinion of game development is more positive. I'm also aware that some of you would like to do this professionally,
and having a game under your belt will give you a leg up during interviews. However, there are many aspects of game
development of which you need to be aware.
- Games are extremely difficult to create, and take a lot of work. Big-studio games take
literally thousands of person-hours to create. Game developers often work 60-70 hour weeks. (Game
development is responsible for more breakups and divorces than any other programming job.) If
you take on a game as your project, you will probably end up spending more hours than your classmates on
it.
- Student efforts are often disappointing. If you don't have the time, the end result will often
seem tired and cheap.
- It is very hard to create something truly new. For every Minecraft, Portal, or
Braid, there are at least fifty forgettable games that have just thrown together old ideas, without
doing anything truly interesting.
This is not meant to discourage you. But if you are going to take on this task, you need to do so with your eyes open.
Here are some ideas that might help make a game into an appropriate project:
- Incorporate advanced AI. Machine learning and intelligent search routines (e.g. minimax) can
make your game into a very interesting project. This is most useful if you've taken AI.
- Use multithreading. Most modern games are still single-threaded, because of the inherent
difficulty of creating a multithreaded game. If you have some experience with multithreaded programming,
this can help your game run much more efficiently. (And impress future employers.)
- Make the game multiplayer, using networking. Negotiating network traffic in real time is
tricky, but doing so will add a level of accomplishment to your game.
Past Examples
Here is a list of the projects that were done last year:
- Acoustic Snooping (2 people): use a recording of a person typing in order to recover the
typed text. Used elements from AI, digital signal processing, and cryptography.
- Business Intelligence Analysis of the University (2 people): use open-source data-mining tools
to analyze and predict student success. Used AI and databases.
- D&D Character Builder/Campaign Manager (1 person): create a management tool for the popular
role-playing game. Used databases and networking.
- Fit N’ Lift App(4 people): create a mobile, social-media app facilitating communication between
athletes and coaches. Used networking and databases.
- Imbue Reality App(4 people): an app to create an “augmented reality”, such as displaying
textual information relevant to landmarks. Used databases and networking.
- Mashbot (1 person): a tool for automatically making mashups of two different songs. Used
digital signal processing and advanced mathematics.
- Real-Space Game App (1 person): create an app to allow users to play “alternate reality”
games while moving around in the real world. Used networking and databases.
- Snow Simulation (2 people): render and display realistic-looking and -acting snow. Used graphics
and advanced mathematics.
- Tennis Scheduler (1 person): create a web-based application to manage scheduling of the university’s
tennis resources. Used databases and networking.
- TransitBuilder (4 people): create a gamified pedagogical tool to teach users about the resources needed
to operate an urban mass-transit network. Used databases and networking.
Getting Started
You should all start thinking about your projects now. Talk to other people in the class, to propose
ideas or solicit partners. Next, run the project by me for tentative approval. Just e-mail me a paragraph or
talk to me in person. Finally, when you have that, you can work up a detailed description of your idea. This
must include:
- A brief summary of the project.
- A description of what will be hard or novel. Where is the complexity?
Where is the Computer Science? Why is it worthy? Remember, this is the culmination of your years as an
undergraduate. Make sure that it’s something of which you’ll be proud in the years to
come.
- A justification of the “independent exploration” angle. What will you have to learn
on your own? You might have to learn a new tool or system or algorithm. More commonly, you might have to
explore independently to learn how to synthesize elements from different classes.
- A list of tools, packages, or other previous work that you'll be using.
- A tentative timeline for the project, broken down by week. What checkpoints will you set up, to
ascertain your progress? Often a figure or table will help here.
- An emergency plan for what to do if you run out of time. Many projects ultimately don’t pan
out; what will you do if yours is one of them? Very often, it’s useful to break your project into
the “core functionality” and the “stretch goals” that you hope to accomplish (if
there’s time).
You must have an approved idea before you are given an add code.