Mike Vanier has a nice blog entry that for some reason got Reddit exposure today. It's entitled Why I Hate Programming Competitions. I coach the ACM International Collegiate Programming Competition (ICPC) pretty often, and my criticisms of it are pretty much in line with Vanier's…
In my humble opinion, though, the single worst feature of ICPC is something not even mentioned by Vanier: at most institutions teams are selected by having the individuals compete and grouping the top students as team #1, the second batch as team #2, etc. What a horrible lesson for students, on so many levels. No notion of a synergy or specialization improving team strength. Almost guaranteed animosity among the team members. Nearly sure-thing hotdogging by a "team" of non-team-players. Typically little or no opportunity for the team to learn to work together.
In my long experience with ICPC, there is usually no teamwork at all among teams selected through individual competition; after a big initial fight each person takes one problem, solves it, and then fights again over the terminal. When a problem is solved, the individual moves on to the next one. If the team is a collection of individual superstars, this can be the most effective strategy at ICPC. Hopefully, no one believes it's terribly effective in real-life projects.
I managed over a period of several years to improve my team's ICPC rankings consistently year-to-year, by emphasizing teamwork and teaching a good customized process. As the contest is currently constructed, though, they'll never win even our region: I have a bunch of good, solid, extremely bright software engineers to work with, not a bunch of programming savants riding mathematical trick ponies. I can live with that. (B)