I found this article explaining the differences between a good programmer and an average one
I’m pleased that i can read that list and honestly say I am/do most of those things. Possibly the notable exception is reading books. I agree with one of the commenters in that books are virtually outdated from the moment they’re printed. Software is changing so fast, the most beneficial information you could get from a book is not instructions on implementing a solution (ie: “Teach Yourself XXX in 24 Hours”), but the theories behind good solutions (eg: “Design Patterns: Elements of Reusable Object-Oriented Software“).
I own both, and I have rarely ever picked up the former after reading it.
Technology books are up-to-date only as far as the technology they speak of are still up-to-date technologies…
For instance, a book on .NET 2 is up-to-date only while .NET 2 is up-to-date – once it has become an out of date language, then the book is out of date.
I fear that it is unfortunate that many people in the software development circles feel that many books are out of date – when they should be referring to more books that are in date. For example, early on in a programming career it is useful to read books on algorithms, design and optimization (particularly Big-O notation), but a book on “1001 ways you can use Version 2.1.342 Build 3 of HotProduct” is almost certainly useless, unless you actually need to know how to use that product – in which case the product’s website is more likely to be useful.
The most useful books are those that discuss trade offs between historical choices (whatever they are), why they were good at the time, and why have they proven to be a poor choice today. (For this reason, I find reading about early Unix, and early Windows design and implementation to be quite interesting, and likewise when it comes to programming paradigms.)