« The Old Fashioned | Main | Design Sketch »

Web frameworks reloaded. Just use...

Last year I was dismal about the state of web frameworks, or more accurately the sheer number of them. Things are looking up. I'm down to four stacks!

Plone

Powered by Plone..

Ok, so Plone strictly isn't a web framework. But it does a bunch of things that you often end up needing from a framework. User management, document templates, rich editing, i18n, search, live editing, extensibility, portlets, wiki, forum, accessibility, skinning. Stuff like that. All there. In terms of an ootb experience in getting something useful done with content, Plone is unmatched. Plone's actual framework is Zope2 (via a layer called the CMF), which is complicated and not always liked by developers (best explained here by Jason Huggins), but Plone itself is focused on users, not developers. Developers have to suck it up, especially developers who are used to working with database backed sites, ie where the answer to everything is an RDBMS. So be prepared to roll up your sleeves if you want to integrate Plone with another system.

StrutsTi/Struts

Powered by Struts..

update: turned this one around; StrutsTi means that WebWork becomes a safe bet too.

The recent unification of WebWork and Struts roadmaps surprised me, along with a lot of others. Up to then WebWork and Struts were competing frameworks, where WebWork won the technical battle, and Struts the adoption one. What organisations like about Struts isn't technical, it's social. Most enterprise Java devs know their way around Struts, thus it's less of risk for an enterprise to commit to it. Aside from some things I just don't like about Struts, it was starting to show its age, and with the vendors pushing JSF as the de jure JEE framework over the de facto Struts, you had to wonder about its long term prospects. What Ti means is that Struts ancien becomes a solid bet all round, since the community will be forced to figure out how to migrate onto Ti when the time comes and Struts is less likely to be abandoned. WebWork is a good engine to work with, better than Struts, so Struts devs will naturally upskill to Ti rather than migrate something like Tapestry, SpringMVC or whatever the JBoss crowd are doing this month. All WebWork really needs is first class integration with Jython so it can dispatch actions to Jython scripts. And to turn it around - if you're thinking about deploying on WebWork, the Ti announcement is nothing but good news.

Django

Powered by Django..

update: contextualised the effbot's django quote to mention Turbo Gears.

In describing his recent experience with Django Fredrik Lundh has more or less echoed my own. I installed it, skimmed the tutorial, started writing a webapp, and had something up and running in just about the most enjoyable first half an hour of learning a new technology that I can remember. Django is good software. Really good. The community is in rude health. Even the BDFL is coming around. Python, going mainstream, is in need of a major cull on the web frameworks front, and Django seems to be just the thing to help that process along. As Lundh puts it "At this point, I'd say Django *is* the winner in the LAMP-as-in-Python space, with TurboGears as a "worth keeping an eye on" second -- it's not quite there yet, as a quick scan of the mailing list headers shows.".

Rails

Powered by Rails..

Rails is the project I think that convinced other communities, especially Java and Python, that accomodating lots of "me too" frameworks doing essentially the same thing, is really really dumb. [James Governor, is more articulate in describing this as "web framework consolidation" - perfect.] Rails is great fun to use, you get to learn Ruby as a side-effect, and producing decent sites is straighforward. Rails bundles with good Ajax support. One scenario for Rails is that it becomes the Lisp of web frameworks as bigger language communities learn and clone its approach rather than switch. Nonetheless Rails would still be a good framework whatever other communities choose to do.

Naturally plenty of people are going to disagree with these choices and will have good things to say about other stacks. Personally tho', I'm done seeking.


Colophon: why no PHP/Perl stuff? Simply ignorance - I just don't know or use either language for webapps.


February 5, 2006 08:58 PM

Comments

Matt Raible
(February 5, 2006 09:10 PM #)

What about TurboGears? I've heard good things about it - some like it better than Django (of course).

R.J.
(February 6, 2006 01:18 AM #)

For the Java space I still highly recommend taking a look at Wicket - http://www.wicket.com

Fredrik
(February 6, 2006 09:59 AM #)

My Django quote continues "...with TurboGears as a "worth keeping an eye on" second -- it's not quite there yet, as a quick scan of the mailing list headers shows."

Bill de hOra
(February 6, 2006 12:14 PM #)

Fredrik, I filled out the quote to include Turbo Gears. Matt yes, if you're evaluating Django, you should check Turbo Gears as well.

Fredrik
(February 6, 2006 01:12 PM #)

That was more an attempt to answer Matt than a complaint about your post ;-)

Django is a winner; if you want a Python framework, you want it now, and Django's scope feels right for your application, you don't have to look at anything else.

Sylvain Hellegouarch
(February 7, 2006 10:15 AM #)

Winner in which context?

AFAIK, some tools are better suited for certain tasks.

Django is not the best option in some application cases not is TG nor Plone, etc

Stating one framework (gosh that's an horrible word) is a winner is just entirely useless and misleading IMO...

But if it suits your needs then it's al good ;)

- Sylvain

Fredrik
(February 7, 2006 10:53 AM #)

Note the "if Django's scope feels right for your application" qualifier. Then go read the "really really dumb" part of Bill's post.

Sylvain Hellegouarch
(February 7, 2006 11:03 PM #)

I did read it but you've stated in many occasion that DJango was the winner without the "qualifier" you mention (like your blog entry in the first place).

I don't mind anyone liking it and saying it, but I'm really fed up at all that "mine is the best" crap.

What is the point?

Fredrik
(February 7, 2006 11:25 PM #)

"I don't mind anyone liking it and saying it"

Well, you do, obviously. Now think about the "really really dumb" part again, until you get it (feel free to read Guido's posts on that theme too).

Sylvain Hellegouarch
(February 8, 2006 11:11 AM #)

Since Guido has posted his message on web frameworks (which in my opinion he should have been more careful about) it has been an endless: "mine is better" or "this is the winner".

AFAIK, your public blog entry does not mention anything about "being the winner in the case you are doing this or that type of work". Sure you've said it in a comment above... fine I can't argue anymore, can I?

I don't mind you saying it because I do respect your choice but like Guido you do not realise that you have influence (thanks to your work on other projects) and therefore you should be very careful when you speak on some subjects. Guido for example requested from the community to give him hints on what tool to choose whithout saying what kind of application he was building... How are we supposed to help him?

Regarding the "dumb dumb" part, you are missing the point that many Python projects like Django actually started before RoR and as such didn't really mirror it. What's wrong with that as long as you don't claim being the only one providing it? It's OSS right?

To a certain degree, copying is not a bad attitude because it helps imroving the situation. At some point people are fed up with existing solutions and go on a different path like you did with ElementTree when you were fed up with xml.dom I suppose.

However, I could argue that I knew REXML before ElementTree, would I say the latter is a copy of the former and thus a "dumb dumb" project?
No I won't. Each one is good in its context and there is no winner.

Really, I am not attacking you or your ideas but simply the fact that when people like you start gaining influence, they should really be more sensible at the way they put things. That's all :)

Bill de hOra
(February 8, 2006 06:26 PM #)

"However, I could argue that I knew REXML before ElementTree, would I say the latter is a copy of the former and thus a "dumb dumb" project?"

Not the same thing. REXML is a Ruby lib, ElementTree is a Python lib. My point is that having multiple *frameworks* that more or less do the same thing is dumb; it's not good for the frameworks' language, it's not good for the framework devs, and it's really really not good for the end user of frameworks, ie developers, who have to take unneccessary risks. [The Python XML situation was a bit like that for a while.] And it's easier to walk away froma library; you tend to get locked into frameworks more.

All said with the important caveat that an OSS project isn't obliged to me in any way, just because I find excess choice in frameworks a miserable state of affairs.