Look who finally showed up! — An Ode to Microsoft

Posted by – July 4, 2010

 

I’m going to start by saying that the first part (and majority) of this post will be negative. Not the whole thing, but you’ve been warned.

With the introduction of the Razor view engine today and the subsequent very expected questioning and praise, I’m feeling the same way I do about so many releases that Microsoft has made since I’ve been a .Net developer:

At best, a little pissed off. But let’s get to that later.

Let’s start with Razor. High level, is it:

  • New? Check.
  • Different? A little bit.
  • Ground breaking? No.
  • Revolutionary? Not even close.

If you take a look at the example’s in Scott Gu’s introductory post and the examples for the Spark View Engine, you’ll see why people are commenting about the similarity.

The fact of the matter is, it’s been done. So really, why be upset when people question the use of it? It’s this attitude that starts me on my rant.

ASP.Net

Let’s start way back on January 5, 2002. Love it or hate it, Microsoft introduced ASP.Net Webforms. Whether you agree with it’s methodology or not, you can’t deny that it was:

  • New.
  • Different.
  • Ground breaking.
  • Revolutionary.
  •  

    In fact, it was so revolutionary, that it took until March 17, 2009 before they even released the ASP.Net MVC framework that acknowledged there was another point of view on web development. Now was ASP.Net MVC:

  • New? That’s a big fat no.
  • Different? Maybe to webforms developers.
  • Ground breaking? Far from it.
  • Revolutionary? Way too late for that.
  •  

    Yet there everyone the pure MS developers were finally being enlightened on what web development could be like. And we were supposed to be grateful. Grateful that literally years after other developers figured it out, MS did. Java got struts in 2000. Ruby got Rails in 2005. There’s numerous others, but to finally get to the subject of my annoyance:

     

    WHAT IN THE F@%& TOOK MICROSOFT SO LONG?

     

    Powershell

    Yet another leap forward…. at least for the Microsoft world. How does it stack up:

    • New? Nope.
    • Different? A little.
    • Ground Breaking? Maybe if you include the .Net Integration.
    • Revolutionary? Not at all.

    There’s literally hundreds of shells. Microsoft finally got up to creating a real one. Reaching at least as far back as 1971, shells have a long and storied history. Probably the most celebrated of the shells, the Bourne Again Shell (bash) was first released in 1987, and was blowing the Microsoft world out of the water in terms of usability, capability and power from even back in the days of DOS. So why is it that it took until 2006 for Microsoft to take the next step?

    The obvious omissions for me are: a real history search and a preserved history. Two of the most beneficial tools in a bash user’s aresenal. Credit where credit is due though: The .Net integration story in powershell is immensely intriguing.

    Are you seri-OSS?

    Bad pun, I know. But the problem is so bad that the developer community has had to take it upon themselves to solve these problems and innovate themselves. There is too many for me to go into each one so I’m going to short list it:

    And the four point system of New, Different, Ground Breaking and Revolutionary is going to look the same for all these. Even the aforementioned items had OSS precursors (MonoRail vs MVC and cygwin/bash vs Powershell).

    So why all the acclaim?

    Instead of looking from the outside in, let’s take a look at these from the average Microsoft Developer who never strays from the walled garden. Every single technology mentioned would answer something like:

    • New? And shiny too!
    • Different? Mind bendingly so.
    • Ground Breaking? I’ve never seen anything like it!
    • Revolutionary? Unbelievably so!

    I’ve been an avid *nix user and had at least one or more *nix based systems in my house for 10+ years. I’ve been working (very casually) on a Rails site since 2006. I was a Java developer before I was a .Net developer. To me it always feel like we finally are arriving at the party, years after everyone else.

    Better late than never

    Truth be told, there _is_ a bright side to all this. Microsoft is finally starting to provide their developers with tools that other platforms have had for decades. Is there a push to be more developer friendly again? I’m not sure. All I know is that finally, they are attempting to move in the right direction. This is very positive. They aren’t there yet.

    In fact, currently Microsoft is playing catch up. But it seems like once you awaken the sleeping Beast of Redmond that things start to get done.

    It’s not all a miss

    I’ve personally used some Microsoft Techs with great success in projects. The ones that come to mind immediately to mind are Prism and WPF. Though both could be improved (we rolled our own Event Aggregator in Prism) and WPF’s INotifyPropertyChanged is frustrating, both are a great step over what we previously had.

    In fact, I think that the Framework itself is, overally, extremely impressive. I love C# as a language. I enjoy it and enjoy using it. It’s in many ways, far ahead of most other static languages, combined with VS and R# it’s a dream to use too.

    But…

    What happens if tomorrow the python devs make some huge leap forward that no other platform has? I would put money on the Java/Ruby/etc communities to mimic it almost immediately. Probably even the .Net OSS community will get something out. But will Microsoft have to wait for “the next release cycle”?

    Grateful?

    I’m going to be honest, I’m not happy with being second rate. In fact, I’m downright insulted that second rate is shoved in our faces and we’re expected to act like it’s the greatest thing ever. Yes new framework X IS much better than what we’ve got, but it’s still years behind what the other guys have. It’s a classic grass is greener situation, except for that the grass is measurably greener. You want to know why so many leaders are leaving .Net? It’s because Microsoft is behind the times and seemingly refuses to outright acknowledge it until people whine, bitch and complain for YEARS.

    Here’s an idea

    Wow me. Let’s go back to 2002. Do something. ANYTHING. Don’t just play catch up. Take it to the next level. Be the innovator. Beat the OSS community to the punch. If nothing else, Microsoft is putting itself in the position to do so. But intentions don’t keep developers on your platform.

    I’ve been saying it for the last few years: .Net is in many ways stagnant, old and behind the times.

    But I couldn’t be happier if they just came out and PROVED ME WRONG.

    So prove me wrong. PLEASE.

    10 Comments on Look who finally showed up! — An Ode to Microsoft

    1. When Microsoft bring out their own versions of ideas already implemented via OSS, for instance Entity Framework vs. NHibernate, Unity vs. Windsor, Razor vs. Spark etc. I can’t help but think Microsoft are fullfilling a legitimate need.

      A lot of enterprises, and set in their ways .NET developers, are very suspicious of OSS (which of course is completely misguided), they would prefer (even mandate) to use whatever the official Microsoft technology is over the OSS equivelent. Before Entity Framework and Linq 2 SQL, there was only NHibernate, so a developer stuck working for one of these enterprises would have to resort to hand rolling their own ADO.NET code. Or a ‘set-in-their-ways’ .NET developer would do the same because they refused to use NHibernate. Now Microsoft has their own ‘official’ ORM framework out called Entity Framework, these devs can use that.

      The only problem is that often the official MS version is inferior to the OSS equivalent (take NHibernate vs. EF), but at least MS are trying and hopefully EF, Razor, MVC et al. will get better.

      Perhaps a better approach would be if Microsoft adopted these OSS technologies as the official standard to get Enterprise/developer buy-it, like they have done with jQuery now bundled with every MVC project. For instance, they could ship multiple alternative View Engines with Visual Studio, or integrate tools for working with NHibernate into VS.

    2. mendicant says:

      Dominic,

      That is bang on. I think that is part of what the CodePlex Foundation was set up for. To provide a corporate support scenario for OSS projects and make them more attractive. This might loosen the burdens of MS having to develop these “Me too” half baked frameworks and let them put those resources into places where they could be better used.

      It’s far too early to comment on the success of the CodePlex Foundation. But I’m rooting for them to be successful. It would be a significant step for the .Net world.

      mendicant

    3. Mark Brackett says:

      You make a decent (though not new, different, ground breaking or revolutionary) point – but some of your examples are pretty weak.

      Powershell is definitely ground breaking and different. It’s a shell, with object instances being piped, and a REPL for a statically compiled VM. It’s light years ahead of bash – the fact that Exchange management is litterally a pretty UI on top of Powershell scripts is pretty much the ultimate in scriptability for a major software package in either Windows or *nix (*nix advocates would point out that most of their admin can be accomplished with sed, awk, grep and perl – but that says more about the config than it does the shell). Whether it’s revolutionary or not can only be judged in hindsight. In the 4 or 5 years it’s been out, uptake has been pretty slow – but that’s somewhat to be expected. And comparing bash to CMD.EXE is a pretty cheap shot – MS had been pushing WSH as the scripting interface to Windows for quite a while (and VBS, though a horrible language, made at least a half-decent scripting interface and could also interact with COM components – giving it a fair leg up on bash whcih still relies on stringing executables together with raw text).

      Similarly, IIS Express seems light years ahead of Mongrel or WEBrick. Quite literally, IIS Express is a no-config version of IIS – the second most popular enterprise web server in existence. Whereas Mongrel and WEBrick are limited to Ruby – IIS has a pluggable handler system, integrated authentication options, security and speed built for production use, etc.

      While I’m at it, I also disagree with the implication that only “new, different, ground-breaking and/or revolutionary” are worth doing. Sometimes, it’s worth doing if you can be just a little bit better – and that can include support, longevity, adoption, etc. – all things which MS virtually has locked up in comparison to most OSS. That being said, some of MS’s offerings are obviously inferior to the alternatives (I’m looking at you, MSTest and EF) – I’d suggest not using those until they get better (if ever) or die off.

    4. ulu says:

      Isn’t LINQ, um, innovative and stuff? Like, er, revolutionary, kind of?

    5. mendicant says:

      ulu, I would put Linq in with the framework, which as I mention in the post I think is both great an innovative. The language features .Net provides are great. The Frameworks and stacks on top aren’t.

    6. mendicant says:

      Mark,

      First the things I agree with:

      “While I’m at it, I also disagree with the implication that only “new, different, ground-breaking and/or revolutionary” are worth doing.” — I’m not saying they aren’t worth doing. What I’m saying is that they seem so up in arms that they aren’t fully embraced by the leaders and the MVPs now that there’s a “microsoft” solution. The point is, most times, they aren’t doing it ‘a little bit better’. It’s usually just a half baked effort to get something out the door and get the heat off.

      ASP.Net MVC is a good example of something that, while still behind the times, they should continue to push and improve. It’s much needed, and I think considering the success they will push and be a good example of a come-from-behind framework.

      As for IIS Express, I don’t give it enough credit in terms of functionality. It does have a lot more to it than WEBrick or Mongrel. My main point is, again, why did it take so long? My examples are the two that came to mind. I’m sure if I looked it up, we could find a more fully featured example that would compare with IIS express better. I fully admit that IIS Express is a great and much needed addition to a .Net developers toolbox. I just think that it took far too long to get here.

      I also hate a lot on Powershell, but that is mostly because A) I can’t stand scripting with it and B) I hate the actual shell. Tab completion, history, just using it makes me want to hurt small animals. It actually keeps me from truly exploring it as much as I should. I was thinking today about the integration story between PS and things like IIS, Sql Server, Exchange and you can see where it becomes valuable not only to a developer like me, but also to sys admins, BAs and several other roles in an IT setting. I also mentioned the OO aspect of it as being its biggest innovation (and most interesting). I guess my beef is that it feels like it goes out of its way to tie my hands behind my back before I can even get anything done with it.

      Disagreements:

      Comparing Bash with CMD: Bash (or my prior fav csh, or even zsh, ksh, etc) and cmd are THE command line interfaces to the OS you are using. Can you script out anything using WSH or VBS straight from CMD? No. You have to use their environments, which means that your command line story is still missing. powershell is definitely that missing link that brings that story (and with tight OS/.net integration does take it a step further). Honestly, give me persisted history and all the usability items I’ve mentioned and I’d install the unix utils kit which has grep, sed, awk etc and I probably wouldn’t look back. Functionality doesn’t mean much if I have to jump through hoops to use it.

      As for having a GUI shell down to a script, that’s been done over and over again. In fact, I’d say that several administration programs on other OSes began as simply that: a gui that shelled down to a script or executable. You’re right though, with PS you can shell out directly to an assembly if you wanted to. I just don’t see much difference. Maybe because of how easy it is to place a script in a file and have a *nix system just know what language to interpret it with.

      All told, if you force me to talk about it, I’d admit Powershell is probably the one where they did come out swinging and, from a technical standpoint, took things to the next level. As for the frameworks and such, I’d far prefer to see more of the JQuery type thing happening. The JQuery situation was so well done and well played. Can you imagine if they had tried to put out their own replacement for it? (I know there is MS Ajax library, but it doesn’t seem to be directly comparable). Imagine if they’d done the same with EF or MSTest? Or unity? Feelings towards those techs would be much different.

      As a last point, another place where they did the right thing was with MEF. Rather than cobble together a team and tell them to ‘make this’, instead they went straight to an expert on the subject and brought the guy in (Glenn Block) to do it. I know not everyone gets it or agrees with it, but I have heard far more positive regarding it (I haven’t personally looked into it) and the way in which they dealt with the community and their input with it. The more projects we have like that, the far better off we will all be.

    7. Frank says:

      PowerShell has had Get-History for four years, FYI.

    8. mendicant says:

      Frank, open powershell and first thing type Get-History. Get history is basically crippled without a decent persistent history. I did find a plugin a year or so ago when I tried to make the switch, but it just wasn’t very good.

    9. Steve says:

      Perhaps MS recognizes where OSS have filled missing gaps. And if a direction becomes popular they attempt to fill them themselves.

      1. MSUnit – they recognized the needs for a testing suite in Studio.
      2. EF – they recognized ORM’s popularity with NHibernate. They recognized the value of it
      3. TFS – testing, deploying, etc… aka CruiseControl
      4. Unity – they see the need for Dependency injection framework
      5. MVC – this is in everything, to finally release this was huge for them, although I would argue that Webforms was a mistake – something that people adopted because it was shiny and new but ultimately a bad framework whose misconceptions really were revealed when the whole web 2.0 flourished and MS Ajax was poorly done and ‘bolted on’

      For quite some time it bothered me as well, but at the same time – MS MUST keep up, and I think Scott Guthrie has seen this and made it happen. They fulfill and fill gaps.

      I think there are huge legal obstacles to just throwing open source code into their stack. Scott Guthrie from what I understand took the big leap with getting jQuery in and it took working with the MS lawyers to work through all the details.

      The mindshift – at least in Scott Guthrie’s group – has shifted and they move and adjust. I’m glad to see that vs. being stoicly attached with a ‘we know better’ attitude that I believe they used to have. We see that failure in the phone and the tablet (I’m fully against Ballmer’s lack of innovation with the tablet, this continual attempt to throw a desktop OS on a tablet is foolish.. just ask HP…)

      (even Apple realized they had to build their OS on a better platform, hence they rewrote the OS to run on a *nix system)

      Let’s step back a moment.

      For me, they can compete. The technology and tools – they provide a framework and tools to build what we need. I’d argue they have some of the best tools available.

      Here is what I’d rather see – and I’d consider this ‘innovative’ – get PAST the this ONLY runs on Windows mentality.

      .NET should run everywhere. Their tools should run ANYWHERE. I should be able to run my asp.net mvc solution on Apache. I should be able to develop with Visual Studio on my Mac. I should be able to deploy my WPF app on Ubuntu.

      I personally love the iphone and what Apple has done. But in the same manner I think MS should open up — so should Apple. I should be able to develop a silverlight iphone app imo. Same with the android. MS isn’t going to win on the Windows 7 series phone in this regards. Just like WebOS for HP, who is going to write apps for a phone that might only hold 5% of the phone market?

      What will occur I believe is – even if less quality – is frameworks like ‘Android’ that can be build on any machine that can install java – be it Mac, Linux, or Windows – and can be run anywhere – is of extremely high value to the development community. Where are we going to invest our time?

      We continually hit this bump. I think this is why java will re-emerge – the android will push that, developers wanting to do apps will learn java and build them. It will be a familiar language for .net developers.

      To me, for MS this is where they have to see forward and have vision. Sure, they have a stranglehold on the MS development communities, but it’s obviously the MS isn’t going to dominate every market as they did with the desktop OS. They won’t dominate tablets or phones. But why do it?

      Instead, fill the gaps. The biggest gap is development outside of Windows. Mono is rough. Monotouch is rough. MonoDevelop is extremely rough.

      My 2 cents: let the development community produce the products on top of the framework – OSS in MS is growing and is so far beyond where it was just in the last few years – real innovation is coming from the developers. Microsoft – instead of moving into our space- needs to OPEN OUR SPACE up so that what we build and where we build our .NET projects can be built and run on any system.

      Who else can claim that right now? Java. I’d like to add .NET to that category.

      Summary: We the developers are innovating and Microsoft is back filling. They are moving forward in critical realms such as Azure. They can help us innovate further by expanding their vision outside of ‘just Windows’.

      Last comment: The employees of Microsoft would be better off recognizing the innovations outside of MS. Currently I see Tweets where they like to bash Apple and the iphone, etc… this is a major failing. They are just creating a divide that doesn’t need to exist. Instead of bashing, they should look to see where they can help us developers use those systems … with the .net framework.

      The ‘us vs. them’ mentality needs to be put aside to get innovation. As long as guys like Ballmer stick to that age old mentality we all get harmed. It’s no different than Obama blaming Bush for his failures 18 months into his presidency. At first, sure, he had some good arguments, but to blame Bush now is just lack of accountability for his own failings. Same goes with MS – instead of creating divides, they should be working with Apple and Google to figure out, ie. how to get Silverlight running there. They should be creating VS 2010 for the Mac – and giving us ways to deploy our WPF apps anywhere, and our asp.net mvc apps anywhere.

      That to me would be pretty innovative eh? :)

    10. mendicant says:

      Steve,

      For the most part, I totally agree with you. It’s part of what I’ve been trying to say. MS has produced a really good framework but they spend too much time trying to solve problems that already have solutions. I find it funny how afraid they are to say “Hey, look at this killer [insert tool here]” and how quick they are to say “Hey! Look we built [MS replacement for said tool that's nowhere near as good]“.

      If anything, they should be proud and evangelizing the accomplishments of the community (even if they don’t fit in exactly to the MS mindset). “Hey! Look at [StructureMap, Windsor, Ninject, AutoFac, etc]. These amazing projects were built on .Net and _you_ can use them!” To be fair, I think that’s part of why CodePlex Foundation was created, but there’s slim pickins out of that place so far.

      But if, like you said, they keep focusing on the developer, extending and opening things like Silverlight, WPF. And putting out useful tools like IIS Express. Embracing the community, etc. The more they embrace the developer (and especially their products) and make it easier for them to build and especially share them, the better off the ecosystem is going to be.

      They need to provide for the developers, and _if_ they insist on backfilling based on need there are two things they need to do:

      A) Take a serious stab at it.
      B) Do it in a timely fashion (not years after every other community does it)
      C) Commit to maintaining it.

      The best example I have of this is the MVC framework. However, it only has A and C. Yet, like you said, if Gu keeps pushing the way he is, I think the gap that MS typically has in B will go down. At least, I sincerely hope so.

      The last couple months have been positive, I just hope they continue the push. I really don’t see why they wouldn’t, but stranger things have happened.

      mendicant

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>