My take on Matt Raible's spreadsheet
When I first caught wind of Matt Raible's spreadsheet comparing different web frameworks, I thought it was a joke. I still do, but lots of people are taking it seriously (although, others aren't.)Here are my ratings on Lift (and, yes I'm aware that Matt's scale is 0-1 and my ratings are on Matt's scale, except mine goes to 11).Developer Productivity: Lift gets a 11, Rails gets a 5, most Java-based frameworks get a 1 or less. A seasoned Lift developer will be 10 times more productive writing interactive web apps than with MVC frameworks. @HarryH from Foursquare explains part of it in his Lift presentation (see Slide 10). With Lift, you don't worry about the plumbing, setting up routes, etc. Thus, Ajax is much, much easier and Comet (server-push) is better than any other framework available. Sure, writing a green-screen style CRUD app with Lift isn't a major win over other web frameworks, but when it comes to stuff that's hard or impossible in other web frameworks, Lift makes it someplace between super-easy and possible. For more, see my screencast on building a comet chat app.Developer Perception: Every web framework gets a 1. The folks that have gravitated to the framework are going to love it and others are going to deride it. Oh, and emacs is much better than vi.Learning Curve: Lift gets a 2 here. I've seen a number of reports on Lift vs. JSF2/Struts2/GWT/Flash/Spring MVC/Grails done internally by companies and government agencies looking to commit to web framework for various different long-running projects. While Lift has not been chosen for all the projects, Lift has consistently come in first in terms of smallest lines of code and top developer ratings (and these are generally Java developers who have had prior experience with at least one of the other competing frameworks.) So, repeatedly, big-business Java developers have been able to pick Lift up and deliver projects more efficiently than with competing technologies in shorter periods of time while learning the framework and the Scala language. Put another way, one corporate Lift developer recently posted to the Lift list:
understanding Lift is that one expects things to be so much more work
than it actually is.
Project Health, yeah, Lift is an active and growing project.Developer Availability, Lift gets a 0.5. Anybody who wants a Lift developer can find one, but probably not in their city. There are plenty of folks who do Lift consulting if you have a project.Job Trends, yep, it's zero.Templating, here again, I've gotta say, Lift gets at least a 3, if not more. Why? Well, there are at least 3 different ways to template a Lift app. You want to use Scalatewhich provides Mustache, Scaml (like Haml) and SSP (Velocity-like), you can use it with Lift. Lift also supports using Scala XML literals so you can code your templates right in Scala. Or, you can use Lift's snippet mechanism to have templates that cannot contain any business logic and are developer friendly. So, for example, if we were to build a table using Lift's snippet mechanism, our view would look like:
<table class="lift:MySnippet"> <thead> <tr><th id="my_th">Field Name</td></tr> </thead> <tbody> <tr id="my_tr"><td>An item</td></tr> </tbody></table>
And our Scala code would look like:
val (fieldNames, fieldValues) = DB.runQuery(...) "#my_th *" #> fieldNames & "#my_tr *" #> fieldValues.map(values => "td *" #> values)
So, the designer inserts a "lift:MySnippet" class into an element that has dynamic behavior and the developer binds dynamic content via CSS selectors. If you can find something that's more concise or more oriented to the way of the web, show it to me. But I think this is hands-down the best templating system I've ever seen.
I can go on in greater depth about Lift's use of simple concepts like keeping the page around as well formed XML until it's time to stream it to the browser which radically enhances security and flexibility. I could talk about the composition of functions as a much more manageable way to build any logic (basically, the promise of OO, except materialized differently.) But at the end of the day, folks have adopted Lift, despite its differences and those that acknowledge its differences quickly become more productive with Lift than almost any other framework. Those that embrace its differences change the world.