Senior Projects
The "crowning achievement" in obtaining a bachelor's degree in
CS or CSE is the Senior Project, but it is not always the most fondly
remembered one. In general, students report that the project was either
the best or worst part of the major-rarely in between. Because it is
open-ended, the senior project requires a lot of planning on your part.
You have considerable freedom in your choice of project; the choices
you make in the early phases of your work can determine how successful
and fun the project turns out to be. A little forethought can prevent a
lot of pain later.
There are four strategies by which you can complete the senior
project requirement: the CS194 course, CS294(W), an independent project
taken under CS191 or CS191W, or a Senior
Honors Thesis.
The senior project course
The most common route is to take the CS194 senior
project course, which is usually offered spring quarter. In this
course, you will work in teams to build a significant programming
application, along with useful strategies for software design and
engineering. By all accounts, this course is quite demanding and
redefines what it means to be glued to a computer screen, particularly
in the final weeks. CS194 ends with a "trade show" in which all class
participants demonstrate their projects to an audience that includes
representatives from local software firms.
Directed senior research: CS294
If you'd like to take part in active research but don't have a
specific project in mind or would like some guidance, 294 might be for
you. Everyone chooses a project from a set of little pieces of a big
problem that the prof defines. For example, two years ago 294 students
contributed to the award-winning DARPA Grand Challenge robot. The topic
for 294 changes each year, and while it's historically been led by an
AI prof, other labs could sponsor it in the future. Note that the
professor may expect you to be comfortable with techniques used in the
field (for instance an AI 294 might expect you to have taken CS221).
You can opt to do a writing-intensive version (294W) to fulfill the
Writing in the Major requirement.
Independent projects
The second option is to undertake individual research with a faculty
member under the auspices of (or CS191W, the writing-intensive version
of this course). While this approach can be extremely rewarding and
provides valuable experience for students interested in a research
career, it is not for everyone. 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 Claire
Stager) and get approval from their faculty sponsor, your
adviser and either Bob Plummer or 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 Maggie Johnson. 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 fall into one of the following categories:
- Significant software application. The
most common type of project is a software application that involves a
substantial amount of programming and 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.
- Publishable research. The other main
category of project consists of directed research that one might
reasonably expect to see published in an academic journal or presented
at a conference. Note that the requirement is not that the work in fact
be published, but simply that your adviser sees
it as potentially publishable.
Tips for organizing your project group
If you are working on a group project in either CS191 or
CS194, here are a few suggestions designed to help you have a positive
senior project experience (these tips are useful for other project
courses as well):
- 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 that you are really
interested in. 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 or two. 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, why
shouldn't you? 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 your code and document it thoroughly
to avoid having to track down bugs caused by unexpected interactions
between your code and that of your partners.
- Be prepared to spend lots of time on your project.
Your senior project is not just another programming assignment. You and
your teammates should take it seriously if for no other reason than the
fact that your faculty sponsor or CS194 instructor will. To complete a
project on the scale that the senior project requires, it is essential
to start early and maintain your motivation 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-and can learn from at the same time. Students who regard their
senior project as their best experience often attribute their enjoyment
to the fact that they were genuinely interested in producing a
particular application or finding the results of the research problem
they were trying to solve. 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.

|