In various contexts the subject of programming contests has come up in conversations I have been having with both teachers and friends in industry. There are, to my way of thinking, two sorts of programming contests. I call them the sprint and the distance race. They both have pros and cons and I’d like to use this post to express some thoughts on them and hopefully get some opinions from others.
The sprint is what most of us think of when we think of a programming contest. You lock teams into rooms with a computer, limited documentation and a list of programming puzzles to code solutions. The solutions are submitted, often to a computerized testing process, and get either a pass or fail. The team that completes the most problems with a pass grade in the shortest period of time wins. The pros of this are that it is easy to run, takes a limited and specific amount of time, winners are easy to pick, and it makes for quite a social day if done well. Colleges love to run these because it gets good students on campus. Teachers like them because they don’t have to spend a lot of time mentoring teams as they work through a long process.
The down side is that they contests really promote a quick and dirty style of programming – one that may not serve them well in their education or in careers in industry. One teacher said to me “they are not real computer science. they are just hacking.” I admit that I worry about that myself. But these contests do interest, excite, and often motivate students to study so they do have value.
The second sort of contest – the distance race – involves a single more complex project. An application of sorts that must be developed, tested and in the best contests “sold” via a presentation. The pros of this style include requiring well-thought out and engineered solutions because the testing will be more complex. They also require more involved coding, more team work, and the development of a clear and presentable explanation of what the program does and why it does it the way it does. You have to put some thought into it. In many ways it much more closely resembles industry or formal research tool development.
The down sides start with these projects being much more difficult and subjective to grade. They are also more difficult for students to finish because they required more work over a longer period of time. Students often have short attention spans or need more immediate gratification. This is especially true at the high school level. In many ways I think the benefits to the student and their education of this type of contest is well worth the effort. On the other hand the cons make it much harder for sponsoring organizations.
So I lean towards preferring the distance race over the sprint contests. That is the sort of contest that the Imagine Cup Design Invitational and Game Development contests are and part of the reason I like them. On the other hand practicality requires that more sprint contests are going to be run. And that is probably better than no contests at all.
So what do you think? Is there a third or fourth kind? Have I got the pros and cons fairly described? Or am I missing things?