After reading a codinghorror article I came across this in a comment:
Good programmers also figure out their best method of self-learning. I'm one of the oddballs that reads the entire manual.
That struck me as interesting. I know I learn in what's probably quite an unusual way. I'd be interested to know how other people here learn.
I teach myself new stuff in a very exploratory way. For each of the new languages I've learned since starting at justin.tv I've spent probably five or ten minutes learning the syntax. Then I jump in and start writing a real program that needs to be released within a week or so. I usually start by writing a "hello world" program, and just add stuff to that until it does what I want (of course, as I learn new tricks I frequently remove a bunch of stuff). If the language has a REPL I use it constantly. If not, I fake it by just printing expressions in my program, and working in a tight loop of editing and running the program again and again to see how the output changes.
I rarely use a reference at this stage unless it's to achieve something concrete. For example, I find myself googling things like "actionscript string search", but only after trying a couple of likely-seeming things myself (i.e. I'll actually just write things like trace("foobar".find("bar")) and trace("foobar".index("bar")), etc until the compiler stops whining or I run out of things to try).
Funnily enough, after I've written a real program that works, and I feel like I understand the language a bit, then I go back and read the reference books thoroughly. It doesn't work the other way for me - I need to have had the exploratory phase and built up some context so that I can read the books properly (and it's fun to read the books at that point and remember how I "discovered" each feature that's discussed).
Programming is similar. We make mistakes and brute-force our way through. We start to recognize patterns. That's experience. It's a lot easier however (even though it's all in the head) to do fail in something if it's only you and the compiler/runtime (who cares if it doesn't work right away, you know it will) - when other people are involved, it's a lot harder (fear of what people think)