You know how the conversation goes when you are out with friends whose daily jobs involve picking up something heavier than a laptop and a pair of noise-canceling earphones each morning. Inevitably, a few drinks into the evening — especially if it’s a burning-off-steam Friday happy hour kinda thing — you get hit with a variation on this: “You think you work hard? Ha! You just sit in a nice chair staring at a screen all day. Me, I just worked a 987 hour week digging the foundation for a new high rise building using only my bare hands.”
I must admit that, on the surface at least, this is a reasonable assertion. It’s much less physically demanding to rearrange pixels on a screen that to move literal earth. It has got to be dirty, backbreaking work and you totally win in the physical labor category, please don’t hurt me. But let me break it to you, son: your job has nothing on your standard programming gig whatsoever when it comes to mental suffering.
Welcome to the team!
Let’s torture this building metaphor for the sake of argument, shall we? Imagine you’ve just been hired, fresh out of school, to join a building team. You are starry-eyed and full of ideas, inspired by the clean and elegant designs they taught you in whichever never-goes-to-production ivory tower of learning you attended. And you’re looking forward to helping construct similarly perfect expressions of purpose, grace and economy in your First Real Job!
On your first day, you’re greeted by Ted, the project lead for this entire high rise building project. Ted was an architect a long, long time ago, but it’s been ages since he constructed an actual, you know, building. Still, he’s just in charge of organizing things, and really it’s the people actually doing the hands-on building who need the current skills, right? So no worries that he just referred to your area of technical expertise by a slightly wrong name.
Ted takes you around to meet the team. First up is Sean, whose specialty is fluid hydrology. You venture to ask what his part of building this office tower might be, since it’s made from things that aren’t water and has to, like, not waterfall down because there will be lots of people in it. (Haha, everyone laughs. It’s your first day and they know you’re nervous). No worries, Ted tells you, Sean’s going to handle the water feature — a fountain with dancing jets and colored lighting! Every building needs a signature architectural flourish, and that’s Sean’s job.
For the actual building we’ve got Leila, who’s really into surfing early adoption curves, and she has incorporated not one but three separate building techniques so bleeding edge that they’re practically hemorrhaging. Isn’t that cool? Of course, we are going to have to create special conditions for each one since they all require different supports and even separate, special tools to work on them.
It was actually going to be a boat, a really cool, really big boat, but it turned out nobody’s really buying boats any more.
Which is workable because this could be handled by installing one underlying platform unifying everything once the building is actually constructed… except you can’t have a platform. Josh, who you meet next, has a strict platforms-are-for-lazy-programmers policy which he is happy to tell you about at length. His take is “let’s just roll our own, like REAL badasses” buuuut he’s won’t be helping with that because it turns out he’s not actually an engineer. (No one, it turns out, is really sure what Josh’s actual job might be, but he’s really friendly with a bunch of upper management types so everyone just leaves him alone to do whatever).
Helping Leila put this cutting edge carnival into production you’ve got Jim and Jean, who have worked together for so long it’s actually become difficult to distinguish them — which is actually ok since both answer to either name, at least when they acknowledge being spoken to. Their one differentiating characteristic? Jim is really, really into rivets, but Jean strongly believes bolts are the only true industrial fastener worthy of use. They are unable to reconcile these deeply divided core beliefs, unfortunately, and so what gets installed where depends entirely on who got to that part of the design first. This has become such a nightmare for the construction workers actually in charge of putting the building together that they have simply given up trying to follow the plans. Instead they just weld, blast or sledgehammer their way through, using whatever parts they can find and forcing them together, however, seems to work… At least for now.
After you have been working there a little while you find out the building wasn’t even supposed to be a building at all, at least at first. It was actually going to be a boat, a really cool, really big boat, but it turned out nobody’s really buying boats anymore. But they can always use buildings, right? So that at least explains the railings that don’t actually correspond to passages or stairways, and all the rope hanging everywhere. Even if nobody really knows what these vestiges of the original project are for anymore, they are terrified to touch them because god only knows what obscure but essential parts of the boat/building’s original structure they are still propping up. Best just to leave them in place. But everyone is so very glad you’re here! They’ve really been needing reinforcements.
So. Knowing what you know now, would you even set foot into this building, much less live in it? No?
Understandable. Because if this building ever actually got erected in the real world, everyone involved would end up indicted for gross negligence and criminal incompetence. So why are things different when it comes to building software? Chances are just about every program you’ve ever used — every website, every suite of office tools, every mobile banking app — was built by a similar team of clowns piling out of a broken down joke of a cartoon car.
This doesn’t happen because we don’t care and aren’t trying to actually do our jobs. This happens because just about none of us, no matter how senior or skilled, ever walks into a new job tasked only with writing fresh new code. And way, waaay too much of the code that is out there was thrown together by a bunch of different people, most of whom aren’t even around anymore, all just trying to get it to work and planning to come back later to refactor. Which nobody ever has time to do because everybody’s very busy all the time just trying to keep it running until the next thing breaks.
Nobody tells you this when you’re just getting started with programming and envisioning all the shiny perfect code you’re going to create. Code that’s never had to function in the real world and has never been molested by the marketing team. They can’t. If you knew going in that you’d be spending your days working with code where nothing matches anything else or makes much sense and could just completely break at any time, that your job is mostly going to be frantically trying to patch it all back together again to keep things running one more day — well, you’d probably go take up another profession entirely. Something a little less stressful, like coal mining. As would anyone else with half a brain.
Or would you? Despite the frustrations, there is satisfaction. There are days when it’s still fun. Days when you take a piece of ugly stupid code and refactor it to work better, sleeker, faster. On the bad days? Well, programming still beats heck out of digging a basement.