
Competitive Programming Curriculum - melzarei
https://github.com/AhmadElsagheer/Competitive-programming-library/tree/master/curriculum
======
misja111
"An acm day is a day at which you do nothing but pracitce, typically spending
16 hours in practice and sleeping/eating/doing other stuff in 8 hours. For
sure, this is not reasonable for our daily lives, but we need to define such a
day as it is suitable for feeling progressive."

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' ?

~~~
pflats
I was curious too, so I took a closer look.

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.)

------
pgt
Competitive coding competitions are useful because they force you to exercise
some valuable real-world skills: shipping technical solutions on a schedule
while prioritising problems of unknown size in order of your own team's
abilities.

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.

~~~
zhirzh
> shipping technical solutions on a schedule I strongly disagree. Competitive
> programming (CP) simply requires you to solve, more often than not,
> mathematical problems and puzzles. The main focus is on getting the solution
> as quickly as possible with no regard for the code quality or maintenance.

~~~
escherize
> The main focus is on getting the solution as quickly as possible with no
> regard for the code quality or maintenance.

That sounds like a startup to me.

~~~
rak00n
You face the same problems though. Bad codes are hard to debug and a simple
mistake can cause you big time penalty. Some solutions get too complex to
implement in time if you write bad codes.

So no, it doesn't promote writing bad codes.

------
rf15
I'm curious; what's the point of competitive programming? It strikes me as
opposite to our actual goal of programming in collaboration/the metrics
applied do not seem to further the general quality of our work and output.

~~~
DonorBear
It provides a great way to explore different areas of math and cs.

~~~
rf15
Which is why I enjoy the questions, but not the competitive mindset
surrounding it. It's like casual cycling vs racing.

~~~
jasode
_> It's like casual cycling vs racing._

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.

~~~
rf15
Good conclusion. Yeah, I don't think I understand competition as a whole, and
this is just another facet of this.

------
likelynew
Can anyone here explain why is competitive coding used so much in the hiring
process. I think while basic things like asymptotic complexity or binary
search are sometimes used in real world, I am still to see a problem which
uses advanced competitive coding knowledge. Why base so much on a test that is
almost surely never used. I am generally good at competitive coding, and I
think I will be on the gaining side once I graduate, but still.

~~~
overlordalex
Mainly because us interviewers tend towards the sadism end of the spectrum /s

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.

~~~
likelynew
> There are no 'right' answers to these questions - it's about the process.

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.

------
BreakingQuarks
Do I need to buy the Competitive Programming books if I want to participate?
Most of the resources seem to be from them.

------
soreq
sometimes, you just gotta prove it.

~~~
dovdovdov
other times, you get hired. :D

