|
Previous score : ASP.NET 1, Ruby 1
Personally, I'm a pretty huge fan of Agile programming. For a very long time, one of my mottos has been this:
If hindsight is always 20/20, then build hindsight into your development plan. Plan to build something that you can look back on and refactor, modify, or completely throw away.
What I mean by that is when building software the "Agile" way, I often try and produce small units of testable functionality. I want to ensure ensure that not only is the code stable, but that the unit of code is meeting the demands of use cases from a business point of view (validation taking place, business rules are tested and working, etc). Once I'm satisfied with that small, discrete, fixed target of code, I can move on and go from there. That's one small aspect of Agile programming. The other aspect of making my application Agile is that it is flexible, easy to change, and easy to maintain. Having been programming for over 20 years (that's right, I'm so old that I will soon be subjecting you all to my crotchety curmudgeonry!) I know that no matter how good your design is, you are going to have to stop coding in the middle of the process and make a change. I'm not talking about refactoring for pretty or more efficient code (which you shouldn't be doing until the end of the process, if you're behaving and being a good little programmer), I'm talking about hitting Refresh on that requirements document and seeing three bullet items dissappear and two new ones appear in their place.
One of the biggest pieces of Agile programming (for me, personally) is Test-Driven Development (TDD). What this basically means is that you start out with a bunch of use case scenarios that have been properly built and agreed upon by all concerned parties (hopefully one of those parties is a good interaction designer). You then map the use case scenarios to tests. These tests can be run against your model, your view, and your controller separately or together. Some sample tests might be:
This is all really good stuff, and I'm sure you'll find that rules and test cases like this exist regardless of whether you're using ASP.NET, Java, Rails, Cold Fusion, Cobol, or anything hideous like Visual Basic (sorry, had to throw that in there... no offense to you VB folks) :) What we see here is a divergence in integrated support for this process between ASP.NET and Rails.
Here's how testing is supported by and integrated with Rails:
Now let's take a look at what you can do with ASP.NET as far as TDD and integrated testing:
My conclusion for this Round:
Round 2 (Agility) goes to Ruby.
Current Score: ASP.NET 1, Ruby 2.
Stay tuned for Round 3 where I compare Object-Relational Modeling and data access.
They are very good articles, Kevin. Looking forward to seeing the round 3.
I've found both articles very interesting as I am starting to warm to Ruby
on Rails, although currently work with ASP.Net (and eeew ASP). Looking
forward to round 3.
Man this stuff rocks!!!! You are the Green Lantern of ASP.Net 2.0 Vs. RoR!!
I have developed mostly in ASP and ASP.Net, but also wrote an app in RoR
recently. I think your comparisons so far are spot on. One thing I miss
when developing in RoR are the rich server controls - datagrids, calendar
controls, etc. There is also a huge third-party market for rich server
controls making complex GUIs with tree-views, etc. quick in ASP.Net. I
wonder if there are similar things in the works for RoR (the RoR
"form-helpers" aren't there yet).
I like your perspective. I've been using ASP.NET from beta. I like rails
and I am about to start a new project, so I'm researching using Rails or
ASP.NET. So far I prefer Rails.
Good stuff, I have been using ASP.net since 1.0 and I have never really
liked it for web based programing. I am looking for something else and this
might be the ticket!