Friday, July 28, 2006

Less Rambling Venting about Developing for .Net

Dare's comment on my very rambling post yesterday made me realize how rambling it was. I had hoped to post a follow-up last night, but didn't quite find the time. I had a few points in my rambling vent.

  1. NDoc is dead, and that saddens me... this lead to my venting points 2 & 3
  2. Lack of developer community for .Net - the primary proof of this (for me) is the lack of open-source tools.
  3. Lack of developer community is directly tied to Microsoft's insistence to limit .Net to Windows.
The .Net platform is a great platform. It is fast, and C# is a briliant compromise between the tensions of easy-of-development and developer-control. What I have noticed in spending most of the last year working in Java, is that despite this, I prefer to program in Java. So I ask the question why? NDoc's demise is related to some of my answers, so I slapped it all together in a single entry. Back to my points.

(1) NDoc is Dead: NDoc died due to lack of development support. Too much work and too few developers contributing. Version 2.0 update to the framework included some significant changes. Generics aren't just something slapped on. They are the result of man-years of thinking, planning, and work. They also have nontrivial impact on something like NDoc. I'm not surprised one guy can't just bang out an new version of NDoc that adds support for all the new v2.0 features. Microsoft made things worse by announcing Sandcastle which removes much of the need for NDoc. Take a project that already has had a hard time finding support and announce a free compentitive prodoct from Microsoft and you can smell doom in the air.

(2) Lack of developer community for .Net: One of the things that I love about Java, is that there is some many great open-source tools, and an excellent culture of support has developed around sites that support those tools. Back in the olden days, when I had a IBM XT clone and a 1200 baud modem so I could log into the local BBS, there was a great collection of tools for MS-DOS. Between then and now, the Microsoft development community has become very business oriented. There are some great tools out there, but they are proprietary. Go on SourceForge and look for C# projects. It seems that Microsoft has created a culture that encourages people to create and sell their custom ActiveX grid-control. What is missing is the college and graduate students creating a cool new tool as part of their thesis. There are a few exceptions, but they are rare. Coming back to work on C# developement, the lack of tools (compared to Java) is palpable and irksome. Microsoft makes this worse by failing to leverage the community when extending VisualStudio. Does VisualStudio ship with NUnit support? No. NAnt? Nope. Show me one (non-commercial) external tool/standard that Microsoft didn't develope that has been integrated into VisualStudio. I can't think of any.

(3) Lack of developer community is directly tied to Microsoft's insistence to limit .Net to Windows: So why are people creating cool tools for Java, but not .Net? I can think of 2 reasons: (1) Java has been around much longer. (2) Cross platform support. #1 is obvious and there is nothing that can be done. #2 is where I think Microsoft is shooting itself in the foot. For a long time, Microsoft needed to leverage tie-in as much as possible to realistically create Gates' visions of a PC on every desktop. It was necessary to keep prices down and avoid fragmentation. That vision is accomplished, and now we are on to new things. Time to let tie-in be less of an issue. Multi-platform networks and cross-platform development are the normal now. Accept it and move on. Do you want C# to out-shine Java? Let your child have wings and be free. What is good for .Net is good for you. I'd be much more interested in using C# if I could use it on my Mac PowerBook. Sure there is Mono, but there are still issues with UI and most of the home project apps I play with have UI.

I'm not asking Microsoft to Open-Source .Net. I'm asking for a cross-platform CLR with enough libraries that I can write a real application and have some hope of running it on a Linux box and a Mac box. Given that and a decent, cros-platform C# IDE, and I think the community around .Net would improve dramatically. If Microsoft then showed a hint of interest in working with the community, rather than just producing it's own independent clone of every successful community tools, and the .Net community would explode.

6 Comments:

Blogger Joshua Allen said...

Miguel is here at the lang.net users group to talk about Mono -- at this stage, it's a pretty solid platform for building .NET apps on Linux. Also the guy who made Ruby.NET will be speaking.

11:26 AM  
Anonymous Michael Brundage said...

Maybe Mono on the Mac has gotten better (and has adapted to Intel Macs?), but the last time I tried it about a year ago, it was awful. It barely worked at all, and the few simple C# programs it was able to run (like Hello, World) ran like molasses.

Derek, you know that saying that "you should only do what only you can do"? I think Microsoft is doing things that only Microsoft can do.

