Archive for September, 2010

Taking stock of my thoughts on ASP .NET and the alternatives

If you’re an ASP .NET developer (Webforms or MVC) and haven’t picked up on the recent undercurrent of negative sentiment towards the Microsoft development platform then I’m not sure where you’ve been. In any case, welcome back. To fill you in, there have been a number of developers who have raised various concerns about the efficiency of an ASP .NET web developer, and how as a group, they compare to those developing with other languages (such as Ruby) and frameworks (such as Rails). I thought I would add my thoughts to the conversation.

I want to be as objective as possible about my thoughts so as to add value to the discussion, but I guess I need to confess that my development experience is heavily weighted to the .NET platform. Over the years I’ve developed web, mobile and desktop applications using various languages, platforms and frameworks. That said, by far, I am most proficient in C#.

Firstly, I think it is important to note that it is somewhat difficult to accurately compare development contexts. It’s easy to confuse platforms, frameworks and languages. I once overlooked a developer typing this into Google:

Say what?


What makes Ruby on Rails so popular? Can we attribute its success to the language (Ruby) or the framework (Rails) or both? Some people may say that what makes developing using Rails so awesome is Ruby itself. Others may say it’s the framework, in which case the same developers could be as efficient on other similar frameworks such as CakePHP. If I had to venture a guess, I think that most experienced developers would go with option 3. It’s the entire ecosystem that makes Ruby and Rails so popular, as much as it’s the .NET ecosystem that makes ASP .NET a popular option as well. This makes it difficult to compare aspects of each.

I have never had the opportunity to develop an application using Ruby on Rails but I think I have enough experience on various other web platforms to raise the following point. No single language or framework defines a developer, especially a web developer. Right now, most of the applications I develop are web applications and this means I need to be fairly proficient at a number of languages, not just C# ( HTML/XHTML, CSS, JavaScript and SQL to name a few). When it comes to assessing efficiency of developing on a platform, we need to address all of these aspects. Sure, Rails addresses the SQL aspect (Active Record) right off the bat, but how does a Rails developer approach HTML, CSS and JavaScript development? As web developers, we spend a lot time in our server side language of choice, developing code to dynamically output HTML. That said, a lot of time is also spent on the client side as well – designing, developing and debugging JavaScript. How does the Rails environment stack up in this department? We make use of Spark as our view engine on MVC projects, and I guess Rails developers use something as slick (or better?). I’m not saying Visual Studio offers a better story for developers, I’m just interested to hear more about the Rails context. From a server side perspective, what is the debugging experience like in Rails? I’ve used Eclipse and a few other popular IDE’s and I’m yet to find one that matches Visual Studio’s debugging capabilities. Within a minute, a developer can write some code, set a breakpoint and have the breakpoint hit within seconds. No drama. The real point I am trying to make is that there is far more to just the server side language, or the framework that impacts on the efficiency of a developer in the web context. There are a lot of other factors which include the IDE, view engine and development web server.

I mentioned earlier that I haven’t ever had the opportunity to develop a Ruby on Rails application. That said, I have started learning Ruby and have recently developed an application that routinely synchronises our Basecamp data with a local SQL Server database. I specifically wanted to learn Ruby out of the Rails context first. I was delighted that within a relatively short amount of time I had some functional code. It bodes well for my continued personal investment in Ruby. I took a crack at developing my Ruby application using NetBeans on Windows. While I enjoyed developing the code (and learning more about chunky bacon), I really didn’t enjoy the environment. Debugging was a pain in the ass and I resorted to debugging by logging. I hate this approach. I’m not sure if my experience is unique, and would really appreciate feedback from seasoned Ruby/Rails developers on this.

