Competing in algorithmic programming competitions is an extremely eye-opening experience. I competed in 3 ICPC regionals during my time as an undergrad and realized that my level of knowledge in core/fundamental algorithms was (and still is) an absolute joke compared to some of my competition.
I realize I didn't exactly put a lot of time into practicing and learning new material, but now that I've graduated I'm hoping to practice more and eventually try raising my rating on TopCoder. If anything, training for ICPC drilled the basics of algorithms and data structures into my head and lead me to find tons of excellent resources for improving in these competitions (and consequently, programming/problem solving in general).
Seriously, having competed in only 1 regional ICPC myself, I was blown away at the level of knowledge of some of the students. Some kids were coming in from high school with serious programming skills. Makes me sad when I go back to work now and never get to use any of these interesting algorithms.
Indeed, most of the top competitors have been practicing since high school. We were lucky to assemble a team that has been training well before.
MIT's team consists of freshmen who are still in good training since their national high school math olympiad trainings from their respective countries.
I highly recommend the book Competitive Programming 3 by Steven and Felix Halim (https://sites.google.com/site/stevenhalim/). I prefer the larger print version as it's much easier to read and have laying on your desk. It has tonnes of references to problems on the UVa Online Judge (another popular judge site) at the end of each chapter so you can work on problems relating to the covered theory.
My first serious introduction to algorithms was through Tim Roughgarden's 'Algorithms: Design and Analysis' course on Coursera. It's a nice formal introduction and really focuses on and builds an intuition for how to think about problem solving like a computer scientist. I'd also recommend Steven Skienna's Algorithm Design Manual as it's written in a similar style.
As mentioned earlier, the TopCoder Online Judge is a great tool to practice problems as well. I could never find a tutorial which covered how to effectively use TopCoder as a practice tool so I wrote one for my programming club: http://acx0.com/cpc/topcoder.html (note: the rest of my site is a complete mess right now)
Of course, there's tonnes of other resources out there but these would be my top recommendations so far.
There are several companies in the valley that are going hard for ICPC winners. MemSQL is certainly one of them. In the past contestants were mostly going to big companies like Google. Hopefully we will see more and more of the top competitors joining startups.
Does scoring well on these contests typically translate into being a good coder in business? (I'm genuinely curious, not implying anything). It certainly means one is bright. Would one be perpetually bored not finding coding for money challenging?
I can't speak for typical or usual, but, I attended 2 ACM ICPC regionals (southeast) & am gainfully employed in software. Last I knew, my two teammates were as well.
Of course raw coding talent & algorithmic skill are paramount, but what's neat about this contest is there is only one keyboard per team, so things like these quickly set teams apart:
* ordering the problems according to difficulty
* architecting a solution before implementing it
* concise, effective, communication
* using brute force when elegance adds time
* knowing your environment like the back of your hand
* ability to thrive under pressure
In my opinion, skills like these translate really well to success in the fast-paced, agile shops that are flourishing in many markets.
out 12 team that received medals:
4 teams from China,
4 teams from Russia,
1 team from Croatia,
1 team from Japan,
1 team from Poland,
1 team from Slovakia.
I think the amazing thing here is that the top 18 teams solved as many problems as Stanford, CMU, and UC Berkeley combined, and those schools are currently 3 of the top 4 ranked CS undergraduate programs in the US.
To be frank, competitive programming is a niche field which requires years of practice.
Imagine it like solving problems in mathematics , the better your brain is used to solving similar problems in the past, the faster you will end up solving the relevant task at hand.
17 comments
[ 3.5 ms ] story [ 53.2 ms ] threadI realize I didn't exactly put a lot of time into practicing and learning new material, but now that I've graduated I'm hoping to practice more and eventually try raising my rating on TopCoder. If anything, training for ICPC drilled the basics of algorithms and data structures into my head and lead me to find tons of excellent resources for improving in these competitions (and consequently, programming/problem solving in general).
Indeed, most of the top competitors have been practicing since high school. We were lucky to assemble a team that has been training well before.
MIT's team consists of freshmen who are still in good training since their national high school math olympiad trainings from their respective countries.
My first serious introduction to algorithms was through Tim Roughgarden's 'Algorithms: Design and Analysis' course on Coursera. It's a nice formal introduction and really focuses on and builds an intuition for how to think about problem solving like a computer scientist. I'd also recommend Steven Skienna's Algorithm Design Manual as it's written in a similar style.
As mentioned earlier, the TopCoder Online Judge is a great tool to practice problems as well. I could never find a tutorial which covered how to effectively use TopCoder as a practice tool so I wrote one for my programming club: http://acx0.com/cpc/topcoder.html (note: the rest of my site is a complete mess right now)
Of course, there's tonnes of other resources out there but these would be my top recommendations so far.
Live comments about the problems from the legendary Petr Mitrichev: https://docs.google.com/document/d/1rjGwA7ChLJr2ibHVbt-GirDp...
Of course raw coding talent & algorithmic skill are paramount, but what's neat about this contest is there is only one keyboard per team, so things like these quickly set teams apart:
* ordering the problems according to difficulty
* architecting a solution before implementing it
* concise, effective, communication
* using brute force when elegance adds time
* knowing your environment like the back of your hand
* ability to thrive under pressure
In my opinion, skills like these translate really well to success in the fast-paced, agile shops that are flourishing in many markets.
https://twitter.com/ICPCNews
Imagine it like solving problems in mathematics , the better your brain is used to solving similar problems in the past, the faster you will end up solving the relevant task at hand.