Some thoughts about competitive programming
Many programmers may have experience in participating different kinds of coding competition while they are in college. Many of them are hired by top IT companies for their excellent performance during these kinds of coding competitions. There are some famous competitions organized by IT companies such as Google Code Jam, Facebook hackathons etc.
Coding competitions are places where programmers can show their talents in programming and the skills they have. Usually programmers will solve some toughest problems in programming or in real life, lots of them are algorithm and math related. f the participants perform well, they will get public recognition as well and will potentially get noticed by IT companies. However, apart from the pros, there are also some criticisms about coding competitions.
Competitive programming on platforms such as Topcoder, Codeforces, ICPC, Codechef, etc. have a lot of deficiencies due to the format. The questions are forced to be such that your solution takes a particular kind of input, runs for a few seconds and gives the output. Here are some problems associated with this format:
- It is almost impossible to have questions on approximate/randomized/parallel algorithms, etc. There are a lot of interesting problems in these fields.
- There are practical aspects of programming which are ignored due to the limit on runtime, e.g. caching, external memory accesses, etc.
- There are some algorithms which can't be asked because the time complexities don't suit the runtime limit. e.g. an O(2^N) algorithm may beat an O(N^6) algorithm for any input which can run in 5 seconds.
- It's difficult to ask questions which are interactive, e.g. a game where you have to make a move depending on some move by the judge. The field of online algorithms is also relevant here.
- Some algorithms which are difficult to code are ignored even though they give rise to interesting problems, e.g. suffix tree construction, voronoi diagrams, RMQ, persistent data structures, etc.