One of the topics that constantly repeats itself in these types of conversations is that .NET developers are stuck. They aren’t good at venturing out of their comfort zone and learning about new languages on other platforms. While this is a gross generalisation, I fear that the recent converts to Ruby from C# are right (for the most part). I think familiarity plays a key role in this and the problem does not only apply to developers using .NET. In the book The Pragmatic Programmer, Hunt and Thomas recommend that a developer should strive to learn a new language every year. I must say that when I read this, I was astounded. Every year? Thats crazy! Then I realised that not only is it possible, but they are right. You see, developing on a single platform using the same language and framework, year in and year out has some advantages, but in general, your solutions to problems tend to take the general form of your environment. My recent foray into Ruby has proved this. Your mind becomes boxed into approaching problems in a single way where there may be another number of better solutions that expose themselves wonderfully when you are forced into a different pattern of programming. All in all, I would say that even though I haven’t been using Ruby for long, I’m a better C# developer for it. Note, that I am not suggesting that Ruby itself was the reason, you could replace Ruby with Python in the paragraph above and I believe the same would hold true.

When it comes to comparing .NET (and Microsoft solutions generally) to alternative free and open source solutions, cost and licensing are often cited as reasons to migrate away from the Microsoft platform. This seems to be an important part of the discussion. The argument that always seems to be tossed around is that as a startup, you don’t want to have sink your limited cash into technologies when the alternatives are free. I think this argument is flawed for a few reasons. If you have no experience using the alternative language, framework and platform then the comparison between cost only makes sense if your time is free. Lets face it, in the startup world, your time is not free. Whether being first to market is important or the fact that you only have a small window of opportunity where you can sustain yourself in the back of your garage, you will want to focus on getting your application deployed as soon as possible. Having to sit and learn something new and foreign when you should be focusing on building your app seems to be a weird approach to me, especially considering the factors described above. Even if you could get up to speed with the new language/framework/platform relatively quickly, once you have your application up and running for the world to see and use, you will have no experience dealing with runtime operational issues that usually crop up as people start using your app. Even when you have experience on certain platform, dealing with edge case operational issues can be tricky. In an ideal world, time wouldn’t be a factor. You could perform a systematic analysis on all languages, frameworks and platforms and assess the pros and cons of each. Unfortunately, I doubt anyone has the luxury of doing this.

So given that it makes sense to build your app using technologies familiar to you, what are you in for? Microsoft haters will most certainly start quoting licensing costs for SQL Server Enterprise Edition, Windows Server Enterprise Edition and how the costs will sink you in a month (or less). Again, I think one needs to look at licensing objectively. I just deployed an environment with 4 servers.

  • 1 x load balancer running Nginx on Ubuntu
  • 2 x web servers running Windows Server 2008 Web Edition
  • 1 x database server running Windows Server 2008 Web Edition and SQL Server 2008 Web Edition

Hosting environment

In terms of costing for bandwidth, hardware, offsite backup etc., the licensing costs associated with the Microsoft operating systems and servers accounted for just 6% of the monthly cost. I would hardly call that prohibitive. Sure, if I had to use the Enterprise (or even Standard edition) versions of the software, the costs increase quite dramatically. That said, I don’t see why a web startup would require these versions. In any event, if you want to compare apples with apples, then one should consider that the enterprise version of MySQL is not free. At this point, NoSQL fans will probably be butting their heads against a wall muttering that neither SQL Server or MySQL are good options. That’s fine. Use what works. The likes of MongoDB, CouchDB and RavenDB are available on the Windows platform (the latter developed in C# exclusively for the platform).

What about Visual Studio? Isn’t it quite expensive? Well, unfortunately, yes it is. That said, I think the one thing people don’t mention when discussing the cost of Visual Studio is what you are actually paying for. Have a look here. The Professional Edition with MSDN Essntials ($799) unlocks the following software for you:

  • Visual Studio 2010 Professional
  • Windows 7 *
  • Windows Server 2008 *
  • SQL Server 2008 *

* Per-user license allows unlimited installations and use for designing, developing, testing, and demonstrating applications.

So for essentially $800, you should be sorted for all the development software you will need to develop, test and demonstrate your application. It’s not free, but the deal isn’t too bad either.

This post is getting a bit long so I’m going to end here by saying this. While I’m a proficient C# developer, there is no reason why I should not dedicate time to learning about alternative languages, frameworks and platforms. It’s only going to make me a better developer, whether I stick to the Microsoft platform or not.