When I learned to program, I think reading a lot of source code from different open source projects I was interested in helped me a lot. I usually picked up small enough programs. You don't need to understand the whole program either, if you're bored, you can satisfy yourself with only a piece of the code. You'll have to do that and read books too, because sometimes you will come upon programming constructs that you don't know but which are commonly used and documented in books. For example, once I discovered a linked list implementation and tried hard to figure out how the hell it worked, then later I read about linked lists in a textbook. Reading source code shows you how to write clean code (or at least recognize clean code from dirty code), lets you pick up coding styles you like, and above all shows you how scores of programming tricks and methods are used in the language of your choice. Things that you may only know from one lonely poor example or exercice, you will get them in the real code, with a more practical and significant context and purpose.