As what passes for the resident Microsoft zealot here at, I had quite a few people drop by my office or e-mail to let me know about Bill Gates’ admission in late July that his company may have “made a misstep” with Microsoft .NET. Those visitors typically got the same pat response from me: “Which .NET was he talking about?” I’m still not sure who was surprised and who was annoyed by my unconcerned response.

I think that Gates was referring to .NET-as-marketing-initiative, but I’m by no means certain. Frankly, I’m not sure that even he knew which .NET he was talking about. Such confusion is understandable, given that the Redmond camp seems to have taken to referring to everything under the sun as .NET. The zaniness at present includes several development platforms, a development tool, a marketing strategy, a server operating system (and I think everyone stopped trying to figure out the rationale behind Windows version monikers a decade ago), a method of identifying Internet users, and an Internet information storage platform. A slick but technically insubstantial “one degree of separation” advertising campaign hasn’t helped anyone keep things straight.

Just for the record, such an obsession with a naming gimmick isn’t completely without precedent. You need look no further than Apple Computers for the most recent examples. First we had the IMac, then the IBook, now we have IPod, which doesn’t really have anything to do with the Internet (the supposed origin of the “I”) at all, except perhaps that you’ll probably be (illegally) downloading most of your MP3s from there. But I’m now badly digressing and treading in the RIAA’s territory, so I’ll hush up about that.

Some things I know…
I do know what .NET isn’t: original. Anyone who tells you different is selling something, probably a book. The truth is that most of what you see in the .NET development platform has been done before, from the runtime (Sun did it first with Java) to the class library (I’ll credit Borland and Delphi for that, though I might be wrong). And I don’t even have to go into how redundant the concept of “XML Web services” is. Not that lack of originality is necessarily a bad thing: Historically, Microsoft’s strongest suit has been building on technical work done by others, and that is how progress is made, after all.

I know that if you’re primarily a Windows developer, .NET drastically changes life for you, in both good and bad ways. The good stuff:

  • An excellent class library that gives access to many system functions and programming constructs in a consistent manner
  • A managed runtime that keeps you from worrying about memory access errors
  • Assemblies, a real cure for COM’s “DLL Hell” malady
  • The first Microsoft-centric server-side and distributed programming platforms that actually feel complete and make sense

On the other hand, the bad stuff:

  • That class library is really big
  • Another layer of abstraction between you and hardware in the form of the .NET runtime
  • More new buzzwords and pieces of technology to learn about
  • Mountains of legacy code that’ll likely never run on .NET
  • The possibility that the cure, assemblies, could be worse than the disease

I’m also fairly certain that .NET, whatever it is, isn’t going anywhere for a while, and you can pretty safely hitch your wagon to it. It’s true that Planet Microsoft is littered with the corpses of abandoned technology (VB for DOS and BOB are two examples off the top of my head). However, if the near-ubiquity of .NET marketing tells me nothing else, it does tell me that Microsoft has committed itself rather heavily to its new…whatever it is.

I also know that lots of companies are taking advantage of .NET to try to sell me new stuff. Tool vendors, book companies, and training centers are all offering new “.NET-ready” products. In that sense, I guess we should add “economic stimulus package” to my list at the beginning of the article.

…and lots of things I don’t
Beyond those things, I’m confused. Truthfully, I’m even lost on something as simple as multiple-language availability being a good thing. You see, in the .NET world, whether you’re using C#, VB.NET, or even J#, you’re really only writing “macro-code” that gets distilled down to Intermediate Language. Your chosen language’s functionality is almost completely defined by the CLR’s class library, plus whatever components you add in. I’ve yet to have someone sufficiently explain to me how having the ability to produce an application written in multiple languages is truly advantageous, when all those languages are functionally the same and the only difference is syntax.

Add things like My Services .NET, Passport .NET, Map Point .NET, and TechNET, and I’m really confused. So can someone please do me a favor and provide some subtitles telling me what’s meant when someone says “.NET”? I’d appreciate it.