Competitive Programming Curriculum
github.com
github.com
I don't get it. If it is agreed upon that this acm day is not reasonable or practical, why do we still need to define it and why is it 'suitable for feeling progressive' ?
The beginner/"pupil" curriculum is 28 "days", or 448 study-hours.
Conveniently for comparison, a college course is generally 15-16 weeks long. A 4-credit course would be 4×16 hours classroom hours, so a 4-credit course with 3 study hours per classroom hour would be 12×16 hours.
So the beginner curriculum is equivalent to two and a half of the hardest 4-credit courses in your degree program.
The intermediate/"specialist" curriculum is 37 "days".
I would imagine the "acm day" is both to not scare away the potential student and to actually make designing curricula of that magnitude feasible. (I used to write K-12 curricula professionally, and it's no small task.)
Under the clock, you push yourself beyond what you thought you were capable of and usually learn something about algorithms. This sounds a lot like startups.
That sounds like a startup to me.
So no, it doesn't promote writing bad codes.
The type of problems found in competitive programming are closer to the sort of things scientists would be looking at, rather than your normal corporate coder. For example, placing lightning detectors to improve accuracy while minimising the number of detectors. This is something that you're unlikely to find in a normal business, but is fun to solve.
The grand idea is that competitive programming helps you view problems from different angles, to chase optimisations, and to practice application of algorithms and data structures.
Also, team programming challenges illustrate delegation of tasks based on strengths, and often require teamwork to solve difficult problems. This collaboration obviously carries over to general work.
Source: I was a competitive programmer in university
If you're offering up that analogy yourself, I guess I don't understand why you're asking, "what's the point of competitive programming?"
The point of "competitive _anything_" is The Competition itself. What's the point of competition running?!? Shouldn't running be a utilitarian function of escaping an angry lion in the African savanna? Therefore, what's the point of Usain Bolt competing in sprints?!? It's the competition. Same reasons for competitions in spelling (spelling bees), cooking (Iron Chef), etc. Humans just like to compete.
You don't have to enjoy those competitions to understand why other people participate in them.
people are competitive, and competitions motivate. They aren't for everybody, but for some, they find it valuable. The competition and the coding ability are two separate life skills, forced together in the crucible of the high school education system.
I cannot criticize the motivation, or the fact that my students in high school can solve problems many professionals I know cannot. I can criticize that the competitive spirit marginalizes some of the groups we need to Encourage more.
Personally I use it to determine how a candidate approaches a problem. Most of these types of questions have an obvious solution that has a terrible runtime, and then have several optimisation layers on top of that.
I want to see:
* can the candidate reason about a complex problem that has multiple steps.
* are they able to offer a basic solution in pseudo-code (the dreaded "whiteboard" section).
* can they analyse their own solution, for example expected runtime, optimisations, etc (also how they handle criticism)
* how would they go about testing their solution - that is, what test cases would they use to verify their solution is correct (along with this, what error checking would they do)
There are no 'right' answers to these questions - it's about the process.
> I am still to see a problem which uses advanced competitive coding knowledge
In my work I've found it's not about applying a clever hack: its about recognising patterns and learning which algorithm/data-structure is appropriate, and how to apply it effectively. Just like in a competition.
Isn't this the whole point of this. The answer is obviously correct or not. Yes, there may be more than one correct, but saying "there are no 'right' answers" seems plain wrong in this situation to me.