I teach a lot of enterprise Java classes, and it has continued to shock, amaze, and depress me how many people still haven't heard of Design Patterns and the GoF book. It's getting a little better now (typically more than 1/2 the class has heard of it now), but come on -- the book turned 10 last year!
I'm teaching a class this week of really intelligent Java developers (most of which have heard of GoF and at least the names of some of the patterns). However, I'm reaching the same dead-end with unit testing. I have become a True Believer, and I preach it in every class I teach. But it definitely hasn't trickled down to most developers. Still the most common question I get is "How can I convince my manager that I'm not wasting time?"
Is it me, or is software development in a time warp? I'm not talking about the cutting edge guys (like the attendees at your run-of-the-mill NFJS symposium) -- I'm talking about smart people who make their living writing enterprise applications. It seems that everyone in the world seems to think that advances in software development stopped in the early 90's. Just after the advent OOP and Java, innovation stopped. Developers are still writing applications the hard way, just like they did 10 years ago. The gap between the cutting edge and the masses seems to be widening. And from my experience, it's better in the Java world than in the .NET world, which seems to drink the Microsoft kool-aid on all topics.
It's frustrating and depressing because I keep seeing projects that are going to fail for all the same old stupid reasons that have caused them to fail for the last 10 years. It could be argued that I'm seeing a special set of developers, those whose management acquiesced to train. I don't think this is the case -- most of the classes I teach now are advanced enterprise stuff, not Java language foundations.
I have long suspected that part of the problem is that pointy-haired management views software development (and developers) as overhead, sort of like the HVAC system. Everyone seems cool enough -- why should we upgrade the HVAC system? What managers don't realize (and what developers have been unsuccessful convincing them of) is the software is a strategic investment in a lot (if not most) businesses. Because developers are not treated like rainmakers (and sales people are), they don't express themselves and eventually settle into that attitude themselves. Why bother beating your head against the wall if it never helps?
The consequence? A continuation of the staggering number of software projects that fail, within stones throw of techniques that can help them succeed (like Agile methodologies). Continuing frustration and tension between managers and developers. Do you think that management would allow their sales staff to fail as often as they allow software projects to fail without intervening and trying to figure out what's wrong?