Programming Competitions, HARD to say 'I Love U'
A post about why I give up programming competitions.
(Originally published to CSDN on Dec 28, 2005)
It is TrendMicro who starts another programming competition these days. Some school mates are urgent because the champion prize is 1,000,000 RMB. (Google did a similar event earlier.) However, I give up this chance again. Somebody may say oh it is FOOLISH. Yes, I should second everything once, but I have an analysis of what I would probably gain during this sort of process.
Time Limited
Normally we can see that this kind of events are held for a week or just three days. It is a competition so in order to find the champion, who finish in time will probably succeed finally. It is also true for true world (No consumer can wait for a Bubble Soft). However, UNIX and Linux show that without a timer, people can do some really revolutionary things. My project CBC is a good example. I liked to improve it bit by bit so as to use it every day at the beginning, so I am not eager to share it across the Internet until I found that somebody else needed its help. However, this helps me to publish CBC but does not force me to speed up in order to be perfect. I use this tool daily and fill myself with a lot of imaginations sometimes. As a result I keep a long list of features. I wish I can do more with CBC 2 but actually find that lots of features are not really productive. I use CBC for single files, and never try to format a project at a time (although this feature has been implemented). WHY? It is my habit or something could help you reduce dangers (CBC is still buggy, remember)?
It takes me a lot of time on CBC. In fact for as long as a half year I have spent all weekends time coding or making manuals. Sometimes I could find some easy way out there without endless trials if I think a lot (for example a long week) before coding. If the work should be done in a few days, I would kill myself first. I hate this limitation but it is a usual competition rule.
Multi-Role
I did nearly all the things about CBC. It is a mistake but I could not find some partner here in my lab and also I am so lazy to contact others. It is sometimes smart to play only one role in a group IMO. WHY? If I keep thinking about Design Patterns I may find some better architecture for CBC (SBT is good but not perfect). However, I have to update the manuals with LaTeX before releasing a newer version or try to rewrite the NANT script or Inno Setup script to accord with any new changes. BAD. Actually I am trying to reread Design Patterns book again. So, BigFace may come late in the coming year.
What’s New?
This kind of competitions can never be won if you know little about software engineering or XP/AP IMO. For example if you fail to use a Version Control System while coding, it must be a disaster in the near future (the second morning may be that time). Also, unit testing and daily build are required. Requirements should be done and manuals and documents must be included. Anything new I haven’t met in project CBC except team work? So WHY I should waste my time on these events if I am not interested in? Try to find a partner, and it is a good idea.