Looking at the Microsoft Development Community
My friend, Jon, and I have had a discussion on and off for months now looking at the differences between the Microsoft development community and the Java development community. I had written a blog entry about it a month or two back, and threw it away (sin, I know). So, I'll try again.
Jon is, I think, fairly typical of most of the developers I know coming out of the MS centric community. He's made his living, and a good one, doing COM, ISAPI, ASP, and now .NET. He's been doing it professionally a few years longer than I have, and is one of the people I prodded for code reviews and conceptual help when I decided to cave to the inevitable and program professionally instead of as a hobbyist.
A conversation we had last night is fairly typical of the observations we have made. We hadn't chatted in a while and got to talking about what we had been up to. I mentioned that I had spent last weekend hacking, and pointed him at the interception library I hacked together for playing with services on a Cocoon FlowScript app I am working on. He had never heard of interception -- I guess it hasn't really made it into the .NET community in a big way yet. He mentioned that he enjoyed talking with me about programming stuff because he always learned so much. I was shocked. Then I was flattered. I still tend to think of Jon as more of a mentor to me than possibly the other way around -- despite the fact that we are at similar places in our respective careers now (he still makes a good chunk more than me, but then again I got my present job (which I love) at the bottom of the slump and he got his at the peak of the boom).
This took us back to the MS development community compared to the Java development community. His observation was that I know far more about the new and coming technologies (okay, I am a bleeding edge kind of guy, as my coworker Mike puts it I will help create a technology if it doesn't already exist so that I can use it, but that is irrelevant here as we are just looking at exposure to ideas and technologies) than he does, and this is pretty consistent despite his "following everything that Microsoft makes."
Our conversation then turned to how I find things and follow things and I introduced him to RSS, aggregators, Feedster, etc. He'd heard of blogs but thought of them as simply a vanity press (which to some degree they still are, but buried in that vanity press assumption that someone else cares about what you think and say is that a lot of people have very valuable things that they think, and say!).
I will posit that the MS development community exists mostly in a world of guarded thoughts and ideas - the world of COTS software, strict IP contracts, and the idea where you don't talk about how you do things as that is a competitive edge your company can maintain. The Java community, on the other hand, has been pretty thoroughly coopted by the open source and descendants of the old Unix community. There is a tradition of idea sharing in the Java community inherited from those groups which just doesn't exist in the Microsoft-centric communities. For decades now Microsoft has tried to be the center-of-all-things-good to its developers. It provides all the documentation, training, continued education, tools, and endorsements for third party tools. To a large degree the idea that if it isn't endorsed, or bought, by MS it isn't a technology that should be used exists in that community.
On the other hand the Java community's embrace of the free/open source community (or vice versa) allows for much faster and more open evolution of ideas. Open software doesn't provide any faster evolution in a single product or project than closed software, but it provides a hug heuristic benefit. Ideas are taken and built on very quickly. Take rapid style agile development and think of a new product as a new release instead of a new release of the same product and the idea is similar. Take, for example, Struts. At the time of its creation Struts was the king of the hill. It is a very powerful tool that solves a lot of problems. People rapidly found its shortcomings, however, and along come things like WebWork. Struts and WebWork are the same thing for all practical purposes, but because they are seperate projects they can break compatibility between each other. WebWork is an evolutionary development on Struts -- it doesn't do anything you cannot do in Struts, but it enables a lot of conveniences and is a step in the right direction.
That style of evolutionary development doesn't happen in the monolithic development models typically seen in the MS-centric community. The ideas are bought, not found, the products are bought or developed internally, not shared and developed externally. You cannot look at ObjectSpaces (MS's upcoming O/R tool) and get ideas for how to do something in OJB or Hibernate better, whereas both those tools share community and even contributors -- and therefore a lot of cross-pollination of ideas. Whatever the next hot data access tool is (after the current crop of O/R tools assume the role of Struts) will be able to look at how OJB and Hibernate do it and build on those ideas. This is the classic scientific community idea.
A lot of people in the MS development community are seeing this, and exploring the wider world. The toosl that community uses are great tools - Java has nothing on C# as a language or platform and I am sure that there are hot dynamic languages like Ruby and Python for the .NET platform, and both of those run happily on Windows anyway. Microsoft too realizes this -- notice their internal edict that their people start blogging (or do you really believe that all of the MS employees doing marketing time on the GotDotNet blogs care about sharing their ideas? Some do, and they are excellent and some great ideas come out of them, but many are "hey, this is a great technology, it will revolutionize everything -- when it is released, in maybe 2007, but I cannot tell you anything else about it until it is released" followed by three months of no entries).
That response, MS pushing its employees to blog, and creating community sites around their technologies (thespoke), is back to the "all good things flow from Microsoft" though. It isn't that they are wrong, or don't know how to do it, or have a worse technology - none of those things are true (you are welcome to argue, but that isn't the point). The difference is that the community and its traditions are firmly established, and the traditions are not innovation-oriented. Leaders in that community realize this, and are working to change things, but it hasn't happened yet. As smarter people than myself bet -- Microsoft will probably be the world's leading open source company within five years, it simply makes too much sense, and the company goes where the money is. I don't know if I agree, but i don't disgree strongly enough to take the bet. The trick will be if they can change the community - or rather, stop being the center of the community.