The Things That Don't Matter When Building Software
I like to joke that one day I’m going to get a Phd in economics and make my thesis the cost to global GDP of the tabs vs spaces debate. There’s a great episode of Silicon Valley about it. Unfortunately, while the show does exaggerate some things for comedic effect, the brilliance of that show is how close it hits to home.
For those who don’t know what the debate is about, developers can indent their code with spaces where it will look like this:
Or they can indent their code where it will look like this:
Can you spot the difference? Probably not! I’m not even sure why I bothered typing out the spaces in the second screenshot.
Despite the nuances that some developers will love to point out, the difference between tabs and spaces is so minor that it is barely worth talking about. Yet, we do talk about it. We talk about it for hours and hours and hours. We talk about it every time we go to a new company or meet new developers. We spend time on this when it could be better spent actually building software that brings real value to people.
Tabs vs spaces isn’t the only pointless programmer debate either. There’s putting the curly brace at the end of a line: vs on a new line:
There’s whether we use snake casing:
or camel casing:
If you’re trying to figure out why any of these things matter, you’ll be at it for a long time. They look like trivial differences because they are trivial differences.
Sometimes we engage in these debates simply because we know they’re ridiculous and it’s fun. But too many times, people actually take these debates seriously. When that happens, the effect is anything but harmless. Time is wasted which either results in failed projects or longer working hours than necessary.
I’m not an innocent party either. Much of my younger years was spent being belligerant about all of these things. I can’t speak for all developers on this, but I think my problem was I was so focused on building software for the sake of building software. It’s easy to fall into pedanticism with that attitude. At some point I switched my focus to building software for the sake of it being used. That perspective helped me let go of these pointless debates, which also helped me focus on the more important quality measures of software: fewer bugs, easier debugging, easier reading, etc.
That’s not suprising either. Unlike the Silicon Valley tv show, I’ve found that the very best developers I know don’t care about these things. They’ve got better things to spend their energies on.
P.S. I definitely use tabs. Everyone can make a tab character look as large or as small as they want. Tabs conform to individual preferences. Spaces force everyone to see the same thing. Tabs are the character of freedom.
Spaces represent tyranny and oppression.