Senior Project Options
The capstone achievement in obtaining a bachelor's degree in CS is the senior project. Students are given considerable freedom in their choice of project, but because it is open-ended, the project can require a lot of planning. The choices students make in the early phases can determine how successful and fun the project turns out to be. A little forethought can prevent a lot of pain later.
There are several ways to complete the senior project requirement: CS194, CS210, CS294, an independent project (CS191), or a Senior Honors Thesis.
Senior Project Course: CS194
The most common route is to take CS194, the senior project course, usually offered spring quarter. In this course, students work in teams to build a significant programming application, and learn useful strategies for software design and engineering. By all accounts, this course is quite demanding and most students spend hours glued to their computer screens, particularly in the final weeks. CS194 ends with a "software faire" in which all class participants demonstrate their projects to an audience that includes course staff, other students, and representatives from local technology companies.
Project Experience with Corporate Partners: CS210
CS210 is a two-quarter sequence (Winter and Spring) where students work with partner companies like Facebook, Yahoo!, Microsoft, and BMW. Corporate partners provide loosely defined challenges from their R&D labs for which they are seeking new, innovative solutions and ideas. As such, student teams have freedom as to how they approach the challenges and are encouraged to think open mindedly. Each team functions as a small startup company with dedicated space, a discretionary budget, and a technical advisory board comprised of the instructional staff. The goals of this course include providing students with exposure to the following: current practices in software engineering; exploration of the design space; significant development experience with creative freedoms; working in groups; real-world software engineering challenges; public presentation of technical work; and creating written descriptions of technical work. The two-quarter sequence affords time to experiment, benchmark and try out different ideas before zeroing in on a particular direction. The two-quarter time frame also means provides enough time to build something of lasting impact. This is class is also a great opportunity to develop relationships with a company, and learn skills that are helpful for managing a team or starting a company.
The CS210A/CS210B sequence fulfills the senior project and writing requirements for the CS major. Most people take it for 4 units in both Winter and Spring (8 units total), although students can elect to take it for 3 units per quarter if desired.
Independent Project: CS191
The second senior project option is to undertake individual research with a faculty member under the auspices of CS191. This approach can be extremely rewarding and provides valuable experience for students interested in a research career. To take CS191, the essential requirement is that you find a faculty member or lecturer who is willing to support your project. For information about finding a research project, check out the undergraduate research page. Students taking CS191 must also fill out a Senior Project Proposal (see Meredith Hutchin) and get approval from their faculty sponsor, their adviser, and Patrick Young before beginning the project.
On some occasions, it is possible to undertake a CS191 project in which the day-to-day supervision comes from faculty outside the department or even from a qualified person outside the university. All such arrangements require a nominal adviser inside the department and approval by Mehran Sahami. Moreover, because university policy prohibits students from receiving both payment and credit for the same work, you cannot use work completed in the context of a job as your senior project.
In order to be approved, a senior project proposal must ordinarily be a significant software application or publishable research. A significant software application involves a substantial amount of programming that makes use of modern user-interface technologies. These projects are typically comparable in scale and complexity to shareware programs or, in some cases, to commercial applications. The other type of project consists of directed research that one might reasonably expect to see published in an academic journal or presented at a conference. It is not necessary that the work in fact be published, but simply that it is potentially publishable.
Senior Honors Thesis
Another research-based option to fulfill the senior project requirement is to do a senior honors thesis. Writing an honors thesis includes a year-long research project supervised by a CS faculty member. Applications for the honors program are due by May 1. For more information, see the Honors Page.
Directed Research: CS294
For students who would like to take part in active research but don't have a specific project in mind or would like some guidance, there is the directed research class, CS294. Everyone chooses a project from a set of little pieces of a big problem that the professor defines. For example, a few years ago CS294 students contributed to the award-winning DARPA Grand Challenge robot. The topics for CS294 change each year, though it's frequently been led by an AI professor. Professors may expect students to be comfortable with techniques used in the field. For example, an AI CS294 might expect students to have taken CS221.
If you are working on a group project in either CS191 or CS194, here are a few suggestions to help you have a positive senior project experience.
Pick a project team you feel comfortable working with, perhaps students you have worked with on programs for other classes. Different people have different ideas of how to organize and program. Finding students with an approach that you share often makes the project a much more pleasant experience. Incompatible attitudes and work ethics may be easy to overlook at first, but as time passes they may cause tension and anxiety within the group.
Select a project topic in which you are interested. Whether you are working on a research project or a large-scale application, you are going to be working on a single project for a substantial period of time. Nothing can detract more from your senior project experience than getting fed-up with an idea you were only moderately interested in when you started and now can't stand. Many students develop games for their senior project since the thrill of actually being able to play the game as it is developed helps maintain motivation through the rough times.
Don't overextend yourself. Many students beginning their senior project have a tendency to bite off more than they can chew. Before setting down grandiose plans to write the world's best spreadsheet program, take time to think about what projects might be feasible to do in a quarter. At the end of the project, it is better to have a working application with fewer features than a non-working application that would be really great were it to be fully implemented.
Develop a prototype early. By building a simple version of your application, you can demonstrate its feasibility, get a better sense of the intricacies involved, and understand more about the time frame required for its development. Moreover, having a working prototype early on will help get you very involved in your project and avoid the mad rush at the end of the quarter to finish.
Use existing code. Most commercial programmers make use of lots of existing code and libraries. There is no reason why you should have to rewrite many common procedures and libraries which already exist and are readily available. By doing a little searching for code, you can save yourself a lot of time on the basics and work on what is really unique to your application.
Practice good coding style. Don't forget the software engineering skills you learned in early systems courses like CS106 and CS108. When you are working on a group project, it is especially important to structure and document your code in a way that prevents having to track down bugs caused by unexpected interactions between different code modules.
Be prepared to spend lots of time on your project. Your senior project is not just another programming assignment. You and your teammates will need to take the project seriously if you want to have any hope of making substantial progress in less than 10 weeks. Completing a project on the scale of the senior project requires starting early and maintaining dedication throughout.
Have fun! Despite all the tips, guidelines, and warnings above, the fact that you have a lot of leeway on your senior project encourages you to pick a topic that you really enjoy. Students who regard their senior project as one of their best experiences often attribute their enjoyment to the fact that they were genuinely interested in building a particular application or finding the results of a particular research problem. They do not regard it as simply a requirement they need to fulfill. Many students even choose to continue working in the same area after fulfilling their senior project requirement.