Matt likes to provide the dissenting Ajax voice here on untyping.
As overhead on Slashdot:
‘Zimbra’s chief executive, Satish Dhamaraj, says that when he started his company in December 2003, “I really thought that Ajax was just a bathroom cleaner.” Now his San Mateo, Calif., business has amassed $16 million in funding from venture-capital firms including Accel Partners, Redpoint Ventures and Benchmark Capital, the firm that famously funded eBay Inc. Peter Fenton, an Accel partner, says Ajax “has the chance to change the face of how we look at Web applications” and could boost technology spending by corporations, because Ajax is also being used to develop software for big companies, not just for consumers.’”
Ajax is a dangerous and immature technology. It is, in fact, a hack—akludge—to provide rich-client functionality in the browser.
While I’ll acknowledge that Javascript was intended from day one for interacting with the DOM, building entire applications that are predicated on dynamic, untyped tree-transformations is suicide (at best) without significant software development experience and rigor. With that rigor, it’s just dangerous.
What do I mean? Pretend that every HTML element has a shape. If that’s the case, then a document with a series of paragraphs might look like:
In this picture, the octagon represents the
body
tag, and the circles represent the paragraphs. If
emphasis tags look like a small square, then (zooming in) our picture might look like:
Unfortunately, to make Ajax work, you have to constantly reorganize this tree. The tree is
everything: it is the UI, it is the content, and it is the data for the program you are writing. And, I can casually replace any one node with a new node of a different type,
or I can insert whole, new subtrees.
Anywhere. Anytime. And, without any validation or safety. So, I can take my first picture, and insert an entire copy of it anywhere I like:
The only problem with this is that, if the octagon is a
body
tag, this is
completely invalid HTML. But that’s not the worst of it; the tree representing all of my interface, content, and data is a massive, and complex, piece of state. So, after part of my program modifies the tree, I have to forever remember that the state has changed. Keeping track of state is already a dangerous part of programming; it is the cause of crashes in unithreaded programs (memory leaks, for example), and a source of huge problems in multithreaded programs (via problems known as deadlock, livelock, race hazards, etc.). This is why Google Mail and other Ajax-y applications are a miracle of hackery: the fact that they run, without completely buggering up constantly, is a nothing short of a holy intervention on the part of some higher being.
Given that the compiler does nothing to check your typing, and that you have almost no run-time debugging support, Ajax (as currently exemplified by Javascript and XML over HTTP) is certainly only version 0.5 as tool or solution for web-based development goes. Or, perhaps it is just part of a space of tools, where some produce very portable/accessible applications, while others allow the developer to produce richer, more interesting applications (while sacrificing portability).
It may be that Ajax is just the most portable, and least rich/safe way to develop applications for end-users at the moment. Rich clients, like
OpenLaszlo, represent a greater level of safety, as well as a much richer set of tools. Widgets, like Apple’s Dashboard and
Yahoo’s Widgets (formerly
Konfabulator, an excellent, cross-platform predecessor to Apple’s Dashboard) provide some of the ease of development of the WWW with much of the richness of the desktop—yet there is a run-time engine that provides a modicum of protection and safety for the end-user. And, of course, desktop applications: they sacrifice portability, but give you the full power of the host machine.
I started this post with a quote about people investing millions in Ajaxy technology. People investing millions in Ajaxy startups scare me; they’re sheep, following the herd. However, Ajax (as exemplified by Javascript and HTML) will mature, and we’ll see tools and frameworks develop that will make application development “safer” and less hack-and-slash. Or, it will be abandoned, the <BLINK>
tag of the new millennium.
Then again, PHP exists, and it’s a large, steaming turd of a language that grabbed significant market share entirely too easily. So, what can you do?