Java was a relatively simple thing that a team of what, like five people at Sun cooked up (back when it was called "Oak"). Java's gotten significantly bigger since then of course, but it had a very small start, which lowered the barrier of entry for anyone who wanted to duplicate it. You pretty quickly had dozens of VMs out there (most of which have fallen by the wayside as Java has become larger and better performance than the official VM has become harder to attain).

C#, in contrast, is enormous. Just the WinForms library alone, wow. I've read them both, and the MSIL spec is significantly more complex than the Java bytescode spec. Microsoft had the whole DevDiv working on it for years before anything was published. There's no simple core for an enthusiast community to start from.

This is the way it is with most things, even outside of software. There's the hobbyist/enthusiast community that can rally around challenging yet relatively simple projects (like breadboards and wires and solder) and there's the commercial community which can do significantly more complex things (like silcon wafers and VLIW). You see the same thing with automobiles and music production and blogging and landscaping and many other activities, where talented and motivated enthusasist can do some cool, inspiring stuff, but the commercial companies with their vast resources can do much larger and ultimately more impressive projects. Over time, the commercial stuff trickles down to the hobbyists and the commercial stuff moves on to the next thing.

Linux is a great example of this. For a long time, making an operating system was a Big Deal, the sort of thing that only went on at companies. A few universities would do operating systems for instructional purposes, but you wouldn't use them in a consumer environment. But the hobbyist community has caught up, figuring out how to create an OS that can do these things.

Let's talk iPod-like devices. The hobbyist community has not yet figured out how to make these. The miniaturization is hard, and so is packing so much functionality into so little computational power. They will get there (by which time the companies will have moved on again) but at the moment it's totally teh playground of the big companies.

Every now and then, the hobbyist community teaches the commercial companies a big lesson. Like Apple did with PC design, and like several of the dotcoms (such as eBay and Yahoo!) have done.

Anyway, where I'm going with all this is that you shouldn't be surprised that Microsoft's technologies are difficult for the hobbyist community to pick up and run with. I think it's just a byproduct of Microsoft doing the kinds of large complex projects that (almost) only Microsoft can do.

Creating a build system or an IDE or a virtual machine for a language as complex as C# or a documentation-generation system or a high-performance conformant XML parser and transformation engine -- these are quite large, complex projects with many not-so-fun parts.

It's more fun (and takes less skill) to play with turtle graphics and MAME-like emulators and making mods for commercial games than it is to build a full-fledged commercial-quality videogame. So the enthusiasts do lots of the former and almost none of the latter.

10:29 PM  
Anonymous Michael Brundage said...

Incidentally, building simple things is a great goal and very hard to do, and something that the enthusiast community generally excels at relative to the big companies.

I think Microsoft is not very good at simple things. You've seen the code, you know exactly what I'm talking about -- spaghetti dependencies for no particular good reason (other than expediancy, when bringing up a large project quickly), overly-engineered frameworks, inconsistent APIs, etc.

Some of the biggest successes Microsoft has had started small and built up from there; and some of the biggest failures Microsoft has had tried to be big and complex right from the get-go. I think it's all related to the reasons the enthusiast community doesn't engage more.

10:33 PM  
Anonymous Anonymous said...

@michael:

a year is an incredible long time in opensource development. within a year, mono changed its complete windows.forms core. about every month there's a new version with new capabilities.

i am always in awe what de icaza and his few handful of people are able to do.

but the mac is still their "third" platform... it's linux, windows, mac for now.

7:17 AM  
Anonymous Michael Brundage said...

To anonymous: Yes, and that's the reason I mentioned it's been a year.

(And hello, it's not just open source software that can change rapidly; commercial software often does too. A year after launch, the Xbox 360 system will have been updated three times with major changes across the board.)

However, when something doesn't work well, don't release it. Even if mono on the Mac is great now, it was so bad a year ago that I'm unlikely to ever try it out again. When I need my C# fix on the Mac, mono isn't even on my radar -- I just fire up Windows under Parallels.

9:17 AM  
Anonymous Anonymous said...

VS.NET has licensed the lite CHM builder whatever it's called (too lazy to care/look it up) and the lite obfuscator. So there are some things MS bundles that aren't exactly developed in house but they probably had a say on how it integrated with their product.

2:51 PM  

Post a Comment

<< Home