If you really want to learn something, then the best way to do that is to start working on that something and also spend some time learning the theoretical part.
I remember reading something about object oriented programming some years ago, but that was only book knowledge. Reading books made me aware of such thing as “composition” or “inheritance”. But book knowledge really cannot beat practice – I never really used that knowledge anywhere, and wasn’t really learning.
This week I’ve read some more about inheritance and composition. I created some of the game’s first classes, and that’s where this stuff really goes to my mind. I’m not going to suggest that I’m a c++ expert after couple of days coding, but I have learned great deal about how classes should work and when composition can be useful. At least if I compare my current c++ knowledge to what it was one month ago, there’s a huge difference.
I read some c++ books, studied object oriented programming and now applied that knowledge in practice.
There’s a Japanese proverb that fits to this situation quite well.
Vision without action is a daydream. Action without vision is a nightmare.
Just reading books will mean no finished code. Not reading books (about best programming practises, design patterns, you name it) and simply trying to start from scratch would probably lead to a one big mess – at least for those who are new to the language. Combining theory and practice might yield the best results. And for at least in my case this seems to be working pretty well.