There are many variations, but I find myself repeating these steps again and again when I learn a new language, library, framework... sometimes all 3 at once.
Step 1. Read

Get hold of a good range of documentation on the subject. If you were to start learning to program for the iPhone, for example, you'd get by getting material on Objective-C, iPhone SDK, Xcode, Cocoa, OpenGLES, Quarz2D, Interface Builder and maybe something on designing atractive user interfaces.
Then divide those documents in 2 categories, those interesting for you and those which aren't. Not gonna do custom drawing? Drop OGLES and Quartz2D. Already familiar with Objective-C? Don't bother re-learning it, obviously.
From those interesting, divide them again in 2 categories, fast reads and long reads. Fast reads are usually up to 10 pages long and have condensed information, and long reads are complete books, roughly 200 - 600 pages long.
Read the fast reads with the utmost concentration, trying to actively understand, to comprehend. Skim long reads taking careful notice of what is explained where. You will come back here when you're faced with the particular problem you need to code.
Step 2: Code

Code, and code, and code.
Start by hello world tutorials for the new skill you're learning. Then do a few more tutorials on the most important subjects. Move up to checking samples in the downloaded code (almost all libraries have a "Samples" folder which can be of the utmost help).
Once you get the preliminaries out of the way, get on with whatever you wanted to code in the first place, or if it was just a learning exercise, mark yourself a few goals to code ( a pong, a random number generator, a tetris...) and keep coding. When you need something you don't know how to code, your first stop should be those books you skimmed earlier, then google, then asking in forums.
Step 3. Read

There will come a time when you are ready. When you don't go around copying lines of code from tutorials, when you don't need to check the documentation each time you need to declare a list object, when you can get a problem and see several ways of coding it.
Then you know the time has come. Get back out those books you skimmed at the beginning and start to read, calmly. Give yourself a few months to read trough it all, with attention. Don't make the mistake of thinking you already know.
From this last read you will get a lot. 100's of small details that will make your coding skill go up a notch. You'll discover such obvious ways of doing some things you had to make some long and ugly hacks before.
Just that, and keep coding.






