An Open Letter to Web Apps
Dear Web Apps,
why are you so hard to program? What went wrong? When I first met you, you were naught but templating utilities and form-based data entry. I used you to sign up for mailing lists and maybe order a book.
Look, it's not that I don't find you useful. You're awesome. I mean, reading and composing email from anywhere is great. So is keeping my life organized on my web calendar. But let's face it: for anything complex I still resort to good old windowing-system GUIs. They spent decades perfecting the UI system for Windows, and with Qt and GTK ported to almost all systems I have a huge choice of frameworks. Am I going to start building spreadsheets with ExcelOnline? Or programming in VisualStudioDotInternet?
Ok ok, so maybe I'm a hypocrite-- this very letter is being written with a web app. Maybe I'm frustrated because you're just so difficult to build. Trying to pipe form data through HTTP is one thing, but trying to turn that into a fully fledged event-based GUI programming model is like trying to turn your garden hose into a telephone. Microsoft tells us this is what we want, and gives us a half baked component based model to do it in. Sure it's pretty, but with having to send every button click back to the server pretty much kills the user experience. And god forbid you want to use the *gasp* Back button! The Java world may be better, but it's like getting a blind tastebud-missing person to pick a flavour for you at La Casa Gelato-- there's a good chance you're getting durian. Some frameworks are awesome, some are awful, and many are just too plain cumbersome (why oh why so much XML configuration!!).
Some pundits say component-based frameworks (ASP.NET, Java Server Faces, Tapestry) are the future. But how can you put event-based components over HTTP? Sure, it's technically feasible, but in a way it contravenes the first law of distributed objects--DON'T. We learned with CORBA and RMI, you don't want to make many small requests through a network, so why would we do the same over web pages? A form post was meant as a large grained request, and yet we're abandoning that to send "OnMouseMove" events. Isn't that a step backwards?
Others have come forward and said AJAX is the true solution. Ok, so in ways it seems to solve the fine-grained request problem. But now we're splitting code all over the place... The view of our nice clean MVC model is now partly in Javascript and partly in whatever framework we wrote and if you're used to working with crappy code, probably partly in the database. :) So instead should we write our entire UI in Javascript (it worked for Google)? That would force us to depend on browser implementations even more and leaves us with yet another language to deal with.
So, Web App, my issue is not with the functionality you provide, but mostly with the technology on which you're built. You've made me spend far too much time programming needless plumbing code that should be taken care of automatically. And too much time writing XML configurations that are basically duplicates of what I just typed in code. And too much time thinking about how a component's post-back will affect the session state.
Why can't we just use you to buy books and leave complex user interfaces to technologies designed for it?
Sincerely,
greg.