Bruce Tate’s Beyond Java is really Web-centric; he argues forcefully that lightweight Web apps are one of the forces driving people towards things like Ruby on Rails and Seaside, as opposed, say, to Java EE. My observations are mostly consistent with Bruce’s, which as a Sun employee makes me think a lot about how we can haul the Java platform into the lightweight-web-app sweet spot. (So far I’ve failed to convince the Software organization to redirect most of the Java EE engineering resources into a radical pursuit of Convention over Configuration. [He’s kidding -Ed.]) But Bruce’s book had me all cranked up to write about the Right Way To Program The Web, and then synchronicity whacked me upside the head with a demo I saw today, and I’m bathing in Web-architectural angst.
Bruce explains why programming for the Web is hard. Stateless query-response message interchange is empirically a terrific architecture for world-scale highly-dynamic hypertextual information systems; at least for the only one that’s ever actually worked. But it’s a major pain in the butt for programmers, who would like to think they’re in a controllable linear dialogue with their users (after all, that’s more or less how the users see it) while still supporting the “Back” button. Hence all the session and containerization voodoo in Java EE, which to its credit is trying to solve the whole problem in the general case in a flexible way.
Bruce claims that the “continuation” facility, commonly found in dynamic languages, snaps neatly onto the problem of making the Web look like a linear dialogue. Clearly, continuations are kind of hard to understand and not for casual or novice programmers. No problemo, says Bruce, frameworks like Seaside (layered over Smalltalk) hide the weirdness and let you just carry on an orderly dialogue with a user via a Web browser.
In my mind I was screaming “No! No! No!” because I’ve generally felt that the pain and complexity involved in object-relational and object-XML and object-messaging mapping outweigh the benefits; that if your application is based on exchanging messages, then the message exchange has to be visible to the application programmer. I’m not alone in having this kind of reflex.
Well, it seems that both Ruby on Rails and Seaside would tend to disagree, and the evidence is building up on their side.
And today I had a date with a Vancouver startup that I’ll write up when they’re ready; they have a very damn sophisticated Web app that I wish I’d been smart enough to think of, solid useful function and a ton of graceful little flourishes; and it’s all Seaside, all continuations, all simple methods that conduct orderly dialogues with the user.
Maybe I’m wrong. Maybe you can abstract the Web away. Hmph.