The recent talk about ignorant programmers echoed a lot of my thoughts/experiences as well.
I actually think that Pinku is right, up to a point. The vast majority of the programmers in IT departments around the country are operating without even a modicum of understanding of CS theory. They have some tools they know how to use, some patterns they can employ, and only a passing interest in the actual application of their trade. There is a smaller set of passionate, knowledgeable and driven programmers who grok more than a single problem domain, and see tools as implements to help solve problems, not the solutions themselves.
I believe "passing interest" is the key issue, and in my experience this is the overwhelming majority. It seems there are endless passionate developers in blogspace, but I rarely meet such individuals in the wild. More often than not, the developers supporting a company's IT software infrastructure are task-oriented; get it done so long as "it works." Who has time for pedantic notions of quality/correctness?
In all fairness, I think tool manufacturers are largely to blame. Most .NET developers I've met didn't even know you could build .NET applications sans VS.NET. Couple that with questions such as, "does VB.NET support the DataSet" (from a .NET developer supporting a very large company's infrastructure that you most likely use), and I think the problem is not just disinterest, but apathy. Of course, VS.NET is the panacean solution to many developers' worlds, so one could argue that they had absolutely no need to step outside of their myopic perception of .NET. Go ahead, pass a DataSet around to every method; return it from every web service; VS.NET makes it easy! Be sure to also discard the notions of reuse by putting all your business logic in a web service, because all you have to do is "add reference" from VS.NET. I feel that, in many cases, overwhelmingly powerful tools such as VS.NET empower those who shouldn't be.
Of course, many (most?) reading this probably know the fundamentals and what incantations VS.NET performs on your behalf, but most in the wild simply do not. I feel this should largely be required knowledge, but expression of that opinion amongst friends has been dismissed as being arrogant.