Putting the magic in the machine since 1980.

Monday, October 26, 2009

Capstone Projects

A blog post by Joel Spolsky on Capstone projects complains about how many of the top CS departments do not teach their students how to write large programs or how to work in large teams. Perhaps.

Here at the University of South Carolina, I created our CSCE 492 back in 2000 to address these problems. 492 is our capstone software project whose main goals, as I see them, are to:

  1. Give the students the experience of working in a large (100 pages of code or more) software project.
  2. Give them the experience of working in a group.
Our 492 projects are definitely not the type of project that can be finished in one or two days. They are much more significant than that. Still, on my first few years teaching it I learned that students do tend to postpone work until the last month. Thus, I have established certain guidelines.

Each group has a weekly meeting with me. In these meetings they give me their progress report and I keep track of of how much has and has not been achieved. We also set priorities for the next few weeks. Lack of progress is duly reprimanded, as any manager would do.

At the midterm there is an integration demo. Modern programs include several number of third-party libraries, from web frameworks to 3D engines, depending on the type of program being built. Students tend to underestimate how long it will take to install apache, mysql, mod_perl, library-X, put it all into svn, and get all that mess of code to say "Hello world" reliably. The integration demo is a proof-of-concept milestone which assures all of us that yes, this can work. After the demo all that is left to do is add all the features.

Finally, there is the shared code repository (I use code.google.com). Not only is this a tool that all professionals use, but it also helps me keep track of what is really going on, or not going on, in the project. Of course, it also helps the group coordinate their activities, as it was designed to.

So, yes, capstone projects should be an integral part of every Computer department's required curriculum, if the department is interested in creating graduates who can write software.

Still, I have to admit, it takes a lot of time to manage, advise, and code review 3 to 5 different projects at the same time. That might be the reason other universities either don't do this or leave their students on their own.

2 comments:

Ryan Yandle said...

I think that Joel's reference to the idea that capstone projects "frequently fail to deliver anything useful" really hits home.

Looking back on my capstone project, most of the students had a severe case of senioritus; they just wanted to graduate at the end of the semester. This generally leads to doing the "bare minimum" and, like Joel guessed, none of our capstone projects that semester produced anything useful.

This idea of producing something "useful", however, is rather vague. To me, "useful" would be a project that endures in some form after the semester has finished.

My favorite part about Joel's post was learning that there are universities out there that are teaming up to create even larger capstone projects. Teams of up to 6 students from multiple universities! How awesome is that?

And to top it off, their projects are contributing to an existing open source project! This helps ensure that something useful will come out of it (if all goes according to plan, that is).

Now don't get me wrong, I'm not trying to bash the way we run our Capstone course. I learned a lot about project management and how to interact with team members. Learning to interact with people who think differently from you is one of the most valuable skills you can learn in college. I owe the majority of my experience in that area to my capstone project.

My only regret was that we did not create anything useful. I think contributing to an open source project is an awesome idea, and I bet that we could get sponsors from the OSS community to help the students get up and running on a project like this.

I have heard rumors that things like VIP and the old CSE dropbox came from capstone projects in our department. If this is true, why don't we do more of these? If it's not true, lets start doing it! Maybe some projects are just too big for a semester. Maybe they need to be split into two or three capstone projects. I know this is easier said that done, and these things might put more pressure on the faculty that sponsor it, but it would be absolutely worth it.

Regardless, if we could end every semester with a "Look what our capstone projects produced!" on the front page of the department site, I think it would greatly boost our image. It also gives the students something to talk to their future employer about at a job interview.

I have heard that the current capstone class has some cool projects going on. It sounds like some of the projects will definitely live on past the scope of the class. That is very exciting. I am eager to see what will be produced by the semesters end!

jmvidal said...

Indeed. I should've also mentioned that this semester John Bowles is leading our first 490 class. The new 490 is a two-semester capstone project class which will completely replace the current one-semester 492 (this year is a transition year so we are offering both).

For 490 we are hoping to find people from industry who need projects developed and, more importantly, are willing to put in the long hours required to specify what it is they actually want.

Having two semesters will give the students time to create much more sophisticated applications, we hope.

Still, I think "creating something useful" is a dream only a few of us will ever achieve. Not because we can't write good software, but because the nature of the software business--zero costs of reproduction and network economics--means that there are only a few winners in each space. That is, there is only one Facebook, only one MS Excel, only one Gmail.

I think the hardest part in creating software that people will use is figuring out what the features are that will make people want to use it, instead of the competition.