Theory are really important. Unfortunately, it is hard for us to understand
theory without practise on the machine. Sometimes, it seems we have
understand the words in the book, but we really have no idea how to
use it, how to relate it with practical programming. Take the iterator as
an example, you can understand the basic idea within half a hour. But it will take you many and many hours to become proficient in using various of iterators in C++. Even in Java, it will take you several months to understand the essence of Iterator interface. By the way, I suggest choosing those books that are easy to understand. Some classic books
are not easy to understand.