Please read this first
** I would challenge you to find a single page on P&P (or any other part of MSDN) that mentions any OO principle **
I couldn’t find any on google.
I don’t have any problem with MS putting out frameworks, however, what ends up being construed from the frameworks that are written is that they are the “golden” Microsoft implementation (usually due to lack of knowledge).
Stored procedures are a good example. Probably everyone on this list has been in a shop where stored procedures were touted as the “Microsoft best practice”. If you weren’t using stored procedures for database access, it was the equivalent of trying to get the team to switch to perl (for instance). This plays heavily into the O/RM topic and even Microsoft got some blowback on this topic with the entity framework. Nearly everyone here knows the sproc myth is just dogmatic thinking. I would imagine that most of the ‘softies would agree with us (I’m speculating).
How do you change this? More guidance in the patterns and practices (maybe a microsoft.com article explaining benefits/examples of pragmatic database access without stored procs).
Here’s another huge pain in my side. Microsoft has created a set of tools which brings the barrier of entry down extremely low (not a bad thing in and of itself). In fact, they’ve even released the free hobbyist versions of Visual Studio to reduce the economic barrier. A side effect is that you are bringing many people who can just “wing it” in development, but who lack the knowledge/motivation/interest in learning the principles behind developing a clean code base (think OO). If I had to generalize, I would say it’s mostly a knowledge issue. All the developers I have worked with (including the ones who just picked it up as a hobby and started “winging it”–including myself), wanted to be good developers, but aren’t aware of that side of development. Basic principles are a huge gaping hole in the .NET community. I could probably find you a few dozen User Group leaders, RDs, etc who couldn’t name a single development principle. I know a few who think Pattern is a four letter word.
It might be a valid point to say that educating the .NET community is not the job of Microsoft, but the problem is that the barrier of entry is so low (again, not a bad thing) that it’s causing problems (and ultimately, an ALT.NET reaction). Microsoft has positioned itself as the end all for everything .NET (rightly so), but then it leaves this huge hole looming in it’s community of developers.
In short, patterns and practices could fundamentally change the .NET community (in a HUGE way), by doing a blitz on Principles and Patterns (and don’t make up your own)–more principles than anything at this point in time (that’s where we are at Today).
In fact, if you look closely, you will find that ALT.NET is really a conglomeration of Principles, Patterns & Practices. Don’t take this as offensive, but even the user stories floating around this mailing list are around building a type of CMS for aggregating P&P literature. It’s because principles are a huge gaping hole in the community (along with newer development methodologies and practices), and they are completely missing from P&P.
It’s just compounded by the fact that those of us that take the time to learn the principles/patterns get shut down by dogmatic thinking (see sprocs above). If P&P led a “principles” assault, it would make the .NET world a completely different community.
How about a “Development Principles” caravan that travels to the big conferences? A few screencasts on code quality? An article on what constitutes a good object? A presentation on object modeling at teched?
I could jump into the topic of Components from here, but I think I’ll quit while I’m ahead.
Of course, we know that principles are only a starting point. After you learn the principles, things like patterns start making sense. It would only be after a “principles” assault that the community could really start moving forward.
And you don’t have to take my word for this, go to your local (non-redmond) user group and ask a handful of developers what principles they develop by. Many will give you a blank stare. Ask them what OO principles are, and they might mutter inheritance or polymorphism. They don’t know that Liskov or Demeter fellow (or even what a Responsibility is).
Just so we are clear, this is NOT aimed at those closest to me (user group leaders, coworkers, etc). If you know me personally, don’t take offense at this, please.
I DO know the lack of development principles and patterns to be accurate. I know it’s accurate because it wasn’t so long ago that *I* was a part of that.