In the end programming is a craft you have to perfect by plying it.

If you’re lucky, you can do it at work. But even in a work environment, where your’re learning on the job, I think that to really be good you have to learn faster than your job will make you learn things. You have to supplement what your job is asking you to do. If your job requires that you do a Tcl thing, just learning enough Tcl to build the interface for the job is barely adequate. The right thing is, that weekend start hacking up some Tcl things so that by Monday morning you’re pretty well versed in the mechanics of it.

- Bernie Cosell - Coders at work