Software development is not a spectator sport. You cannot become a good software developer by reading books, reading magazines, watching videos or listening intently to the musings of a “software guru.” The only way to become a software developer is by sitting down, entering some code and seeing if it works. It's as simple as ABC: Always Be Coding.
As time progresses you progress as a developer. You begin to grok all of the nuances of your respective language(s), tools and operating systems. You no longer write code, it just flows from your fingers. You go from Padawan learner to master and then maybe you become that “software guru” yourself. But then something happens. You become comfortable. You think you really know it all, you “have it down” and you can accomplish anything with the skill set you have created for yourself. This mentality is hazardous to your health and career. You see what you know today will very likely be obsolete tomorrow. The technology world moves fast and changes and if you put on the warm blanket of comfort you will inevitably find yourself holding a threadbare cloth.
A lot of developers will probably stop reading at this point because they think, “this is not me.” Well, sorry, it probably is you. How can I make this blanket statement? I can make this statement because I found myself doing this very thing. I consider myself to have a pretty fairly diverse set of skills and an aptitude for picking up new tools and techniques pretty quickly. But somewhere I donned the “+5 Blanket of Comfort” only to find it's a cursed item from the DMG2 [Ed. Dungeon Master's Guide 2].
My warm blanket consisted of a sampling of RAD software development, stored procedures, Windows Forms, Web Forms, Visual Basic .NET and other largely Microsoft technologies. Where my warm blanket really got the best of me was in the department of general software development. I was a big proponent of the iterative rapid prototyping style of software development. While this type of software development has not stopped me from building a number of large-scale, high availability applications, I always felt I could do this better. So I decided to throw off my blanket and get to work looking at what was going on in the software development world. I needed to change my world view.
I started by reading books, magazines, watched videos and consulted the gurus. The technologies I studied varied greatly, including Ruby, Agile practices, Couch-DB, Domain Driven Design, jQuery and many aspects of the LAMP (Linux, Apache, MySQL and PHP) stack. After I did some book learning, I worked on my ABCs. I spent time digging deeper into these technologies and techniques by actually using them. I spent time working on small spikes of code then worked some of the techniques and tools into my code base. From the middle of 2006 until late in 2008, I completely re-invented my software development toolset and never looked back.
As you might have surmised, I am a big proponent of Agile software development practices, especially Test Driven Design/Development. I didn't really GET this software development principle until I implemented it in a number of different projects. On the surface, this software development principle may seem like a waste of time. In my EXPERIENCE this has not been the case. The keyword in that sentence is EXPERIENCE. I didn't experience the benefits of TDD until I actually used it in a project.
Whenever you hear “gurus” pissing all over software techniques you need to challenge what they say with your own experience and research. Recently I listened to an episode of .NET Rocks with one of CODE's authors discussing TDD. The conversation with the DNR hosts demonstrated to me that the guest lacks much real world experience with TDD. I am using TDD as an example here but this is a prevalent issue in software development. Be careful listening to pundits and gurus and try it for yourself.
You cannot possibly learn a technology from a book. You need to get down in the trenches and try it for yourself. Before you read a blog post poo-pooing JavaScript, TDD, Rails, ASP.NET MVC, Mono, MySQL, Linux, etc., take an hour, a day or a week and really dig into them. Even if you don't adopt them you will be enriched by learning how other people write software.
Rod Paddock