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?
Interesting. I've heard of both types of contests, but have only seen the latter. I have to say I agree with your thoughts on the sprint style of contest. However, I can't say that the biggest issue with the distance competitions is the lack of attention. If someone is ambitious enough to succeed, they will. I think the issue with distance competitions is the lack of instant gratification. There is such a high volume of entries, it becomes hard to provide feedback to each person. If there was more feedback in distance contests, like the Imagine Cup, I think it would help teams become more productive.
I've done both and both can be made to work well. The point to bear in mind about the one day competitions is that success is never about programming and always about team organisation. I used to judge BCS one day contests and I'd walk into a room and see one person working on the single computer we gave them and four people waiting for their turn and I'd think "They've lost". On the other hand where I saw a team where one person was using the computer, one person was writing test cases, two were testing the algorithm by hand against these and the fifth was checking the spec against the solution I'd think "They have a good chance". I don't think the one day competitions encourage bad code. If I was making a quick roadside repair to my car I'd not be as thorough as I would be if I was doing the same job in my garage. The competitors work in the same way. A good programmer should be able to make the solution fit the circumstance.
I reckon that calling them Programming Contests is not really a reflection of what is going to happen. Most of the success comes not from the quality of the code, but how well the team works together. And for the competitors the biggest win is never in the coding skills they gain, but from the experience of being in a team and working together to achieve something.
Something a kin to racing might be interesting. Several smaller competitions that all build on each other. That way design elements make more of an impact, but you still have the sprint feel to each competition.
I have been involved with a group in my state that runs one of the long term competitions, http://challenge.nm.org However, they encourage students to enter the quicker events as every bit of coding can help students in the long run. Some are actually sponsored by the group.
Because of the focus needed for a year long competition, the group has also lent it support to http://projectguts.org which is really a non-competitive group for middle school with a short focus on many different topics that students could use when they get to high school.
Seems to work fairly well.
You forgot the third type of contest, popular in Texas.
Multiple guess test.
Sorry but I had that type and I hate the lock them up in a room.
I would go for a long term contest, and in fact, encouraged my kids to enter the Texas Biink contest.
I agree with Rob Miles that the one day competitions reward teamwork. I think that they also reward quick thinking and excellent problem solving skills.
But, they certainly don't reward software engineering skills, and I worry that they may teach students that those types of skills have no value.
I agree with the teacher who complains that the sprint version "isn't real computer science", though I don't think they're doing *harm* either and are fun for some students. One issue is whether the distance type are "real computer science" either. They may be "real software engineering" but I wonder how much they promote understanding the concepts underlying computation.
Much more importantly, I'm a huge fan of collaborative activities over competitions. The Julia Morgan Celebration of Mathematics contains several computer science activities. The energy of a room full of kids working on math and computer science, sharing ideas, and all working together is terrific. And at the end of the day, everyone wins, which is even better.
I think that the competitions themselves serve a different purpose than the one we are debating here.
Yes, if you mearly grab your best students and bring them to a competition to see how they do, then all of the above arguments are valid. I would however claim that the deliberate preparation for these competitions can allow you to enrich your brightest students and explore concepts outside the rigorous curriculum. How satisfying is it to have a student within the first few months of entering your programming classroom ask about graphs? or optimization? (because they are timing out on the test cases)
I used the USACO training problems to enrich these students and allow them to explore concepts as they needed them, not because I contrived a lesson that set them up for using them. I dont think I could have done anything better to encourage bright, intelligent, curious students to find a love for CS than let them work with puzzles that motivated the very concepts I was trying to teach.
So again, I say its not in the actual competition - I believe the purpose of those are much more useful as political power (look what our students just won/accomplished, lets get some good press out of this), but the preparation that is key.