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.

7 comments:

  1. Personally, I never wanted to code a game in Soft Dev. My preference would have been to write a program that would be more business-oriented, particularly since, as you pointed out, it's what we'd most likely do once we graduated.

    Granted, it was fun to see the progress as we got the pieces of the game working (networking, GUI, etc) and it was a relief to see it actually working in the end. However, I think more business-oriented programming experience is much more practical for what the majority of us end up doing post-graduation.

    Admittedly, my main areas of interest are databases and web programming, so I'm more inclined to lean in that direction. Peter Kirby and I developed a new work order system for Dormnet to use that's web-based and heavily uses AJAX to make it more responsive and give it some nice features. That's something I'd suggest, but I know other students won't find it nearly as interesting as Peter and I did.

    I'm not sure my comments have eased your decision-making process, but I felt compelled to chip in my own two cents.

    ReplyDelete
  2. Software is getting mobile and ubiquitous, so maybe a good assignment is a mobile client to a server system. Maybe Series 60 3.0 + Flash + Linux server. See allaboutsymbian.com/software/Series_60_3/ and fring.com for ideas. This should be a "real world" business area.

    ReplyDelete
  3. My experience is that the guys in the class loved the "competition" aspect, and the girls dreaded it. I personally disliked being rated amongst the other projects as well as the secretive nature some of the teams took. In all the other classes, we helped each other through, and then we were suddenly competing.

    Another aspect I think would help is to require a requirements and design document to be made by the team. In the real work place there are templates for everything that you have to adapt to. It also would help keep each team on track to finishing.

    The aspect I hated about doing a game was that you were expected to have animated graphics. No one on my team was artistic enough or experienced with graphics enough to produce something spectacular. Some of the teams "hired" graphic design majors which I felt gave them an unfair advantage. So doing a business application would limit the animation aspect and make it more oriented to skills learned in the computer science department.

    Also, if some sort of source sharing access could be provided that would be more realistic. Learning Source Safe or CVS is daunting when you get into the workplace if you've never seen it before.

    ReplyDelete
  4. Having spent several years in Open Source -- I would suggest they tackle working in collaboration and focus toward feature enrichment for their favorite Open Source project. Teams can make or break a software project -- be it gaming or business.

    Trying to stay "team focused" toward common goals is very important. Fast paced and quickly changing requirements might prove interesting.

    ReplyDelete
  5. I think the only positive thing about making a game is that your non-technical friends and family can appreciate what you have done.

    There is no reason for the senior project to be a competition.

    There is no reason that every project has to have an AI. How many people end up using AI in the real world? I would suggest not enough to merit requiring it in the senior project.

    I also agree with all of kara love's points.

    While not as "exciting" to friends and family, I think there is more to be proud of from creating or furthering an open source project. Not only is it more practical, but it makes the software community a better place.

    ReplyDelete
  6. I appreciate all the feedback so far. I haven’t heard from anyone who actually liked developing games—I was one of those people when I was a student. I was also one of those who enjoyed the competitive aspect of the course. I wonder if we could foster more cooperation among teams while still keeping it competitive?

    Kara says that a requirements and design document should be made by the team. The last time I checked this was required. Maybe something has changed that I’m not aware of.

    Dustin makes a good point that games have a wow-effect on non-technical people that business apps don’t. It’s really nice to see the enthusiasm that everyone has at the software showcase at the end of the semester. I don’t think it would quite be the same for other types of apps. Mobile apps could also have the same wow-effect if people could download them to their phones and if the apps provided something really useful.

    ReplyDelete
  7. I don't think I'm the only one, but I did enjoy making a video game. A game does incorporate a lot of different types of skills such as artificial intelligence, user interface design, performance concerns, user help, and other aspects.

    One thing that I think that most games lack is a need for a non-trivial database. When our team wrote 'Deathstar Destroyer' there was no database at all and I think that is probably common with most other teams.

    I did enjoy the way the class was put together, however it might be nice to somehow create a class that is a capstone across multiple departments. Maybe the business department can figure out the strategy to price, sell, and market the game. The graphics department can be in charge of creating the images, movie clips, and buzz to sell the game. Programmers are usually not the most artistic or business savvy individuals, so involving these other departments could really make the final product that much better.

    One trend that I have seen in recent software development projects is the strong use of Flash and first-person type environments. Sure these are impressive to the game enthusiast, but in my experience these tools are rarely used in real enterprise level applications.

    At the same time, I do see your point about doing more real-world applications. If that is the case, I would encourage writing some kinda of online secure system to manage users and administrators and have them perform some kind of task. Maybe a health system, a banking system, or something along those lines. If you went this route, I would recommend that authentication and role based security should be required. I would require the use of a normalized database and encourage caching, indexing, and things of that nature. I would also encourage the use of AJAX, since its all the rage these days.

    I think that writing an application from scratch is important and I wouldn't recommend having them update an existing system. I mainly say this because most of what they will experience is updating existing applications. The exercise of writing an application from scratch will give them experience that they may not get otherwise and also better tool them with knowledge when they get to the point of updating systems.

    I hope some of these comments help. I enjoyed going through the class myself and I have enjoyed being a judge since graduation. I hope your class goes great. If you could, let us know what you come up with.

    ReplyDelete