Hi Codeforces Community!
I am currently a high school student and an olympiad participant.
It may sounds silly , but I just wonder , what's the meaning of doing CP? One of my seniors once told me , many algorithms which are well-known for competitive-programmers turned out to be useless in reality.
I love CP , but is it really worthy to spend so much time doing it?
Thanks for advance.
Yifan Bao
2021 / 05 / 16
I probably asked a dumb question , if my words made you feel sad , sorry for that.
Why do babies try to walk or talk? They keep failing for so long, why don't they just give up?
And on another note: CP isn't just memorizing algorithms and applying them; it's learning how to problem solve, which is a skill that's very useful (and I've heard that being a good problem solver is one of the most highly sought-after properties of people in jobs, especially software jobs)
Thanks! I must admit that CP is really helpful for our problem-solving skills.
What do you mean by being useless in reality?
At least from my experience as a theoretical computer science student, more than half of the algorithms I initially learned for competitive programming have come up on university courses. This period alone one course used link-cut trees, another had polynomial multipoint evaluation and interpolation, and for the project of a third course which isn't even related to algorithms we are using Montgomery multiplication.
More fundamental algorithms from competitive programming come up way more often, not to mention how important learning to design and prove algorithms is.
It goes the other way too. One recent case I can recall is no regret dynamics on the NERC online round. We got the first solve on that problem.
If by "useless in reality" you mean "useless in software engineering jobs", you are probably right, though competitive programming is still a highly valued skill among the top companies (how that makes sense, I don't know).
Ok now I am curious to know what courses you are doing at your university XD.
Link-cut trees appeared on a course called Advanced Graph Algorithms and Optimization (see chapter 13), the polynomial operations on Cryptographic protocols, and we're using Montgomery multiplication to vectorize modular multiplication on a course called Advanced Systems Lab (it's a course about writing fast code).
The meaning of doing CP is not the same for everyone. You have to find your own reason. For some people, they do CP because they enjoy it like an entertainment. Some just love learning. Some may say they they do it to prepare for future jobs. And there are still a lot of reason to enumerate.
My advise to you is if you think CP is not doing anything good for you, then stop doing CP. But if you have any reason (for whatever reason just like what you said — you just love CP) then just continue. Anyhow, it will not harm you. It will just take a lot of your time but in return, you got to learn.
Do you have something more interesting, entertaining and productive hobby to do? If not, continue CP.
The vast majority of software developers are doing application programming. That requires nearly nothing of the stuff you learn while doing cp. Apart from that you need to consider that since the complexity of software development rises further and further, software development becomes less programming, more organizing. Writing code might be a dying craft.
So it depends on your "reality". If you want to earn money you can spend your time way better.
Thanks for commenting. I totally agree with you.