ASP.Net MVC vs Ruby on Rails Smackdown Results

I’m sure everyone saw this already, right?  In case you didn’t then it’s worth a look.

It amazes me (though it shouldn’t) how far a community of developers can take something vs. a software giant like Microsoft.  It looks like open source wins against corporate.  Sure, the results are not exactly scientific but interesting all the same.

Where Are We Without Community?

communityI came across a really interesting blog post yesterday with a recurring theme.  It was by developer Dave Newman titled, Leaving .net.  Does it sound familiar?  It does to me and after reading Dave’s post, the reasons are a familiar sound.

So many .NET shops have their heads buried in the sand, developing mounds of software with antiquated principles:

A company I worked at once had been operating for years under the assumption that it was OK for software to take months to integrate and deploy; they had never heard of continuous integration. They thought it was normal to rewrite your application from scratch every 2 years; they had never heard of Test Driven Development or iterative development. These techniques have been proven to significantly raise the bar on quality, cost of development, cost of maintenance and general morale. Turns out you can still find, in this day and age, software practitioners who haven’t even heard the terms.

It has been shown that Test Driven Development (TDD) improves code but it seems the .NET community fails fully embrace the concept.  I have been part of many .NET projects where stakeholders simply refused to spend the time doing TDD, not when deadlines need to be met.  They were simply too naive to know that deadlines would still have been met but with better code.

My last .NET project was led by a developer who was the master of “not invented here” syndrome.  The project was a unique eCommerce application originally architected 5 years earlier and consisted of some complicated code.  The developer, who didn’t want to spend the time to learn the system, wanted to rewrite the code his-way so he could understand it.  His way was easily worse and did not take into account all the side effects his way may have introduced.  I am glad I am not the only one to witness this:

I have also seen on numerous occasions developers build their own libraries and frameworks to solve well understood problems in curiously terrible ways. The endless rebuilding of data mappers, logging code, object resolution mechanisms, messaging systems and web frameworks adds up to a massive waste of time, effort and potential. I’m not talking about public collaborative efforts, I’m talking about in house “Not invented here” syndrome. This is what happens when you have a community cut off from the world. A community that doesn’t talk to each other and work together. This is what the .net community is.

Communities exist everywhere but none stronger than those in the open source world.  I can’t think of a more diverse and deep group of developers than those using Ruby.   Developers in this community rally around each other, support each other and the projects they create.  If there is no support, no community development the project simply dies off.  One can use Ruby on Rails as a great example, go ready it 1600 contributors.  This is project done for the community by the community, not reinventing the while but improving it.

Has Microsoft ever done anything like this?  No. The closest I can think of is IronRuby and they have since turned their back on that project.   Microsoft tends to treat developers as something to be fed, who pushes out updates as fast as possible to get the pack on to the next thing.  If you look at Silverlight going from v1.0 to 4.0 in a blaze or WCF moving fast to its current state, developers can keep up.  Most of the time we can’t keep up because we are fed and are not allowed to also cook, like in the Ruby community.

This is the same with ASP.NET MVC:

Last year Microsoft released a new web framework called MVC. It’s not new by web standards, it’s not even new by .net standards as the Monorail project had been alive for years before. Yet people were waiting for it. People were waiting for Microsoft to deliver it to them. There were already open source MVC web frameworks and an army of .net developers who could have collaborated to make them great but nothing much happened. It took a handful of developers at Microsoft to make their own framework and now MVC is the hot new thing.

But they did not:

This new web framework is better than the previous one and is quickly becoming the de-facto. Microsoft released the source. Someone created a github repository. This repository is being watched by 30 people and 5commits have been made to it. 5 commits! Why is this number so horrendously low? Because Microsoft don’t take patches. They’ll release a new version of MVC without anyone’s commits. Worse than that, everyone will start using their new version and the github repo will just start again.

The little community that exists for Microsoft wants to see success but Microsoft won’t let them.  Microsoft doesn’t believe in community, they may say they do but actions speak louder than words.  In the end, they are only hurting themselves.

