In my unprofessional opinion and anecdotal experience, learning a language--programming or otherwise--is a mix of involvement, immersion, and implementation.
The ultimate goal to being fluent in a language is to THINK in that language. To get there, you have to:
Learn how the language does what it does (the keywords),
Internalize what that means and how it relates to the concepts you know (the ideas and semantics), and
Apply what you have learned day-to-day to solve problems (for example, writing a program--or asking where the bathroom is).
With that said, a book is a great start; just like parents are a great start to speaking a language. However, reading over other's code (like reading a book written in another language for more context), writing your own programs often to flesh out your understanding (like talking with others--stumbling is a GOOD thing, because it forces you to ask questions and get good answers), and finding a good community (like immersing yourself in a language's culture) will help you become a better programmer (or a better speaker).
There is a reason why the word "language" is used in both cases. Use that to your advantage.