Many developers need to spend more time focusing on their core skill-set, as opposed to chasing after the current “hot technology of the month”
When I started out as a programmer, almost every book or article I've read was about technology (mostly related to C++ and later on .NET). The books and articles that I've read over the last year are mostly about core skill-sets:
- Domain-Driven Design: Tackling Complexity in the Heart of Software
- Applying Domain-Driven Design and Patterns: With Examples in C# and .NET
- Practices of an Agile Developer: Working in the Real World
- Patterns of Enterprise Application Architecture
- Design Patterns: Elements of Reusable Object-Oriented Software
I've read the last two books for the third time already. The books that I'm planning to read this year are:
- Refactoring: Improving the Design of Existing Code
- Refactoring to Patterns
- Test Driven Development: By Example
- Working Effectively with Legacy Code
- Agile Principles, Patterns, and Practices in C#
just to name a few. Keeping in touch with the "technology du jour" (I'm now reading the excellent Programming WCF Services) is also important, but not as important as the core skills. It's just that learning about Object-Oriented Programming, Domain-Driven Design and Test-Driven Development, Design Patterns, ... etc. are skills and techniques that you can keep using for many years to come.
When asked the question “Do you know how to program in Objects?”, the answer is almost always a resounding yes. After a bit of careful examination it often becomes evident that lots of people (not just in the MS world) are writing procedural code masquerading as objects.
I must admit, I've done this too before I took a dive into Domain-Driven Design. I think this is used a lot in the .NET community, especially because Microsoft promotes it this way. The resulting code is hard to maintain and business logic is scattered all over the place.
My admiration goes to people like Karl Seguin and his Code Wiki, trying to create awareness and do something about it. Through the use-case of a Wiki, he shows how to create simple, maintainable, object-oriented software. Actually, the source code of the Code Wiki can be explored through the Wiki itself (how is that for eating your own dog food). If you want to become a better programmer, take a look at the source code and read the first two chapters of his book on The Code Wiki.
You can read as much books as you want without getting your feet wet, it's useless. Trying things out for yourself is fundamental in becoming a great programmer. Instead of reading books and articles, have a look at other people's code. Checkout the source code of your favorite open-source project and dive right in.