Wednesday, March 07, 2007

Software Development Project: any ideas?

This coming fall I will be teaching the senior capstone course (Software Development Project) at Harding University. I’ve only taught this course once before, about 9 years ago, so I’m starting fresh and looking for new ideas.

Traditionally this course has involved dividing the class into groups of 4-5 and leading the groups through a large part of the development cycle (design, implementation, documentation, user testing, etc.) of producing a computer game. Past teams have implemented games like Yahtzee, Spades, Battleship, Checkers, and Othello—normally games that take only 5-10 minutes to play all the way through. Technical testers and user testers rate the games, the AI’s compete against each other to see which is the best, and ultimately one of the teams is selected as the all-around winner.

The class is usually one of the most educational for the students and one of the most enjoyable because of the amount of creativity that they can pour into their projects and the amount of freedom they have in implementing the game. Plus some students really enjoy the competitive aspect.

While this has course has worked out really well in the past, I wonder if any aspects of it should be changed. Should the students modify an open source project already in development? This is the approach that Google Summer of Code takes, and it exposes students to the type of work they will likely encounter when they graduate (most software in not built from scratch).

Or should the software they are building be less game-oriented? I think students are usually more enthusiastic about writing games, but they are more likely to write business-oriented (or at least more practical) applications in the “real world”.

The games the students have traditionally built have been stand-alone applications for Windows that must be installed locally. There’s some advantages to this since students are exposed to the types of problems that such applications run into (e.g., incompatibility issues), but on the other hand, they aren’t being exposed to thin client applications that are becoming more popular today. Should I limit the students to developing only a Web-accessible application, possibly with AJAX, Flash, or (yuck) Java applets?

I’m open to any suggestions, so please let me know your thoughts.