I distinguish three different styles of application user interface:
- Desktop: Rich UI widgets, very responsive, minimal dynamic effects. For example, Microsoft Word or any traditional desktop application.
- Web 1.0: The traditional web site. Basic UI widgets only, slow response (with frequent full-screen refreshes), no dynamic effects. For example, this website.
- Web 2.0: Ajax style. Rich UI widgets, very responsive, dynamic effects such as fades and slides. For example, Google Maps.
Not all Web 2.0-style UIs are on the Web, and not all Desktop-style UIs are on the desktop. Picasa 2, the photo management application, is a good example. It’s a Windows desktop application, but it definitely has a Web 2.0 interface with a lot of movement and use of colour and fades. Such an interface may not always be appropriate, but the visual approach works beautifully (literally!) in this case.
For many, the heart of Ajax is asynchronous server communications. GWT includes RPC functionality, but it’s pretty bare. For example, GWT and Scriptaculous both allow you to fetch data from a server; Scriptaculous will automatically populate a div with the data, but the GWT code sample simply has a comment saying “do some UI stuff to show success”. You’re on your own; it really is like building a desktop GUI application. And of course, since you write in Java, you have to declare a serializable Java class for each type of message you need to exchange with the server. Ruby on Rails it ain’t.