Iterating the web away:
losing the next generation
I made my first website more than twenty years ago. It was horrible.
- Black text on a dark grey background.
- A complex table layout.
- Animated gifs everywhere. (Some things never change.)
Making it was a lot of fun, though.
When, a few years ago, I dug the website up, my biggest issue wasn’t with its technical flaws but with my horrible design sense.
Black on grey? Really?
I had no taste. I like to think I’ve improved.
As to the technical side, a lot of the flaws were just inherent in the web of the time. The web kind of sucked.
But even though it did suck it pulled me in and turned me into a developer. I got into web development because it was interesting, fun, and challenging.
Web development today is still challenging. But the rest?
If I were a seventeen year old geek today, I’m not so sure that I’d get into web development.
I’m convinced I wouldn’t.
The web back then combined three important characteristics that made it very attractive to young geeks like me who wanted to make something:
- It was cheaper than the competition.
- It reached more people than the competition.
- It was easier than the competition.
Cheaper #
In the mid to late nineties, if you wanted to make interactive media—i.e. anything interesting on a computer—you didn’t have that many options.
Tools like Director were well beyond your average teenager’s budget and most schools didn’t have it installed on their computers.
Flash wasn’t a factor until the late nineties at the earliest and even then you still needed an expensive application too expensive for your average household.
Pirating these apps was a pain in the ass and didn’t really become an option until you were in college. Pirating over a slow modem was always a hassle.
If you had a Mac, you could probably get your hands on Hypercard.
Proper programming environments and software development tools were too expensive and too hard to get.
So, for most of us, Hypercard was it.
Until the web arrived. Editing text files was and is free. Even the WYSIWIG HTML editors of the time were more widely available than Macromedia’s fare, flawed as those editors were.
Today we have an embarrassment of riches. Every mobile phone platform offers a free development environment, even if some of them still require payment for distribution.
Apple as of Xcode 7 will no longer require a paid developer account for you to make an app to just put on your own phone.
Being the free platform is no longer a competitive advantage when it comes to getting aspiring teenage developers interested.
Distribution #
The Hypercard stacks I made before I got my first modem never went anywhere beyond the stack of floppies in my bedroom. Reaching people who might have been interested was hard, connecting with them and building a community of interest from Iceland was impossible.
But the web made it easy. Communities is what the web is. Everything else is a complication.
Overnight you went from being a lone geek with weirdo interests to being a part of something bigger. You were now connected with a large group of people who weren’t just interested in the same things but were interested in what you thought about them.
Mind-blowing.
Again, this has changed. The web has fractured as it has grown. The best way to connect with people is still through communities but these communities no longer exist as a network of websites like they did in the early days. Some of them exist as clusters within one social media silo or another. Others cluster around a single website.
Distributing the stuff you make has become both much more complex and much simpler than just putting your website online and submitting it to a bunch of directories and search engines.
It’s simpler in that you can connect with people just by joining a social media website and having a bunch of conversations. It’s more complex in that there are a host of venues and formats you can deliver and make things in, all of which are flooded with crap from all over the world. Blog posts, websites, ebooks, iBooks Author ebooks, Android and iOS apps, and more—even if you limit yourself to just interactive media, you still have a wealth of options. If you’re just thinking about creating and making digital stories in general, it’s an embarrassment of riches.
Nobody will notice you in the flood, but the difficulty of getting attention just going to be a fact of life from now on, regardless of the platform you choose.
Easier #
Macromedia Director was a mess. I didn’t get a chance to work in Director until I was in my twenties but it remains to this day one of the most frustrating platforms I’ve ever worked with. It’s one of three platforms I know that were so inconsistent that you could do the exact same thing in the exact same way in an exactly identical context twice and it’d work in one but not the other.
The only other platforms I’ve worked with that matched that frustration are the modern web and modern ebook development.
(Web development being thankfully saner than ebook development.)
But back in the nineties, the web was the simpler, less capable, but much easier option for making things. Especially if you were on a budget. You could, if you wanted, find an open source programming environment to work with but those were much harder, much more complicated, and, actually, not that much more capable.
Hypercard, of course, was a lot easier. But it was also older, almost a relic even then—“a more elegant weapon for a more civilised age”. It didn’t even support colour out of the box. It also limited you to the Mac.
Later on, Flash did give the web a run for its money in terms of the ease of making things, but that wasn’t a reality until the early 2000s. And even then it always lost on price.
The web had the best balance of fun, distribution, price, and ease of making. For a young geek in the nineties it was irresistible.
You can still limit yourself to a subset of the web that is relatively easy to work with, but unlike JavaScript, it isn’t so much a ‘good part’ as a plurality of ‘not ugly’ parts each with its own set of compromises. You can avoid frameworks like Angular, Ember, or React, but then you’re pretty sunk if you want to do something complex with the DOM. You can opt out of a lot of CSS complexities with things like BEM, but that also means opting out of most of the cascade’s useful features. And JavaScript has a host of idiosyncrasies that you simply can’t opt out of.
You can’t make a decision on how to simplify your approach to web development—how to make it saner—without understanding the compromises, which by definition means that you already have to be a web development expert. Beginners are screwed.
Iterating the web away #
Even though the web platform is vastly more capable today than it was twenty years ago, it still doesn’t match native apps in capabilities. It never will. Which would be fine and dandy if it weren’t for how complicated web development has become. It’s not just a question of the escalating number of APIs, properties, and elements you need to keep track of, the web’s lack of a cohesive conceptual model means that the very foundation of the web platform is too complicated for a web developer to internalise.
CSS makes no goddamn sense—it’s a horrible blended purée of incompatible layout models, naïve language construction, and irrationally tight coupling between seemingly unrelated parts (using the word ‘modules’ for a language as monolithic in its structure as CSS is a bit of a joke).
Javascript has good bits but when you’re learning it you can’t avoid the horrible bits—it’s always going to be a mess to learn.
HTML is reaching the complexity of a fully-fledged programming language but without any of the features you use to manage complexity. There is no shared conceptual framework between the various facets of web development.
REST and HATEOAS come close but neither are built into the foundation of CSS or JavaScript in any meaningful way, nor is it easy to see how they could. It’s the foundation of HTTP, sure. And you can define a subset of HTML that is pretty much HATEOAS to a T. Which is why they will outlast the rest of the web stack. (See also Facebook’s Instant Articles, which uses HTML and HTTP, or Apple News.)
Looking at the alternatives for a smart teenage geek, iOS app development, for example, you’d think that they’d be more complicated than web dev. But we’ve reached a point where it’s about to be the other way around.
Cocoa development is complicated, sure, but its conceptual model is much more cohesive. The layout and rendering model makes more sense. Swift and Objective C are both complicated but are also both built on a fairly strong conceptual foundation (stronger than Javascript’s at least). Xcode playgrounds help a lot.
The overall concepts behind native app development are easier to grasp and internalise, and the experience of developing for them is much more consistent, making it easier to learn their more complex features.
Losing the next generation #
I’m worried that the next generation of smart-ass teenage developers is going to overwhelmingly choose native app development over web development. They’ll see it as the easier, more fun option. Web development will (or even has) become the boring thing you learn because your work needs you to.
Chasing CSS rendering oddities—“goddamn it, why is this breaking, this used to work!”—is just about the most stupid way to spend an afternoon (regular bug hunting doesn’t even compare) and yet, as a web developer, it’s a major part of my job.
In our zeal to chase after native app development we’ve lost sight of making web development logical, fun, and interesting. By chasing features we’ve sacrificed the developer experience.
As I follow new CSS features, web component spec work, new JavaScript APIs and syntax features, it seems more an more clear that the future looks like Angular:
Boring, complex, enterprise-y, and about as sexy as a mouldy gym sock.
We don’t just need to pause web feature development, as Peter-Paul Koch suggested, we need to rethink web development and the web platform from the ground up.
Adding new features, even if they do address the platform’s flaws, doesn’t erase the bad parts. Beginners are just as screwed as they were before.
The web platform needs to be more cohesive. It needs to be more consistent. It needs to be more fun. It’s none of these things. It doesn’t have to be that much easier, though that would be preferable—complexity can be fun if it has a consistent foundation and if the learning process is built on a strong feedback loop—but it needs to make more conceptual sense. A lot more sense.
If we don’t, in ten years time, not only will all of the geeky teenagers of the world be making native apps and eschewing web dev, there’s a strong possibility that I’ll have joined them.