OK. I don’t get Flex. By my understanding, Flex is the components / widgets from or for Flash. Actually, I can’t find a definition. I’m hitting the main pages, and they all treat me like I already know what Flex is and why I need it. But I don’t. From the buzz I see around the web, it smells a lot like the promises of Java Applets circa 1996. It’s the universal platform - rich internet applications! cross platform! run everywhere! It’s in the browser, so you lose yet another tab / window to some application that’s not quite a full application!
As a life long Mac user, I’m dubious of any cross platform promise. Java with some cross platform toolkit or another has never been a great experience on the Mac. Eclipse fares fairly well, but I’m still very aware that I’m in a different environment. This has something to do with look, but really it’s about feel. There’s a way that I expect my widgets to feel: ways that I can move around in a text field, responsiveness of a button, and so on. Cocoa’s text fields benefit from their NeXTStep ancestry which has provided some powerful and extensible features: basic EMacs keys (ctrl-a and ctrl-e to get to begin and end of line, ctrl-k and ctrl-y for kill and yank to a separate copy/paste buffer); spell checking; in place dictionary lookup; often, a common set of search/replace features including ‘use selection for find’; word completion; etc. Input Managers can be installed for even more control. I used an Input Manager to get word completion in early versions of Mac OS X, before it was a built in feature. Now I use “Edit in TextMate” to edit HTML TextAreas, emails (from both GMail and Mail.app), even to tweak a filename using TextMate’s editing tools. Any Cocoa text field, whether it’s a single line or a large block, can be wired this way without the application’s knowledge.
In cross platform toolkits (as well as most Carbon apps), I lose these features. XUL (Firefox/Mozilla); Java AWT, Swing, and whatever the hell Eclipse’s toolkit is called; and now: Flex. Don’t get me wrong: I like that these toolkits enable some apps to exist on the Mac at all; but I’ve seldom been as productive in them as I have been with native apps.
I took a look at a Flex Quick Start page covering “Building a simple user interface” to see basic Flex in action. As I feared, the controls followed a different set of rules than those I expect. Since the tutorial covered only basic UI, there wasn’t much that was terribly impressive. I didn’t see anything that stood out from what I had seen in rich JavaScript/DHTML toolkits like Dojo and YUI.
So I decided to do a quick comparison - how did some of the basic Dojo widgets compare to the basic Flex ones? I went to Dojo’s “See it in action” tab and looked at the FormTour, which housed some basic widgets including one of the few “rich text editors” that works in Safari. And sure enough, even though some of these widgets had some extra behavior wired in, they were still built on browser native elements. All of my usual keyboard behavior worked as expected in text fields - even in the rich editor.
I can see how Flex may be useful for fast dynamic graphical components, such as charts. Beyond that, I feel like it’s another round of the magical cross platform kool-aid; another round of trying to shoehorn a sub-universe within the sub-universe of the web browser. I think it has its uses, but some people seem to think that it’s the new holy grail of rich internet applications.
I’ve heard this song before, and I’ve been horribly disappointed almost every time. So far, all I’ve seen of Flex is a retread of the promises of Java Applets. I would like to see statements about what makes Flex different. Has it learned from Java Applets and the various “abstract” Java toolkits that promised a common UI everywhere? Does it have a focus, or will it devolve into servlets and enterprise architecture? Is Flash still an animation platform, a movie player platform, or a GUI/Form platform? Can it handle all of the above? Will Adobe be wiser than Sun and avoid big clashes with Microsoft?
My gut says not to trust it.