Before you click over this because you know me as a Flash hater, give me two seconds. That's not what this post is about. It's about a larger issue. It's about how awesome it is to be a web developer these days.
Ten years ago, being a web developer sucked. Deployment was easy (rsync to production and done), but the tooling available to us was dismal. And I mean crying-naked-in-a-snowstorm dismal. Browsers were inconsistent, their built-in programming environment (read JavaScript) was reasonably functional but horridly slow, and hardware wasn't beefy enough to deal with scripting languages for hard-core number crunching.
But we had the Flash Player. Flash provided an environment that beat all three of those problems, and beat them soundly. It was consistent across browsers and operating systems, used a similar language to what we were used to (both JavaScript and ActionScript are ECMAScript implementations), and it let the developer compile the script into something a little lower level to run in a dedicated VM on the user's machine which meant it was faster. Of course, Flash is an animation toolkit, but we figured out how to bastardize it with the single-frame movie with a include-and-stop script in it so we could build applications entirely with script (like we wanted), but leverage the Flash player to actually run them. Not to mention the rich support for visual stuff. All this led to the concept of a RIA (Rich Internet Application). Something similar to what we had on the desktop, but deployed to the web with all the benefits (and some drawbacks) that has.
Then browsers got their act together. We started seeing a unifying focus on application development with the browser as the environment. People got serious about fast JavaScript runtimes. Standards were written (e.g., CSS2/3, Canvas) and largely adhered to. And hardware got faster. JavaScript application frameworks (EXT, YUI, GWT, etc.) showed up to leverage all that, and now it was possible to build RIAs using standards supported by a wide array of vendors.
In order to compete with this, Adobe released Flex, which is an application development framework for deploying to Flash Player. It was horridly expensive, difficult to work with, had all kinds of implementation problems, but was better than what you got with JavaScript. For a while. Unfortunately a single software company, even one of the largest in the world, couldn't hope to compete with the widespread interest and momentum around browser-native RIA development. Flex died as a web application framework pretty much before it was released. Which isn't to say it wasn't used (it was and still is), but the browser RIA juggernaut crushed it like a bug.
Then we saw the huge surge in mobile devices. It started with smartphones and now includes tablets and e-readers of various form factors. Fortunately for both consumers and manufacturers, the web wasn't new, so they were able to jump right on top of all the standards and browser capabilities which had been created for the desktop. A huge market segment opened up for web application developers and browser-native was reasonable right out of the box.
Adobe again tried to compete by creating Mobile Flash Player, but the benefits of Flash Player are small on new mobile devices, especially considering that so much of a mobile device experience is through web-connected native applications, not traditional web applications. And here we have Adobe's smartest move yet around Flash Player: killing it for the mobile market in favor of restructuring the ecosystem around using it as a development environment for native applications.
Unfortunately, I don't think it's going to matter because Flash is still really slow and heavy and it's not really that much better to develop with than the truly native dev kits. Yes, it offers the promise of cross-platform deploy, but just as Java demonstrated 10-15 years ago, that isn't much of a selling point for a single application. People expect not just native execution, they expect native idioms, which means you have to develop for a specific platform, even if you're using a cross-platform toolkit.
So where does that leave us? As consumers it leaves us in a great spot: there are lots of ways developers can deliver engaging applications to us, on all our devices. As developers it leaves us in a weird spot: we're stuck with being either web or native developers, with Flash now trying to occupy a sort of middle ground (develop web-style, deploy native). On the desktop I think Flash (via AIR) holds some promise, but ultimately I don't think it'll last. The platform just isn't compelling enough to justify the dedication it requires to use it. Java was designed for very much the same purpose as AIR, and virtually no one uses it. Java moved almost entirely server side, something which Flash isn't likely to do.
Most interesting is the PhoneGap/Titanium/etc. movement which is very much paralleling the browser resurgence I talked about earlier. Huge communities of people are working to take all the skills we have as web application developers and give us a build process to take web-ish apps and compile them into native applications, in much the same way Adobe has use AIR to compile Flash into native apps. However, I think Flash is going to lose in exactly the same way, and for exactly the same reasons, as it lost in the browser.
Bottom line, if you use the web or a web-connected device (read: everybody) the world is going to be glorious in a couple years and only get better. If you're a developer trying to work in that space, you need to learn browser technologies. It's the way of the future. Flash had it's run, but it's been on the way out for a long while. It'll stick around, just like COBOL and Fortran have, but without an alternative path like Java ended up taking it isn't going to stay relevant to mainstream developers.
Barney,
This pretty much echoes my thoughts on the subject as well.
-Rob
"Flex died as a web application framework pretty much before it was released. Which isn't to say it wasn't used (it was and still is), but the browser RIA juggernaut crushed it like a bug."
Really? Flex died that long ago? I've been nothing but a Flex contractor for the last 6 years, and it's done nothing but grow and pop up in more and more places each year. I come across more Flex positions and offers in a single year than I ever did during my entire 8 year CF developer run combined. Heck, as I look through Dice for my metro area, there's probably 5 Flex positions for every 1 HTML5 position.
I read until the "Flex died…" sentence.
You have no clue.
Devin,
You'll note I didn't say it isn't used. However, the amount of resources pouring into moving the framework forward (let alone fixing the brokenness inside) is tiny compared to what is pushing comparable browser-technology-based frameworks forward. When Flex came out it was best of breed, so a lot of people started using it. Of course, the bar was quite low at that point. The bar is a lot higher now, but there is still huge momentum behind Flex, so it will continue to be used for quite some time.
That said, from a long-term perspective, Flex was pretty much DOA. It was based on a technology (Flash) which was already on the way down, and the implementation was lackluster to say the least. Adobe had the ability to take their existing Flash platform and wrap it with a bunch of "pretty developer stuff" and capture an emerging market, but they didn't try to build a stellar platform, they just went for the market. Which is totally legit, I might add. But when you grab that market share, then you have to evolve into something which can keep it, and they haven't done that (and would have had trouble trying due their binding to the underlying Flash stuff).
Wow!
I thought the comments would be a bunch of boring amen's but here we have two people who actually choked on the idea that Flex is dead?
A rudimentary search shows 325 jobs with html and 49 with flex on Portland's craigslist. Now you must understand that most of those flex's don't count due to the words "flex pay, flexible, flex your muscles" etc. The HTML results all do count due to its wonderful uniqueness.
There are a few positions left with real Flex among them as requirements, most are optional with HTML as an alternative.
I believe Barney meant Flex is dead like IE 6 is dead. It was dead, and then died a very slow and painful death. It doesn't mean it isn't still taking up market share http://micgadget.com/11633/why-the-chinese-still-favour-internet-explorer-6/.
Adobe has no qualms about jumping ship, it is smart business; don't be the last on board.
um, I don't think I've ever seen a web development posting that didn't mention HTML regardless of what the primary technology was. Way to be smart Josh.
But seriously… CF developers talking about "other" languages as dead? That's hilarious!
I am a web developer working with JavaScript and Flex. What I don't get really is why the people not working with Flash/Flex are so afraid of it, hate it and want it so badly to be dead :]. Even Jobs was afraid of flash getting on iOS devices because maybe the plugins can give similar user experience and people wont buy apps and he wont get his 30 %.
It is sad that people are afraid and unite to kill a technology just because it is better then what they have now :\. I don't see any problem in keeping flash as the cutting edge tool to make stuff which will be available in HTML after 2-3 years.
Alexander,
No one wants Flex to be dead. No one wants Flash to be dead. That's not true, of course, but I personally don't. The point is that the market has spoken and it says that Flash and Flex are no longer cutting edge. They were best-of-breed when they were new, but they've both been superseded. Why they were superseded is a matter of debate, but I think we can all agree that Adobe has put fewer resources into Flash Player and Flex than the browser makers and JavaScript tooling providers have poured into their respective projects/products.
Don't get me wrong, I've built a good number of Flash-based applications and several decent sized Flex apps, all of which would have been impossible with JavaScript at the time. But even four years ago, I was already rewriting Flex apps in JavaScript because the performance was better, the environment was more functional, and the code more maintainable. Certain parts (like FDS for paging down tens of thousands of records and sorting them client-side) remain Flex, but the application changed to JavaScript. Which isn't to say it's all roses with JavaScript. Debugging support is a huge boon with Flex and FlashBuilder Pro. So is compile-type typechecking. But the dependency on DisplayObject, the very slow release cycles, the closedness Adobe has maintained over the project, etc. all make it an inferior choice even with it's huge selling points.
The Steve Jobs thing is a completely business-related issue, nothing to do with development. He didn't care about the development experience, he cared about the user experience. In his mind, making developers work twice as hard to give users a 10% better experience is a reasonable trade off. His argument against Flash was about speed of the UI and compute power needed to run it, both of which are sound. Flash Player was about control over the user experience. With Flash Player around, he wouldn't be able to control the apps which were deployed and ensure they met the high expectations for Apple-ecosystems products. Again, a valid set of choices to make, but not one I'm considering here. If Apple's refusal to allow Flash Player on iOS devices was the determining factor in Adobe abandoning Moible Flash Player they'd have done it 3-4 years ago, not hung on until now.
Well more or less in the long term your arguments are valid even if JavaScript is inferior language to ActionScript it will triumph in browsers. Because it gets support from companies like Google constantly building better JavaScript engines. If Google decide that JavaScript is inferior then it will be in trouble. Or maybe they already have decided it (Dart).
About Apple I think they want to have control over app store at any coast ! They want people buying apps not using web apps :]. I hope one day they wont be able to control the apps users are using. But I am sure they definitely wont like people using web apps versus app store apps and they will do something about it when time arrives :].