February 8, 2011
In my opinion, no JS library, toolkit, framework or whatever currently comes even close to what Flex/AS3 have to offer. The components of Flex have been developed over many years, have undergone major overhauls from one version to the next and are now what can be considered somewhat »mature«. There are different components for all kinds of use cases, good documentation, lots of examples, good styling and skinning options, good ways to customize and extend everything, layout management and data binding. Furthermore, there are lots of non-visual components and classes that help you building data-driven applications. It’s a one-size-fits-all solution. Just use the open-source Flex SDK and you’re good to go.
»BUT«, you’re going to respond: Isn’t the proprietary Flash Plugin (that you hate, of course) needed for Flex apps? Yes, Flex applications run in the Flash Player. That’s the way it is…and it has some major advantage: You get a mostly consistent experience across all browsers and operating systems (except for a few performance differences and other minor issues). And you can also build desktop and mobile applications with it. Even though HTML5 and JavasScript may be the future »standard« way of building rich applications, for developers it makes things just much more complicated. Sure, you can already use some of those cool new HTML5 features (canvas, web workers, web sockets, geo location, local storage etc.) in the latest browsers but that usually means having all kinds of JS fallback solutions in place until you can take it for granted that most of your users have modern browsers installed that support all these features (without relying on fallbacks – which will be at some unknown point in the future).
The situation is even worse for mobile development but that’s another topic… Basically, »standards-based« web development is just starting to suck more and more and getting way too complex. You easily find yourself having dozens of different JS dependencies in your project, just for the sole purpose of getting a nice UI, interactions and some kind of MVC/MVVM-stuff consistently across all browsers. VM-based approaches such as Flex solve some of this pain but they’re no silver bullet either and introduce different issues. On top of all that, there’s the server-side/database layer with another set of different frameworks and options. In a typical full-featured modern web application (which is everything more complex than some Hello-world- or How-to-create-a-blog-with-my-favourite-framework-example), you typically have dozens of moving parts you need to manage: Use framework X here, use library Y there and then spend time fixing all arising integration and performance issues.
What’s really interesting about all that is that a lot of all web application development isn’t really rocket science (for rocket science applications, essential complexity cannot be avoided). Most of the time, it’s all about handling simple data transport and syncing with the view layer. But even for those simple tasks, accidental complexity starts cropping up everywhere. So, no matter what tools you use: Today, web development sucks: http://harry.me/2011/01/27/today-web-development-sucks/