The Best Way to Learn is not by Reading a Book
Often people ask me what the best book to learn a programming language is. The thing is, reading won't get you far. Sure it'll help you by doing rather boring exercises, but there's a better way: learning from the start.
Recently, I started learning Java so I could make plugins for the popular Bukkit server mod for Minecraft. I picked up the supposedly best book (Head First Java) and started reading. Most of the exercises were easy. They were just tedious. But for some reason, they refused to stick in my head.
I then decided to follow some Bukkit plugin writing tutorial. It didn't make sense to me. I thought to myself: Player listener, block listener, what's a listener anyways? Confused and frustrated, I took the advice of people from #bukkit and went to GitHub to find a plugin that was similar to what I was trying to do. I then played with the code a bit and realized what these listeners were. When I didn't know something, I Googled it. Now I have a good understanding of Java and know how it works. Public, static, void -- they all make sense to me now.
I wanted to learn Java; I got where I wanted to be from just coding from the beginning. You don't have to learn first to be able to do. I did the same with PHP back when I wrote plugins for PHP-Fusion -- and PHP was my first programming language. Now, since I need to learn C/C++, I'll be writing an iPhone app.
The same could be applied to most things. Learn the rules of a video game by brute-forcing random buttons. Learn a language by translating and looking up words immediately. (I did that with Latin) The best way to learn something is not from a book, but from learning things as you need them. That way, you'll be able to dive into the subject right away.