Monday, January 16, 2012

Learning new web frameworks

So in case you didn't already know, I'm a web developer and have been doing it for over 10 years now and still really love it.  It's always changing and there's always new things to learn and new challenges and the web is relevant to me and almost everybody else.

The majority of my career has been around Microsoft based technologies such as ASP and ASP.net. Currently, I've adopted Microsoft's ASP.net MVC framework and really love it.  It makes sense and is easy to use.  The razor template engine is really great too.

However, I wanted to step out of my comfort zone and learn some new frameworks, see what they do differently or better, and allow me to experience new languages.

I first started off dabbling in Python and using the Django framework.  The language is nice and I was pleased with the framework, but wasn't really impressed with the performance. Also, not a lot of major sites have adopted it so it doesn't seem to be gaining a lot of popularity.

Then I tried out Spring MVC which uses Java.  From what I read, I thought I was going to like it, especially with Spring's built in DI framework and various other components, but it took too long just to configure a project and get it going.  There was way too much configuration, and I prefer convention over configuration. Also, the template engine I didn't care for much and would have had to rely on a third party template engine like Apache Tiles to effectively create templates. Importing tags and the tag styles remind me of ASP.net web forms, which I liked initially due to the ease of use and reduced coding, but then you lose flexibility and control of the rendering.

Then I looked into the Scala language which is a nice blend of OOP and functional programming.  It can be compiled against the JVM or .NET CLR, which is nice since you can still use all the Java libraries out there.  C# has some functional paradigms such as lambda expressions and the ability to treat functions as variables using the Action and Func types.

Two frameworks that I've looked into for Scala are the Lift and Play frameworks. Play also supports Java, but for the Scala version, uses a Scala based template engine that out performs the Groovy template engine that Play uses by default for the Java version.  Lift looks promising and is currently used by FourSquare, however, the documentation is lacking and incomplete, with many pages still saying "TODO".  Both frameworks also allow you to save changes and go without having to recompile and re-deploye/restart your app.

I decided to invest my time learning Play since it has a style that I'm familiar with and has better documentation at the moment.

What is your favorite framework and language to use for web development?