It’s been almost a year since I wrote Why Google Web Toolkit Rots Your Brain and I think that post deserves a follow-up.
I still get significant traffic to that post and the occasional comment or two. (Some people calling me an idiot or praising my criticisms.) I think most of the comments were warranted. I certainly didn’t know a whole lot about GWT and was wrong about a few things.
So here’s a rundown:
Things I was wrong about
Any web toolkit is bad
No toolkit is bad in any sense. They are good in that they can speedup development times for areas a developer is weak in. It can become difficult to fix bugs created/part of the toolkit, but that will probably be rare.
The way a toolkit can be bad is in it’s implementation. (Ignoring necessary standards, restricting features)
You lose the benefits of the target language
While this is true that you do lose the flexibility of JS when programming, there are benefits of using Java. I don’t like Java too much (although it was my first programming language), if your dev team knows Java well, stick with it. And you can embed JS directly (neat!) if you need to.
GWT does browser sniffing
I would still call this a poor design decision for a JS library, but in order to increase performance (which is becoming a hot topic these days), it’s mostly warranted.
GWT is bloated
While it does create lots of files, the user only downloads 1 JS file. That is a good thing in terms of performance because that 1 file is only what the user needs.
Things I was correct about
GWT ignores web standards
I’ve taken a look again at the GWT examples and the HTML is still pretty bad. Do we still need to use the <center> tag? I agree many people want to be insulated from browser quirks, but it could be done with proper, standards-based markup similar to YUI or jQuery UI. Semantic markup would make GWT apps easier to navigate for blind users too.
If there was 1 part of GWT that I would pick to fix, this would be it.
I would also say that a large majority of Google’s code ignores web standards. Even their accessible search uses display:none for a form label, effectively hiding from people using screen readers, their target audience. Google News, which could be rich with headers, paragraphs and lists, sadly is full of br’s, td’s and font tags.
Using semantic markup could also mean using a different stylesheet for mobile devices instead of completely different HTML.
GWT doesn’t gracefully degrade
While I’m not 100% sure it’s possible to gracefully degrade all GWT widgets and apps, some degradation is necessary. Turning off Javascript yields a blank screen.
Tabbing between elements would be nice, it’s possible to partially navigate in Yahoo! Mail via the keyboard, and it’s a pretty complex web app.
Finally
There are some good parts to GWT and some not so good parts. There are a few cases where it would make sense, but most of the time I’d recommend a good JS library instead. I don’t believe HTML and Javascript need to be extracted to such a high level. If you have the time, learn Javascript and use a Javascript library.
I hope this follow-up was useful, feel free to add your comments or thoughts about GWT, I’m sure we can get another good discussion going!