I'm here at the GTTSE '07, the Generative and Transformational Techniques in Software Engineering summer school which I participate in to get started in the area of transformational techniques which an important part of model-driven engineering, which is what I will be doing my Ph.D. on. There's quite a few interesting people walking around here. Yesterday I had a chat with Scott Blum of Google, who works on GWT (Google Web Toolkit) and gave an implementation on their Java to Javascript compiler and all the optimizations they are doing there. We talked, among other things, about why Google develops a framework to basically make it easier to compete with them. The reason for that is that Google wants to convince more companies and people to build web applications, when companies do that (hopefully using GWT and a slew of Google tools, like the Google APIs) the playing field is leveled. Which application is used no longer depends on who gets the best software distribution deals, like which software is pre-installed on Dell desktops, but instead everybody gets a fair shot at getting using them -- on the web. That also means that it is easier for Google, or anybody else, to compete.

GWT is not something that was developed in-house, originally. It was developed by a company that already worked on Java to Javascript compilation and AJAX before Google Maps and the AJAX term was coined. Quickly thereafter the company was bought into Google and now they're working with about 14 people (if I remember correctly) on it in Atlanta. GWT is not currently used for any of the big products that they run, but it is considered for some new projects and some projects are actually being developed with it now. The focus, however, for the GWT team has been mostly at advocating it to the outside world rather than to Google internally.

I find the GWT project very interesting. They do a lot of the annoying, difficult work that you would otherwise have to do yourself. The Java to Javascript compiler is quite amazing, they do a lot of clever optimizations that can make your Javascript code a lot smaller than it would otherwise be (for example by removing all classes and methods and other pieces of code from libraries that are not used).