What Is It With US Students and Programming Contests?
blog.acthompson.net
blog.acthompson.net
When I was actively working on improving my performance in the contests, I had to spend quite a bit of time practicing, and the practice is such a domain specific exercise that it really isn't that applicable to the real world. You are trying to optimize the following cycle: quickly read problem, identify type of problem, figure out applicable algorithm, find page in notes with that algorithm written out, try to write most concise possible code by hand, work with teammates to coordinate computer time (one computer per team!), submit, print, debug on paper, wait for feedback, if right move on, if wrong continue debugging on paper. Improving on each of these skills requires very specific practice that is often unrelated to any engineering skill. For example I saw many teams perform really badly because they couldn't manage the computer time properly. What a ridiculous skill to learn in 2013... sharing one computer between 3 people!
This just isn't that useful in the real world. In the real world you have a computer of your own, most of the things you are solving aren't algorithm problems, and you are trying to write readable and maintainable code. So basically the opportunity cost of continuing to improve in the contests was improving as a professional software engineer (IE my future profession), and the glory of potentially winning one of the programming contests just wasn't worth it to me.
What if these contests were more of an 8 hour practicum, everyone has their own machine (and each team has a meeting room with whiteboards?). At lunch you have to replace every member on your team with fresh faces who didn't watch anything you did, only get the problem description (subject to change) and any documentation you left in the code.
Probably wouldn't be as fun, but might provide slightly better signalling.
The indication that I've gotten from employers in Silicon Valley is that success in these contests is, if anything, overvalued as a signal for hiring. So the author is correct that the incentives aren't lined up to get CS students to participate in programming competitions.
I don't know whether this will be a problem for the US. It isn't right now, but you could imagine a potential future where US vs China in programming competitions becomes like chess competitions between the US and USSR during the cold war. I'm sure if that happens, the US will step up the participation incentives.
That does lead to the next-order question of why American universities don't care about such contests (if indeed they don't).
[1] The 2009 UC San Diego data-mining competition, which seems to have disappeared from the web, but is archived at http://web.archive.org/web/20101124175648/http://mill.ucsd.e...
[1] http://math.scu.edu/putnam/index.html
[2] https://en.wikipedia.org/wiki/William_Lowell_Putnam_Mathemat...
However, competitions like this are more focused on algorithms/math, which might not coincide with American universities' focus on software engineering. Hackathons, which do coincide, seem to be far more prevalent.
While I don't think algorithmic programming contests are something inherently worthwhile, a lot of the replies here greatly understate their value. I have found that the experience provides some significant value in my work, in the form of recognizing moderately hard problems as problems I've solved in the past or just being able to write stock algorithms correctly without much thought. This might not apply to every job, though. A much more concrete benefit is that reaching even a moderate level of proficiency in algorithmic programming contests (like yellow on TopCoder maintained over a long period of time, or doing decently well at multiple ICPC regional contests) will build the same skills that are tested by most hiring processes at a higher level than the hiring processes generally test for.
Outside of a job interview, I don't see why this would be a good idea. If you need a stock algorithm and your environment has a stock implementation, why on earth would you roll your own umpteen zillionth implementation?
Sometimes you have an embedded problem or some weird feature of the problem domain that favours a non-stock algorithm. But that surely suggests only knowing algos to the depth required to pass Algorithms 202 ("this is an odd case, I'll look up the alternatives"), not having muscle memory that can instantly spray plain mergesorts into a text editor.
When it comes to providing stock algorithms, most environments are woefully inadequate. I have not yet encountered an environment with a usable maximum_bipartite_matching(), ternary_search(), or bfs(). To be usable, it would need to be easier to convert my problem instance into the types accepted by the library function than to write the code that does the right thing on my types. STL's next_permutation() is the only next_permutation() in any environment I am familiar with, and it does a great job. I believe I've also encountered one stock implementation of binary search that is useful for the case of "binary searching on the answer" (rather than just binary searching in an array), but this isn't a big deal because it saves you maybe 3 LOC.
I don't really know or care which exact elaboration of quicksort that my database engine is using. I'd be unsurprised if there aren't a few that it chooses amongst at plan time. I just say ORDER BY and get on with the rest of my work.
Alternatively I could pull the unordered set and write my own sort. And I'd hope to be committed to an institution for the criminally wasteful for such an act.
Personally, I've found many benefits to competing (or even practicing for) programming contests. Not least of which is personal enjoyment and mental exercise.
I might be interested in, say, a 12-hour Rails contest to see who makes the best website in a day. That's actually building things--solving real problems. But that's of course not realistic for most CS students.
Something more like the netflix contest is more interesting and long-term sustained. Allows you to think better.
Which all isn't to say that studying algorithms is bad. It's not. But I don't want to be tested on speed-algorithming.
/me shrug
We are paying real money to have access to bright teaching staff and be able to take classes. I couldn't justify spending more time practicing for contests.
You win programming contests by making computers perform better. That's hard. You win product management contests by making humans perform worse. That's easier. Doesn't conflict with the drinking schedule.
Look at the solutions of problems from the top 10. I wouldn't hire any of those people.