I can see how it might come off like I'm damning the platform - that was hardly my intention. Rails has had 3+ years of Open Source contribution to build out the platform and make it do amazing things - ASP.NET MVC will (hopefully) grow in some of the same ways - but there's a somewhat stunted element to the .NET OSS ecosystem. Hopefully that will change.
C# is a fine language, and ASP.Net MVC is a great framework, but I can't help but feel like the 'other kids' are ransacking the candy store while I'm out on the curb. In terms of testing frameworks and tools, the Ruby/Rails platform is lightyears ahead. I know there are attempts to bring some of the core concepts in RSpec and Cucumber to the .Net platform, but we're not there yet, and probably never will be. The goalposts are always shifting - the OSS platform can respond to change and new ideas much more quickly than the MS platform.
We have an MVC framework for web development now, but it has taken 10 years (Java Struts was released roughly around the same time as Webforms iirc)! Testing is only one element of this - in the OSS world we're also seeing an explosion of asynchronous queuing/messaging frameworks, object/document datastores, serverside js and other innovations.
I also share your frustration with the coupling of the framework releases to a new IDE. I use Vim for everything other than .Net development, and like the fact that the rug isn't going to be pulled out from under me every two years.
As a Microsoft developer it is hard not to feel envious of the OSS community. The Alt.Net community if anything appears to be shrinking, and it is presumably because those developers have come to a similar conclusion as yourself - the cost simply does not justify what the MS platform can offer.
But you still had to switch and it still cost you time and money you wouldn't need to spend had you just gone with Flash in the first place. So the point to me is still "don't use Microsoft technology because you'll end up needing to switch"
It's also very slow moving and wildly outdated.
Right now I'm the CTO for a largish image licensing shop (think Getty, but more boutique/high end) that is entirely .NET (I inherited it). We are now in the process of moving it off Windows onto an OSS stack. It's a miserable experience. And an expensive one.
For starters, the thing is architected poorly, so that does play a big factor in it. I know, I know, it's always the new guy inheriting an existing system that lays to claim that the inherited thing is a piece of garbage, but in this case it is undeniably true. And I can tell you, as someone who has been doing .NET consulting for the last 8+ years, it's not uncommon for MS based solutions to be architected this poorly, but I'll get to the reasoning behind that later.
So yes, poor architecture, lazy design choices (the wrong kind of lazy) but what is most aggravating are two other factors: cost and maintenance. Of course the very first thing I did when I settled in as the new CTO was to figure out how the thing was maintained and how much the thing was costing us a day to run. At my former CTO gig, massify.com, one of my proudest achievements was getting the daily cost of running the site below the price of a pack of cigarettes. Now we are talking about a user generated video content site with not exactly insignificant amounts of traffic and some very healthy storage requirements. When we started out, it was running us around $300 to $400 a day, but by the time I left, it was about $8 bucks give or take. And during the three years I was there, the site never came down unless we took it down for some kind of database migration or similar updating. And all of this happens thanks to OSS software and the ease of use of unix.
Now we are in a situation where we are paying for the server OS's, the SQL server instances and a variety of other utilities to keep things running. Not to mention the yearly MSDN subscriptions. That shit is expensive.
But what is worse is that it's such a pain in the ass to update and work on. Remote Desktop is retarded, but I have no choice as command line maintenance is simply gag inducing. Something that would take me mere minutes in a linux command line takes me an hour or more clicking around like an idiot in remote desktop. Good luck remotely admin'ing a windows server taking a massive CPU load. Now when I was at Massify, I could maintain and monitor our whole fleet of servers from my phone - and on a couple of occasions even did so while sitting through the previews at a movie theater. Do that on MS? MMM ... no.
But back to bad architecture and why it's endemic in the MS development world. ASP.NET. ASP.NET is such a convoluted, poorly conceived, poorly executed pile of shit. THIS IS COMING FROM SOMEONE THAT USED TO SING ITS PRAISES. And when ASP.NET is a cornerstone of .NET development, I don't think it's implausible to rationalize the rampant bad development practices of your typical MS developer back to it and other MS technologies similar to it (I'm looking at you Sharepoint). You see, MS is chock full of shitty architecture. And MS devs learn from MS. It's a cycle of shit that is constantly perpetuated by each release of some new MS technology. And I can tell you, I've seen it time and time again - working for companies like Pfizer, R/GA, some of the top 5 interactive ad agencies, etc. Finding a great MS developer is like finding a great PHP developer. They exist, but are such a minority as to be almost mythical. We used to joke that MCSD stood for Microsoft Certified Shitty Developer. Well, we always pitched it as a joke anyways, in case anyone ever overheard.
So, now we are currently wiping the slate clean and moving the whole thing to an OSS stack. And so far, even in the rough beta stages, we've already demonstrated how superior that whole ecosystem is to where it was before. It's very satisfying to show our licensing agents our new shiny search system (using a heavily modified Solr) and watching their eyes light up as we do things with it that the old MS based search engine simply could never do.
So that's my rant about that. MS is dying shit as far as I'm concerned, only used by people who are somehow locked into it, or are the bad kind of lazy and don't want to challenge themselves. I know that's not very objective, but it's the lessons I've learned.
PS. When I was interviewing with the company, I literally had a 4 hour conversation with the outgoing CTO about the benefits of MVC. He couldn't see them and I couldn't explain it to him in a way he understood. He kept pointing at ASP.NET user controls and how great they were. Of course, several months later I find a page on the admin site that is roughly 26K lines of code in the codebehind with a nice spaghetti mixture of HTML and SQL and C# code. I nearly quit when I saw it.
Do you have an idea why this is the case? Or the other way around why the architecture of OSS projects seems to be saner?
disclaimer: I have no exposure to the MS stack, with the exception of playing around with F# which in my opinion is a very well designed language.
At some point, MS probably realized that either these tools are not enough or their customers are asking for more because businesses are getting more complex and agility is required.
MS, known as the company that is great in terms of partnering and pleasing everybody except developers, decided to re-brand its offering to be more developer friendly. But at the same time, still serving the non-developers community as well (which seems to be dying slowly because well... if you don't like computers, you will not like it at all, period. You will hire someone to do the "dirty" job for you).
It'll take a while to transform the old MS to the new MS. If they ever made it.
Meanwhile, (some) OSS projects didn't have ambitious goals. They solve the authors's problems. During the inception of the project, they didn't care about the non-developer audiences. They care about themselves: developers.
I only catch glimpses of the MS world when I have to use common libraries originally developed by our Windows experts, whose design decisions often leave me puzzled. I am curious about what you think about the idea, that OSS culture incentivized creating architectures conforming to fashion trends, while MS culture incentivized to finish feature X until Y - no matter what it takes (just do it Scotty).
e.g. in the OSS world beginning of 2000 J2EE spawned heavily over-engineered solutions, which were displaced by the convention over configuration trend exploding (mostly due to Rails) around 2006. And now the TDD/BDD crowd are fighting it out with the Architecture & Patterns gang with the DDD and DSL tribes assimilating the surviving concepts...
A member of a currently hip fashion trend will have a better staying power in a nasty flamewar caused by a random design decision about the color of a bike shed in an OSS project than a lone warrior. So you start having design styles competing for followers.
Meanwhile in the MS world (wild guess following) heavily funded 'central planning solutions' (from frameworks to design styles taught for certification purposes) offered by MS stymied competition of alternative approaches. A focus on - if I understood your correctly - usually very risk adverse business needs, while keeping the actual code of produced solutions hidden from outsiders additionally put developers under pressure to avoid experiments.
Would it be reasonable to say that we have an evolutionary system of small actors competing for developers interests (OSS) fueled by <insert book about OSS phenomenon> vs. a central planning approach of a major corporation backed by a huge war chest?
The search engine is a customized version of Solr.
The front facing website is done in PHP using a framework we developed at Massify (http://heavyfuckingmetal.com/). We thought about going the ruby or django route, but the front end is so light functionally we decided to go with what we knew inside and out. We'll also be using MongoDB for certain things.
The way we are phasing the rebuild, the SQL Server is the last thing we're migrating, so that will stay in the mix for awhile. It's the most complicated piece because it has a bazillion stored procs that need to be migrated/refactored out. The structure is fine for the most part, though a little de-normalization is probably in order. Eventually I hope to have that running on PostgreSQL by next winter.
The backend, or admin, will be done with heavymetal and cappuccino for the front-end.
As an aside, the entire rest of the company is mac based, so we've written a couple of desktop apps, as well as some server apps, in objective-c/cocoa using quite a bit of open source libs. We'll be putting some of our own code public on github in the next few weeks. We've also done an iPad app for showing our image portfolio to clients.
Good MS developers should learn to take what's best from the open source world and apply whatever is most useful behind the corporate firewall.
Let’s be honest about technology for a second: Things go wrong. No matter what solution you use things go wrong and for the most part non-technical management doesn’t understand that. When something goes wrong they want someone to blame.
If you decide to go with something like Ruby on Rails you have to contend with the fact that management doesn’t understand open source (or trust it) and have never heard of 37Signals. So the blame falls to you for having gone with a small “experimental” company rather than a “trusted” one like Microsoft (and yes those words in quotes are actual quotes from my attempt at using such technology)
Where as when something goes wrong with Microsoft technology it’s written of as inevitable (that’s where the saying “no one ever got fired for using Microsoft” came from) It’s a sad reality but sometimes you can’t pick the best technical solutions. Sometimes the extra time it takes to use proprietary Microsoft technology is worth the political capital you save by going with Microsoft. That fact doesn’t make me happy but it’s true.
You're very right, however in that no one gets fired for using Microsoft - but that's changing. Don't take my word for it - ask the guys in Building 42 - they know it too.
You touch on a very particular, hot topic in the IT world - that having a phone number to Microsoft will solve problems. Sometimes it does - but most often that comes at more than a bit of a price :).
On the flip side - my support channel is Google and I find my answers in about half the time as I would with a topic such as ASP.NET MVC. Rails is quite mature and people have tried everything with it - found where it's great and where it blows. I've had more to read on it than you can imagine.
Anyway - it is a sad truth and one that's about to change as the old guard at your company cycles out and are replace by people with knowledge and pedigree - namely people like me - who will systematically cull the policies that don't make business sense, and keep the ones that do :).
This doesn't mean "ax all things Microsoft" - it means "find the best value and leverage it". MS is changing its focus as it sees this - it knows this shift is coming - it's why ASP.NET MVC is Open Source and SQL Express is free, and more is on the way :).
On blame, every executive staff of a large company that I've ever seen casts blame. Yes there are startups with a small number of people that are all pretty even keel but as soon as you get to a certain size you'll get opposing interests and that's where blame comes from. The blame game is a political game played by people trying to get leverage over other people in order to get more resources. It's stupid but it's the reality of the world. If you don't see it you just aren't high up enough to be the one fighting for resources. Because as someone who read about Microsoft as a kid I know it was happening at Microsoft (Silverberg/Alchin?)
As far as brand, that's just human nature. Look at the side of any Grocery Store brand and you'll see the same ingredients as the big brands. But any grocery store manager will tell you Captain Crunch outsells generic white box crunch 100-to-1. That's why companies build up brands in the first place. That's why Microsoft brags about being one of the most trusted brands in the world.
So this really isn't old guard as much as it's the stupidity of human nature and I really don't see it changing that much.
P.S. This is Username: TomOfTTB not Username: SamAtt. If he doesn't want me posting as him he should learn to @#%& log out.
But you can always pick a better employer.
But at the team and individual developer levels I think there's lots of room for good open source solutions, and this option isn't always considered because developers are looking to MS for the next big thing.
I believe this is reflected in the certification programs too, because they don't focus as much on building a sound programming foundation as on making good Microsoft evangelists. From Microsoft's viewpoint, why not? But it's that divergence again from the company's perspective.
That doesn't make it right.
Not to say he's not a big name, but to say he's the most high profile MS employee beside ScottGu seems absurd. Even in the dev tools space I think you have to give that to Anders.
And easily the top .NET employee is Anders by far.
From your list of Technical Fellows it sounds like you're probably not a web dev, so you wouldn't have run into his stuff. An MS web dev these days would tend to list names like ScottGu, Haack, Hanselman, Conery, Walther, le Roy, Wilson, Verissimo, Lipton.
In other news, Anders is totally the cat's pajamas.
Rob Conery is one of the names that any fan of ASP.NET MVC knew. He was involved in the project when he worked there (I'd call him the most high profile MS employee aside from Scott Guthrie). To have him come out and say he couldn't make a startup work with Microsoft technology really tells you all you need to know about that.
I still need to use .Net at work but I think this combines with a bunch of other factors to push me away from Microsoft on anything else I do.