When Adobe announced this week that it is no longer trying to make Flash viable on mobile platforms, there was a good amount of developer talk on the ramifications. In particular, some on Hacker News lamented that they could no longer use Adobe’s well developed Flash dev tools, and that currently both the HTML5 standard and dev environment is a mess.
Then I came across this article by Jeff Atwood from back in ’09, where he quotes Michael Braude on how web developers don’t know how to deal with memory or understand the basics of computer science.
It made me think of the core tenet of software development, and that it maybe worth reiterating now: we build software for our users.
Engineers find joy in the act of writing code; many spend their own time working on projects or contributing to open source. I’d like to think of coding as a modern creation activity – where virtual systems are constructed from scratch – and being able to build an elegant software solution is an awesome feeling.
But software is only valuable when it’s used, and software is used when it’s able to solve the user’s problems; in this case, I’m defining the “user” to be another software layer (e.g., infrastructure or framework code), some other machine (e.g., APIs), or actual human users. All the design patterns, IDEs, profilers and best practice mantras we use matter because we use them to build great software for our users. So if the user’s experience is best served via a stabler environment (mobile HTML5 > mobile Flash) or a better delivery mechanism (web > desktop apps), we should strive live up to those standards and spend the effort needed to improve our own tools and environment to realize those ideals.
Of course, this is the big issue with the web: the dev tools are unfriendly, the standards are in flux, the ecosystem is diverse, and there are hard limitations to what current browsers can do. It is simultaneously a simple and complicated platform to develop upon, and sometimes it feels outright hostile.
I’d like to think that the quality separates the amateurs from the artisans.