programming is a creative domain and there are many ways to approach a problem. experimentation is therefore important to understand different aspects of a concept, problem or even the solution. tutorials and books are usually linear, good ones suggest you some experiments to do on your own.
a good programmer should have the patience to stay with one concept, problem or solution for a little longer and play with it, tweek the parameters and see what happens. the insights you gain from that are quite valuable.