Today I spent the entire day in the .NET session at CodeMash. Now I have pretty much no practical interest in .NET but the whole point of CodeMash is to expand your mind, so why not. I was pleasantly surprised and in cases downright impressed.
For the purpose of background it's worth noting that Microsoft has put a pretty substantial chunk of change into this conference. They have signs everywhere as well as a room or two dedicated to their workshops. They're also listed as an adamantium sponsor (the highest level).
Before I get into the rest of the post I have two mini-rants to address. First of all is that Windows Vista is UGLY, like really ugly. Whoever thought huge translucent borders for windows was a good idea was clearly on something. It's pretty distracting and wastes lots of screen real-estate. All the superfluous animations are annoying and distracting too. The other thing is that GUI development environments and wizards drive me batshit and EVERYTHING you do in .NET assumes that you're using Visual Studio. I'm with Charles Petzhold in the thought that Visual Studio rots the mind. If I'm editing text I want to edit text and get the GUI crap out of my face, it just gets in the way.
Okay... on to the real post...
I haven't actually be "into" Windows desktop development for the better part of 8 years and even back then it was just VB 6 which is comparatively quite primitive to the current state of .NET. When .NET originally came out was about the time I was making the transition to web development and so I basically wrote off Windows as a lost cause. I've got to say that I'm honestly really impressed with the current state of Windows development. Apple has really thrown down the gauntlet with their beautiful interfaces and really nice development tools which Microsoft has picked up. They are taking the challenge very seriously and it shows.
The old way to do .NET development was WinForms which is visually pretty status-quo for Windows applications; plain, boring, ugly. The new awesomeness which appears to only be in Windows Vista and up is Windows Presentation Framework which is pretty amazing. WPF allows you to do all kinds of really nice interface fanciness from 3D interfaces that slide and flip to real-time moving graphs of data that can be stacked and rotated in 3D. The demo apps they showed are certainly up to snuff for some of the more snazzy Mac applications that I've seen. The only thing I can see happening with WPF is programmers getting overzealous and adding too much WPF bling to their applications.
The other technology that was discussed which I'd totally underestimated was Silverlight. At a first glance Silverlight was just a wanna-be Flash clone which was lame. On closer inspection Silverlight appears to be a pretty serious competitor for the likes of AIR and Flex. Basically Silverlight pairs XAML with C#. The two are really pretty powerful together, and fast... the one demo of a chess game put Silverlight at 60x the speed of Javascript (which makes sense when you consider that C# IS JITed). The authoring tools are pretty good too. Though I did have to laugh when the presenter said they where positioning Expressions Studio as a competitor for Photoshop. Seriously?
The last thing that was demoed was ADO.NET and Linq. ADO.NET really isn't anything special, its a database abstraction layer. Whoopty freaking doo. Linq is the .NET attempt at an ORM. Having not done any further study on the topic I can only say what I saw, and it wasn't pretty. Basically Linq gives you a storage-agnostic way to select data from a database. By all accounts it is inverted SQL entered directly into your source code (i.e. NOT a string). Well that's pretty gross. What's even worse is you have to write Linq (LINQL?) backwards, your from statement comes before your select statement. When asked why the presenter informed us all that this was so intellisense could figure out what you where trying to get at. I threw up in my mouth. The idea of tailoring the language to the tools instead of the other way around is SO preposterous that I don't even know where to begin.
Overall once the sales pitch for .NET was over and the demos began it was really impressive. I've got to give Microsoft some serious credit, they are taking .NET seriously and forthcoming versions of Windows will be adding some really neat stuff to a Windows developer's toolkit.
The one thing that I'd really like to see Microsoft take seriously is other platforms. It's very clear that in the Microsoft world there is only Windows and the fact that you may be using an "inferior" operating system is just beyond their comprehension. Of course this is understandable since they make Windows and they all use Windows. But it would be really grand if Microsoft would officially port .NET to other operating systems like Mac and Linux. They could have some serious competition for Java and bring some of the cool stuff they're working on to the rest of the world. Until they do that .NET is probably irrelevant to me but it was still neat to see what they've got and its nice to know if the web thing doesn't work out there's a decent toolset to go work with.