I'm always a fan of the one language solution, with Java to rule them all, and until today nobody could excite me about Polyglot Programming. My perpective gets more support after I read the "Rise of Polyglot at Netflix" presentation, which says that Polyglot is expensive, even for company in the category of Netflix. At the end of the day, we need to be productive. Our applications should have a high-quality standard and the total costs (TCO) of our software development should be manageable and low. To be able to reach this goal we have Java with Spring Boot or JakartaEE on the server-side, which offers REST interfaces. So logically, for user interface development on the client-side, I always bet on GWT, which is a Java to JavaScript compiler/transpiler. In this architecture you will have Java on both sides, removing the need for Polyglotting.

In this week I carried out a training for seven internal Java developers, who are good at Java but don't really have a real training in GWT yet. Within two days I managed to get through following slides:

Introduction to GWT

Your first GWT App

UI Frameworks for GWT

Dependency Injection with Gin and Dagger2

This is also the first time that I could use GWT Boot to be able to let them do their exercises and tasks. GWT Boot Starters are a set of convenient dependency descriptors that you can include in your application. You get a one-stop shop for all the GWT and related technologies that you need without having to hunt through sample code and copy paste loads of dependency descriptors. GWT Boot Starters are similar to Spring Boot Starters. Here are what I found using GWT Boot so far:

To show the developers how to create an example project with Maven and GWT Boot Starters is quite easy for me. The pom.xml is very short, and very easy to understand and extend. There's no need to copy & paste a lot of Maven dependencies in their pom.xml project.

The idea of generating the real GWT module file from module.gwt.xml is a bit difficult to understand. But this is not a show stopper.

The start would be a lot easier if I could offer them something like Spring Boot Initializr. It is definitely a must to also offer GWT Boot Initializr for GWT community.

All in all, it is great to have GWT Boot Starters. It is definitely easier for Java developers to start their own GWT project with their chosen UI framework, as you have a lot of choices for UI frameworks in the GWT environment.

The second thing which is actually always a disadvantage of GWT — at least I always thought it was — is the documentation. The documentation of GWT is actually really good, especially the "core" functionalities of GWT. I could find every single core aspects in GWT easily:

Compiler / transpiler

Emulated Java Runtime

Interoperability Layer to JavaScript (JSNI and JsInterop)

Development artifacts:

HTML host pages

Standard directory and package layout

GWT modules: units of configuration

I have to admit that the documentation of tools and UI component frameworks is not good. But as I only use GWT Boot, everything is quite simple. No need to install a plugin, just Maven. So the one page below is the only tools I need to develop with GWT productively.

What was most interesting to hear from the Java developers is what kind of UI component frameworks are interesting for them and easy to understand for them. Here are the categories of UI component frameworks which can be used in GWT:

Almost all of them like the idea of widget-based components, and from Elemental2-based components, they prefer Elemento and DominoUI, which is also based on Elemento. One developer who already knows React could not directly understand the idea of GWTReact and VueGWT. All the other Java developers are not fond of the idea of working with VueGWT and GWTReact. It seems that the basic idea of VueGWT and GWTReact is too different in comparison with Java UI components frameworks like Swing or JSF.

I still have one day in the training in which I will talk about advanced topics like:

Interoperability with JavaScript (JSNI and JsInterop)

Client/Server Communication

GWT Architectural Patterns

GWT Best Practices

But so far my conclusion is that using GWT for Java developers is a great idea. You don't need to introduce new tools and IDEs. No new language like JavaScript or TypeScript is necessary, so that you as a Java developer can be very productive directly in the beginning, doing programming for the web browser within your familiar development environment. To all Java developers: you could participate to lower the TCO of your software development costs. With GWT you don't need to stay on the server with Java; you can also have fun on the client with your Web browser.