This article is perfect for understanding what deliberate practice is.
It boils down to the fact that you need to distill out the hardest elements of your skill and practice them to get better overall. If you don’t, at some point you will get stuck in your comfort zone.
Let us briefly illustrate the difference between work and deliberate practice. During a three hour baseball game, a batter may only get 5-15 pitches (perhaps one or two relevant to a particular weakness), whereas during optimal practice of the same duration, a batter working with a dedicated pitcher has several hundred batting opportunities, where this weakness can be systematically exploited. *
I have heard some people say that programming contests (like Topcoder, ACM, etc.) do not matter, because in a programmer’s everyday job, problems that resemble those in a programming competition are a tiny portion of the work.
Programming contests make more practical sense if we consider them from the perspective of deliberate practice at writing code.
Using the baseball analogy, writing complicated code during your job is like pitching during a baseball game. Most of the code written is just boilerplate glue code. When coding for a large project, it’s hard to distill that experience of writing the non-glue code. To get better at writing the hard stuff, you need deliberate practice.