Why the HTML5/JS community should respect the Flash community
Nowadays the debate about HTML5 vs. Flash became really popular and a lot of misinformation is going on… My intention with this post is NOT to say that one technology is better than another, specially since I don’t believe that one is better than another but that they have different purposes, my idea is to show that there is a bunch of things that those communities can learn from each other… Please read the whole post before commenting. My intention is not to start a flame-war. – I’m an HTML/JS/CSS developer that happens to know Flash/AS3 too, not the opposite…
The technologies “aren’t” that different*
I think one of the main reasons why the HTML community is biased towards Flash – besides the annoying banners and “skip intro” websites – is that flash is a “closed box”, they don’t know how it works, don’t know what is inside, the source code doesn’t show up when you view the page source, a lot of people use the technology without a good reason, don’t know the pros and cons, don’t know available features, isn’t “standard”, etc… (people tend to fear/dislike what they don’t understand). Mac users also complain about the performance of full-screen video (which was improved a lot with Flash Player 10.1). I’m going to try to explain very briefly the Flash platform and to show some similarities but without getting into details about each feature (for brevity).
ActionScript (programing language used to develop Flash/Flex applications) shares a lot of things with JavaScript, both are based on the “same standard” (ECMAScript), the syntax doesn’t differ too much and a lot of things actually works exactly the same way on both platforms, many methods in common and many things from Flash API were based on the DOM (including the event bubbling system and the idea of “nodes”/child elements).
Adobe Flex applications (component driven application SDK based on the Flash platform) uses a markup language based on XML called MXML to describe components and to make it easier for developers to create simple elements without the need to script everything using Actionscript and split the application logic into different “layers” (really similar to the way HTML+JS works) – If you are a JavaScript developer think of Flex as something similar to Ext JS, qooxdoo, DHTMLX, etc. Another thing in common is that Flash supports CSS for some of the text field styling and Flex uses it to customize components.
Flash isn’t as close as it seems, the language is open-source and based on a “standard” (ECMAScript 4 was abandoned before conclusion), the SDK is open-source, the SWF file format is published and can be implemented by anyone, the virtual machine is open source and was donated to Mozilla, etc..
The Flash community has an open-source/sharing spirit
It is really impressive the amount of free libraries and frameworks available, some of them developed by renowned companies and shared between direct competitors. I don’t know the reason for that but it’s true, people are always receptive and wiling to share knowledge and work. If you need something specific there is a big chance that someone already implemented it before and published it as an open-source project or posted the source code on his blog. The same happen with bugs and “magic formulas”…
Flash developers are used to changes
The past 10-14 years the platform changed a lot, from the basic timeline animations to the introduction of the first “action commands”, than introduction of AS1 in 2000 (which is really similar to JavaScript – prototypal inheritance, etc), introduction of video support (2002), a new version of the language that supports class-based inheritance (AS2) on 2003, on 2007 the release of AS3 – a complete rewrite of the language following the ECMAScript 4 working-draft spec – etc…
Most of the Flash developers that I know came from a design/motion background and learned to program for fun, just because they wanted to make cool stuff. Most of the CSS/HTML/JS developers that I know also started the same way, playing around trying to make something cool.
Many Flash developers also know a different programming language and play around with different stuffs, just to cite a few of them, the guy who sits by my side was mainly a flash developer not too long ago and now does way more Objective-C (for iPhone/iPad apps), one guy is doing a lot of C++ stuff (for installations and also for iPad apps), the other one is playing around with Java for Android Apps as a personal project, the other is coding a game for the Xbox in C# and a socket server in Java during his free-time, the other is learning CSS/JS, another guy learning how to program Flash websites/apps for mobile devices, a guy writing a extension for TextMate in Ruby, another one coding some back-end in C#, Java or PHP… – all of them inside the same company, working side-by-side and sharing experiences/knowledge…
Flash devs knows how to code highly visual/interactive stuff
HTML is awesome for displaying a large amount of text and static content, but wasn’t built with the purpose to create highly interactive/visual experiences. I know nowadays a lot of things can be achieved on the newest browsers using the latest technologies like OpenGL, canvas, SVG, CSS animations (and I’ve been doing some of that) but the HTML community isn’t used to code the same kind of “applications” that some of the Flash developers are used to (the opposite is equally true), any good Flash developer coded from scratch at least once most of these things: scrollbar, video player with custom controls, streaming/buffering, drag and drop, 3D interface/elements, interactive video, particle system, physics, pixel/image manipulation, dynamic vector drawing, etc… and are used to this kind of work. – The kind of knowledge used to code a clean/semantical markup is completely different than the one required to code a complex interface/interaction and to create appealing animations and transitions. It took a long time for the community to understand the platform and to start using it well…
AS3 is a more mature language
I know that many people will hate me because of this statement but please let me finish. ActionScript developers always respected Java, C++, C# developers because those guys are usually way more experienced at solving complex programing problems and knows about a bunch of technical details that people coming from a design/motion background never knew that existed. Things like continuous integration, unit testing, design patterns, code organization/structure, documentation, build tasks, algorithms, encapsulation, etc.
Some of the most used concepts in Flash came from developers that had a Java background. Nowadays I can see the same thing happening to JS when “Flash developers” like Mr.doob, Peter Nitsch, Mario Klingemann and many others start to experiment with the new technologies and transpose some of the concepts to JS - those guys also didn’t started with flash development, they came from a different background, which reinforces that the Flash community is used to changes and will learn different technologies.
It is not about if you like or not strong-typed languages, compilers, etc. It’s more about how long people been doing those things and how much academic/conceptual/technical knowledge they have, a guy who came from a computer science background is very different from a guy who started programing JavaScript following some jQuery tutorials 1 year ago - I’m not saying that the guy who started with jQuery can’t be better than the CS guy, just that there is a huge gap between them on some aspects. – The Flash community been solving issues on the past 10 years that the JavaScript community is only starting to experience right now.
“The smart one will learn from the mistakes of others” – Hungarian proverb
The Flash community respect the HTML community
I’ve seen many Flash developers interested on learning HTML/CSS/JS (and many of them already do know), not because they are afraid of loosing their jobs (since they probably won’t anytime soon), but because they like to learn new things! Many of them are experimenting with server-side JS, playing around with canvas, WebGL and the new CSS3 modules…
Respect others
The HTML community has a lot to learn from the Flash community and the opposite is equally true, everyone comes from a different background, have different experiences and are used to solve different kinds of problems, please respect other developers and don’t start “meaningless wars”, there is no such thing as a “better technology”, each technology has it’s own purpose and recommended use.
“Men are respectable only as they respect” – Ralph Waldo Emerson
A friend of mine and ex-coworker also presented some similar points not too long ago: An open letter to the HTML5 community.
Cheers.
* I wanted to say that the technologies aren’t that different because they share many concepts, features and characteristics, not that one can replace another.
Edit 2010/11/22: see also, A good Flash developer can’t replace a good HTML/JS developer