Many people warn you that if you solve a lot of problems on Topcoder or Codeforces, you will eventually turn red. Although it is the only method that the competitive programming community has found to be universally acceptable, it is only half of the story. First, allow me to explain the {science` of problem solving (which is not very scientific, as I am the only one who developed it).
You have to leap over a gap in order to solve each problem. It might be a challenging algorithm, a challenging observation, or a challenging implementation.
Certain problems, like Codeforces divisions 2 A and B, are very simple for me because I find the gaps to be so tiny that moving through them feels like strolling.
Some issues are really challenging. The gap is simply too great, or there are numerous gaps, and you risk becoming stuck in the midst due to exhaustion from perhaps the first gap.
We can explain many phenomena in the world of competitive programming with this science:
Some guys pick things up quickly; one guy who started programming only a few weeks ago was able to reach division 1 in Topcoder/Codeforces. Some people have high jumping (or problem-solving) abilities from birth. They have little trouble jumping average gaps.
The more you practice, the more proficient you get. Naturally, if you jump all day, you must be somewhat more adept at leaping through gaps, which will enable you to finish more challenging tasks faster because you won't need to spend a lot of time warming up or mentally preparing before jumping.
However, this also implies that you can only move through tiny gaps if you simply solve too simple of a problem. You can move through gaps more quickly, but jumping is still not possible.
So yes, practicing a lot is the best way to develop competitive programming skills, but you must also solve increasingly difficult problems, not just the simple ones. Step outside of your comfort zone and take on new challenges. As an illustration, if you resolve issues on Codeforces:
Sort by the total number of solvers.
Turn to page 1 first.
Resolve a few issues. If you think you can finish them in five to ten minutes, go straight to page 2 and disregard the other problems.
Proceed until you experience a sense of challenge (e.g., it takes you an hour to solve, you can't solve it at all, etc.).
Try your hardest, but if you don't succeed, read the editorial and seek answers.
You have to leap over a gap in order to solve each problem. It might be a challenging algorithm, a challenging observation, or a challenging implementation.
Certain problems, like Codeforces divisions 2 A and B, are very simple for me because I find the gaps to be so tiny that moving through them feels like strolling.
Some issues are really challenging. The gap is simply too great, or there are numerous gaps, and you risk becoming stuck in the midst due to exhaustion from perhaps the first gap.
Some guys pick things up quickly; one guy who started programming only a few weeks ago was able to reach division 1 in Topcoder/Codeforces. Some people have high jumping (or problem-solving) abilities from birth. They have little trouble jumping average gaps.
The more you practice, the more proficient you get. Naturally, if you jump all day, you must be somewhat more adept at leaping through gaps, which will enable you to finish more challenging tasks faster because you won't need to spend a lot of time warming up or mentally preparing before jumping.
However, this also implies that you can only move through tiny gaps if you simply solve too simple of a problem. You can move through gaps more quickly, but jumping is still not possible.
So yes, practicing a lot is the best way to develop competitive programming skills, but you must also solve increasingly difficult problems, not just the simple ones. Step outside of your comfort zone and take on new challenges. As an illustration, if you resolve issues on Codeforces:
Sort by the total number of solvers.
Turn to page 1 first.
Resolve a few issues. If you think you can finish them in five to ten minutes, go straight to page 2 and disregard the other problems.
Proceed until you experience a sense of challenge (e.g., it takes you an hour to solve, you can't solve it at all, etc.).
Try your hardest, but if you don't succeed, read the editorial and seek answers.