Microsoft has been touting open source for a while now, not because they want to but because they think it will improve their bottom line.  Isn’t that what they’re all about?

Imagine if Microsoft would have opened up ASP.NET MVC completely and let the community create it?  Yes, I know they released the source, but that does not make the project open source.  Open source means they take contributions from the community and the code is created and owned by the community.  Big difference.

Why Leave .NET?

Well, for one, to make a statement.  If all .NET developers accept the status quo, nothing will change.  Secondly, to see what it looks like from outside the .NET world, how other developers live and breath.

You don’t have to actually leave the technology, maybe explore others and gain some experience.  The experience could make you a better developer and bring back something to .NET, possibly to help Microsoft become aware of a better way.

Where to go?

Well, almost anywhere else.  I like the Ruby community but I have heard Python has a great community.  I would bet almost any open source community will welcome you.

What’s the answer?

I developed C# code since it’s inception and wrote many lines of C++ using Microsoft Visual C++ before that.  These are really good technologies and we can’t just write them off.

I hear developer’s stories all the time, how they dropped .NET and moved to technology X.  The Ruby community itself contains many ex-.NET developers who have seen the light.  How can we make Microsoft see the light?  I don’t know we can, they need to be looking.

It comes down to this, Microsoft is losing without a community.  I am referring to the passionate community, like the 1600 who created Ruby on Rails.  I think as more and more developers gain experience and see how other communities function, they will leave and move on.  It won’t be overnight but it will happen unless Microsoft is willing to change.

So to answer the question, where are we without a community?  The answer is no where.

To Rails 3 or Not to Rails 3, That Is The Question

The release of the web framework, Ruby on Rails 3, may lead to some pretty interesting decisions for current Rails developers.

The description of Rails 3 from the Agile Web Development with Rails 4th Edition (beta) book from the Pragmatic Programmers web site sums it up pretty well:

Rails 3 is a major release—the changes aren’t just incremental, but structural. So we decided to follow suit. This book isn’t just a mild reworking of the previous edition to make it run with the new Rails. Instead, it’s a complete refactoring.

Rails 3 introduces many new things, many new conventions.  Version 3 looks more like a new framework, rather than just a version upgrade.  Previously, the amount of effort to move from one Rails version to another was pretty small and unit tests helped reveal problems.  We still rely on our unit tests for this purpose but the effort is not as small.

Rails 3 does offer many fantastic new features and the new architecture attempts to fix problems and areas where the current Rails framework falls short, but at what cost?   I have heard people say over and over, moving to Rails 3 is difficult.  Will this prevent migrating projects to Rails 3?

Jeremy McAnally has written a great ebook titled Rails 3 Upgrade Handbook where he outlines the tasks developers will face when moving existing Rails applications from version 3.   To quote Jeremy from the book about moving applications to Rails 3:

The new features, performance improvements, and API changes aren’t incredibly drastic, but they do present great opportunities (and challenges) to those looking to upgrade existing code to the newest version.

Jeremy also has a plugin that became an official Rails plugin that helps guide the developer through the upgrade process.

I know with certainty there are Rails developers concerned up moving existing code to a new Rails, new conventions.  One of Rails strengths are the convention it employs and as developers we learn the intricacies of our framework the hard way.  Rails 3 will require an education to learn the new conventions.

Could this be a point in time where faithful Rails developers move on to a different framework? I doubt devotees won’t, but maybe some.

Active Server Pages

Case in point, Microsoft Active Server Pages.

I have witnessed and been involved with this before when Microsoft created a web framework named Active Server Pages, referred to ASP.  After a much successful growth of ASP developers, Microsoft decided to create ASP.NET which is their current web framework based on webforms.

The problem was that even though the product names were very similar, the truth was they were drastically different.  Developers were faced with:

  • No upgrade path – code written with what we refer to today as “Classic ASP” could not moved to ASP.NET.  It required a complete rewrite since the programming model was different than ASP.
  • Big learning curve – Classic ASP uses a scripting language where there was a single page with logic in the page, ASP.NET moved to a page with a code-behind page in either C# or VB.NET.  The two are very different and someone versed in Classic ASP had to learn everything from the ground up

