Increase Your Depth as a Programmer by Spelunking
catsonkeyboards.blogspot.com
catsonkeyboards.blogspot.com
Pick unexplored corners of toolkit you use, unfamiliar commands, try to learn a new language out in left field from what you already know, etc. Even if you don't use them directly, it's good exercise for your mind, and new ideas you encounter along the way will likely come in handy some day. You never know when a connection to something seemingly unrelated will click and lead to a breakthrough. (http://achewood.com/index.php?date=06132002)
I believe I have 80% of the java spec read by the same strategy from when I was a full time java programmer.
Some people in every field lack the skills or motivation to teach themselves, though programming probably amplifies this difference because there are so many new things emerging and so many niches, and because with enough motivation you can often just download an interpreter, toolkit, or live boot cd and start experimenting with it.
I know that for me, almost all of my knowledge of software development and knowledge about what tools are available on a linux system, and how they work (as well as about how the kernel works) came from this process of poking around, reading what was available to me, and then trying things out.
The process never ends.