This was actually a presentation that I was hoping to submit to a conference I really wanted to speak at. The reason I didn't ultimately submit anything is the same as the topic of the presentation/post, in part. How's that for meta? And since I've been thinking of it as a presentation, I'm just going to write it like I'd say it. Sorry if that's weird.
Who here would consider themselves an old hacker? Who's here reading this because those words resonated? Some of you, I hope, or this might not make any sense. If you're a web developer, calling yourself an old hacker is kind of ridiculous, in the scope of computer programming as a whole. But, relatively speaking, I think we all know what that means. It means you tested in Mosaic. It means you had the lecture about how there was no upgrade path for IE5/Mac and therefore we were going to have to support it until the end of time. It means you've been guilty of table-based layouts and you had your mind blown by "To Hell with Bad Browsers" and then again by AJAX. Or maybe it just means you remember the browser wars and found it difficult to trust $
over getElementById
.
At any rate, here you are.
I want to ask you something. I don't want the answer you'd give in an interview, but the real answer. I want to know if it's the same as mine. Why did you keep doing it? Web development, especially for front-end people, was fucking idiotic at the outset. Things like presentational attributes were a revelation. The whole world was in Times New Roman. The power of the web was less than the power of the manual lawn mower your parents had in the shed out back and were yelling at you to step away from the computer and get to work with. But you, you were on Geocities, or Angelfire, or some college server, or your own server, if your freak flag flew that way. You were writing HTML, even though HTML was giving you fuck-all in return. Why did you keep doing that?
True, at that point the web was young, and the only people on it were our people. It was exciting to be able to put something out there and know that anyone anywhere in the world could theoretically end up seeing it. This was before endless privacy debates about whether google was stealing our thoughts - at the time, it was amazing just to have a platform.
Magical though it was to participate in that, at least for me, sticking with it ultimately came down to something else: the mythical wild west of computer programming. In college I had to read "Where Wizards Stay Up Late" and though that book is a little long on facts and short on poetry, the picture it painted was something I very much aspired to. At the time, I didn't know there was an alternative. Without knowing it, I was used to doing cutting-edge shit by that point, because the only coding I'd ever done had been front-end web dev. We've since disavowed tables for layout, with good reason, but think back for a second on how much it changed when you realized everything didn't have to be laid out in a single column, before float
, when <br>
was your only tool. That, my friends, was a hack. A messy one, but one that served us well at the time, and one that allowed our field's better half, web design, to progress despite the available tools. Best practices were an extremely science fiction-y joke. There were few rules and endless constraints. If you wanted something, you had to go out and kill it for yourself.
Maybe you think it's irresponsible of me to romanticize that era. After all, it produced little of lasting quality and we spent years weening ourselves and our superiors off those bad habits. It's not the habits I miss, though. It's the fun. It's the discovery. It's the hacking shit together and hoping it holds.
So this is why I didn't submit this proposal. This is the question I'm scared to ask. What today offers that same unlimited potential? We can make shit that would've been unimaginably awesome to our 17-year-old selves, but everything's reversed. We have plenty of (good, useful, valid) rules and very few constraints. The shortcuts have signs telling you to stay on the path strapped to chains that prevent you ignoring that good advice. There is always a right way. The west has been won, the territory has been discovered and cartographed and gentrified. And we benefit, certainly. The web benefits. The world benefits. Everything got better when JavaScript libraries started popping up. It got better again when browsers began implementing native features to do the shit we used to hack together. But now what do we do with ourselves?
I spent about a year being really, really mad at A List Apart. I used to wait for new issues to be published to see what the next FIR or sliding doors would be. And then, at some point, every issue was about content editing or UX. It took me a while to get it: what else were they supposed to write about? They led the charge and they won. We won. Once everyone started agreeing, we stopped needing hacks. We stopped reading PiE and ALA and we all went and downloaded jQuery. Then we stopped downloading jQuery and started downloading microlibraries cause, shit, everything's native now. It's strange and lonely to find that no one is arguing with you anymore.
I suppose ALA had stopped pushing the envelope because ALA's bread and butter was HTML and CSS and that envelope wasn't gonna be pushed no further. JavaScript, the toy language, had matured in the shadow of its siblings' growth spurts and was suddenly very sexy. For me it remained sexy right up until CoffeeScript. And, if you know me, you know I do not mean CoffeeScript replaced JavaScript in my affections. I heard Brendan Eich talk about hopefully implementing pieces of CoffeeScript in JavaScript at jsconf and my heart just sank. If you straighten JavaScript's nose and give it Lasik and put it on that paleo diet it's not going to be the same sexy language I fell in love with. Metaphors aside, my heart sank because you can't say anything to dispute CoffeeScript. Obviously there's nothing wrong with making a language easier to write. The same as with Haml or SASS, no one's making me use it. But I can't pretend it doesn't kill me that the most exciting thing we can think of to do with JavaScript is to clean it up to appeal to people who don't like JavaScript.
Obviously there are still interesting problems in JavaScript beyond all those terrible little curly braces. People are doing great things with movies and animations and that's awesome, but the field of real world use cases is pretty narrow. Node.js is fucking stellar and I love it, but it's still server-side and it's just not the same when no one's ever going to see your mistakes. The bulk of the interesting problems I see right now are how we compose various off-the-shelf pieces. We move so fast, with such immense power, that it's almost unreasonable to stop and figure out how to do these things for ourselves. In your free time? Sure. Yeah, go and rewrite the entirety of YUI or something from the ground up just for the joy of thinking about it, all on your own. As an answer, that's almost cruel.
And that's just the libraries and the language. What about the browsers? Imagine you did think of something in JavaScript that had yet to be coded, some essential hack that was missing from our libraries. How long would that remain relevant? All those placeholder polyfills are destined to become the latex jellyfish washed up on next year's beaches. Our hacks are only a slightly faster solution than sitting and waiting patiently.
I'm not saying I give up, but when this entire landscape has changed completely, I'm going to miss it. I think domestication has become inevitable. Unless the web fragments again, and it's once more us against them, I think we're on the road to efficient and productive normalcy. Which is great in almost every way except that it's just not as fun. The web is on its way to becoming a commodity. That awesome Wilderness Downtown thing that Google did? That was super cool. CPU fans all over the world were very, very excited about it. But my boss has yet to ask me to implement it on our site. We live for demos and proofs of concept. We go back to our dayjobs and implement someone else's boilerplate, skip the unnecessary syntax, run the unit tests, push to the cloud and clock back out. It's not really that black and white, but it's never gonna be the same.
I haven't given up. I just wonder sometimes how long we've got before we all have to stop being hackers and be software engineers.