Developers were faced with making the jump to ASP.NET or deciding to move on to something else, leaving behind the gripes of Microsoft.  Some moved to PHP, as it resembled ASP more than ASP.NET.  Some moved to legacy ASP project to Rails, the views looked more like ASP than ASP.NET

Rails

Up until this point, Rails has been a pretty smooth transition from version to version, even when applications were running older versions of Rails such as 1.2.x and moving to 2.x was pretty straightforward.  I moved many Rails 1.2.6 applications to 2.x and faced little major issues, certainly not a rewrite.

This is not the case when moving to Rails 3, there is no smooth upgrade path and users will be forced to rewrite significant parts of their applications.

The architecture of Rails has changed in a big way, mostly by Yehuda Katz of Merb fame.  Rails 3 takes the good from Merb in many ways, as I would expect.  The view from 50,000’, Rails 3 does not closely resemble Rails 2.x as we know it today.

A Fork in the Road?

As was the case with Classic ASP, I think developers either bit the bullet and rewrote their applications with pain and learning, stayed put and are still there today or moved to a different web framework, maybe Rails, maybe PHP.

I think we are at this point with Ruby on Rails.  Developers are faced with the task of moving to Rails 3 and making that technical leap, not to a new programming language as with ASP.NET, but a new framework.   Rails 3 is different enough from any previous version that moving existing application will not be a rewrite but a change enough to be a considerable effort.  Rails developers are well versed in how the framework functions, Rails 3 is very different.

An Opportunity?

This may be an opportunity for other frameworks to gain some traction.  New developers considering Ruby on Rails 3 have a bigger challenge with the framework, it is not exactly the framework DHH developed only a few years ago.

Other frameworks worth considering:

  • ASP.NET MVC – from Microsoft, allows developers to use C# and VB.NET to create scalable web applications pretty easily.  It also has good community support.
  • Django – a Python-based web framework which has many great features and productivity points.  Django has been around for a few years now and gaining a good amount of traction.
  • Sinatra – a Ruby-based framework with a simple, yet powerful implementation.

I could be wrong here but I think the advantage Rails had with an easy-to-learn framework, great productivity and easy upgrades will be a bit strained in Rails 3.

This will surely be a great opportunity for developers well-versed in Rails 3 to start or expand consulting career helping companies with existing Rails code bases upgrading to Rails 3.  I think these folks will be in high demand.

Conclusion

So what will happen?  I don’t know. Rails is a great framework but converting a large code base is going to be a challenge and Rails 3 is the future, not the 2.3.x code base.

I know I have asked more questions than I have answered.  I hope the powers that be in the Rails leadership understand the concern.

UPDATE: As comments have pointed out, if this sounds Rails-negative, it is not meant to be.  I see this a call for people with knowledge of Rails 3, bits of experience with upgrading projects of any size to share the knowledge.  Blog about what you did, even the most mundane details and share what you know so jump ship DOES NOT happen.

InfoQ: Architecting TekPub – Moving from ASP.NET MVC to Ruby on Rails

 TekPub_logo

UPDATE: Rob Conery posted a great overview of using MongoDB at Tekpub.  The InfoQ post also stirred up some discussion on Hacker News.

I had the opportunity over the past week to talk with Rob Conery (ex-Microsoft) and James Avery about TekPub, one my favorite training sites on the web, for a detailed case study for InfoQ.

The interview was particularly interesting as it covers Tekpub moving from ASP.NET MVC to Ruby on Rails and ASP.NET MVC is the subject of a book Rob Conery co-authored.  This says a lot about the position Microsoft puts small companies in when trying to build a product.   It also says a lot about the advantages open source gives to these small companies.

As often is the case, cost is a big factor.  Please give it a read.  The interview is up now – Architecting TekPub – Moving from ASP.NET MVC to Ruby on Rails.