When I started working with Qt back in 2003, what appealed the most to me was the network and GUI parts. The network part because I love network programming and have ever since I started with programming. The GUI part because of my demo scene background, but also because I never managed to get a working GUI for my apps, I just didn’t have the patience to learn all the different platform specific (horrid!) APIs. I’m a bit lazy in that way. Being a huge Linux fan didn’t make the situation better. And there was Qt, making it easy and consistent. For a C++ programmer, GUI programming with Qt on the desktop was and is just wonderful. There’s a problem though, and I’ll make a bold claim. Most programmers aren’t that much into making good and fancy GUIs. We can cope with assembling them, perhaps, and it feels great to present a functional GUI to your grandma (“I made it, ‘ma!”), but at least I get a headache whenever somebody suggests that I redesign the GUI because of this and that principle. I’m a programmer. Fiddling with a GUI just isn’t my thing.
These days we are seeing a paradigm shift in the way UIs look, and how they are written. Yes, I used the term “paradigm shift” ;-), kudos to Thomas Kuhn ;-). One of the most misused terms in our times, it’s a typical manager buzzphrase that doesn’t make sense unless you really don’t care (just translate it into “awesome new stuff”, now it makes sense) or if you know what it means. In this UI context it actually works though ;-). I don’t know if I know what it means but I’ll explain what I think it means. If this interpretation changes, then that will just lead to infinite terminology recursion but enough about that. People talk about paradigm shifts when you change your entire view of how something works. It’s really about leaving your comfort zone and looking at things with completely different eyes, and then maybe wondering how on earth you could have seen things differently in the past. “I want to be a lumberjack!!” These shifts happen at different levels of impact but you see them all around you. I think they are often seen in places where the world takes a huge leap forward somehow. I can think of a number of examples (“fatherhood”) but I’ll leave that as an exercise to the reader ;-).
On the UI front, designers are taking over. Tools and languages are improving, and the graphical designers, who have been at the mercy of programmers in the past, are not going to be anymore. As for programming languages, we’re going to see less need for compiled code and traditional APIs. Less of the imperative way of thinking (the programmer’s way) and more declarative. Who cares which button is added to the layout first or second, in whatever order? Nope, it’s about how the designer wants it to look, and behold, it ends up exactly as the designer wants it. Also, the designer doesn’t expect his UI to perform badly. That’s going to seen as a bug in the framework.
I’m a programmer, and us programmers aren’t ending up unemployed. 😉 I don’t think designers can or should go much beyond the design. What I do think is that programmers will be forced to write even more UI-agnostic code than they have in the past. Instead of writing C++ code that toggles the connection between objects and enables/disables and hides/shows GUI elements based on events, we’ll have to write APIs that expose the properties, the knobs and handles that affect them. This is not yet another MVC movement, this is about writing beans; library code with no UI whatsoever. There’s a huge difference. And the designer will have perfect freedom to redesign the UI based on just that. Developers will have no control over the UI. In particular accessing elements in the UI shouldn’t really be allowed at all (e.g., calling findChild() on a QFileDialog, ugh!). Instead we expose objects and properties to the UI layer, and cross our fingers and hope that the designer makes use of our functionality. Having less UI features exposed that we can use from C or C++, will for some be quite a painful change.
I cannot convince everyone. As a programmer, you really have to see what happens when you make the change. But I warn you, it will be hard to look back. The designers will suddenly feel like an integral part of the development team, making iterations upon iterations of their UIs and testing them in real-time on the target platform, using the _real_ features instead of just faking them. The “compiled code” doesn’t change at all while the UI is evolving. The designers won’t even need to talk to programmers at all. 😉 I honestly think we’ll see a lot more designers emerge from their dark caves and join software projects. This, of course, is seen from a programmer’s point of view. The designers will maybe think “Finally, I don’t have to deal with those… interesting programmers!”.
It’s a paradigm shift. What a wonderful world :-).
PS: Qt 4.7 will be the first version of Qt that incorporates Qt Quick, a feature that moves us closer to the world-as-described-above. Search for QML, Declarative UI, Kinetic, Qt Quick and so on with your favorite search engine, text, images and video. We’re keeping our cards close (a bit too close perhaps) for the first release but this technology will evolve rapidly after its first release.