Learning New Web Frameworks

As a .NET programmer a lot of my professional life is focused on ASP.NET MVC and Webforms but outside of my little Microsoft bubble there is a lot development happening with new and existing web frameworks. So this blog post is a To Do list to remind me of what I need to learn in the coming months.  And hopefully it will provide some interesting links for other .NET web devs.

The first two on the list are the most hyped web frameworks in the programming world right now, Ruby on Rails and Sinatra.

Ruby on Rails is probably the main reason that ASP.NET MVC exists as it forced Microsoft to build something better than Webforms. Learning Ruby on Rails is probably what will occupy most of my designated learning time in the near future as it also entails learning a new programming language, Ruby. Ruby on Rails will really challenge some of my assumptions about how to build a website. I had pretty much discounted ever using the Active Record pattern for data access but Rails seems to use it in a way that works. Not only that but it uses the Active Record classes as persistent view models which is totally contrary to best practices in the .NET world. But the Ruby language’s dynamic nature seems to make the whole architecture work really well. See Hadi Hariri’s blog post about what the M in MVC is if you use ASP.NET MVC . It seems like a lot of .NET devs are looking at Rails code and questioning their C# code.

I am using a mixture of Ruby Koans and The Ruby Programming Language book to get myself started with Ruby. I just completed the Rails for Zombies tutorial which is a well-polished, light introduction to Rails programming; recommended if you just want to dip your toe in to Rails. I just starting reading the rails tutorial (thanks for the tip, Petter Wigle!)

I’ll be looking to buy a Rails book soon and am thinking about Agile Web Development with Rails. Anyone got any recommendations?

Another reason to learn Rails is its open source ecosphere which is much larger and more developed than .NET’s and will hopefully be a source of ideas for my .NET work as well. Just look at the amount of Ruby clones popping up in the .NET open source community and some of these clones really fill needs that are not being filled by Microsoft. On a side-note I really recommend FluentMigrator which is a clone of Ruby on Rails database migrations.

Sinatra has generated a lot of hype as well during the last two years. It is a web framework that has a totally different philosophy to all the frameworks I’ve worked with. It aims to be a simple DSL for creating web applications as quickly as possible. It looks to be very elegant and something that sounds very useful in certain situations.

There has recently been a sudden increase in the number of web frameworks in the .NET world. The most interesting one is Manos de Mono built by Jackson Harper from the Mono Moonlight team. The main features are its own built in high performance web server that can handle thousands of connections (perfect for long running applications with persistent connections, the Twitter web client is the perfect example), simpler routing than ASP.NET MVC, a templating engine with HTML5 boilerplate templates and that everything is mockable for easy testing.

I’ll also be taking a look at two new competing .NET Sinatra clones, Nancy and Nina. I can see myself using one of these for simple web services. I’ll also be trying out MonoDevelop instead of Visual Studio while developing with these. It will be interesting to see just how much I miss Resharper.

Another framework on my list is Knockout, a MVVM Javascript framework written by Steve Sanderson. And finally Moncai, a Heroku for .NET looks really interesting. The .NET world really needs an easy way to deploy web applications in the same way that Ruby developers can with Heroku. AppHarbour is another new hosting service that I want to try out as well. I did think about having a look at FubuMVC and Monorail as well but I have to set a limit somewhere.

And the end product of all this exploration will be some sort of web app (or maybe even several web apps). My own blog engine is one option (just like my colleague Johan) as I could then host my this blog myself. Whatever it turns out to be I’ll let you know.