I'm sure you've come across the age-old, opinion-based debate of 'Tabs vs. Spaces' for indentation before. It has been going since forever, and there seem to be valid reasons for both sides:
Tabs...
- smaller files because it's just 1 character
- that's what they're used for
- you can customize your own indentation width (👈 keep this one in mind)
Spaces...
- to avoid problems in whitespace-sensitive environments
- because you know what you'll get, and consistency is key
But, there's more to this than just personal preferences. u/ChaseMoskal recently posted a very insightful and eye-opening post on Reddit with the title "Nobody talks about the real reason to use Tabs over Spaces".
The one real reason to use tabs over spaces
In his post, Chase explains his own experience of using spaces at his workplace, and the negative effects it had on co-workers with visual impairment.
One of his co-workers uses a tab-width of 1
, to avoid huge indentations when using a large font-size.
Another co-worked of his is using a tab-width of 8
because that works best for his situation with a wide monitor.
I see people saying "tabs lets us customize our tab-width", as though we do this "for fun" — Chase
By using tabs in our projects, we allow these kinds of customizations that are essential for people with visual impairment. Custom tab-widths might seem like an unnecessary thing to most, but some people rely on it—and we can not ignore that.
Accessible first
We simply can't "convert" everyone to one side or the other, there's no question about it. Everyone has their own preferences, and we should celebrate that freedom—that we have the ability to make our own choices.
But with that said, we should also make sure to include everyone, and that means respecting and using accessible tools like the Tab-character.
Much like designing for 'mobile first'—making sure everyone, no matter what device, has a great experience with your product—we should create an 'accessible first' environment, by making sure that everyone has the same ability to work, whether it's at the workplace or on an open-source project.
I thought Chase put it perfectly when he said in his post that "...there's just no counter-argument that even comes close to outweighing the accessibility needs of valued coworkers".
Conclusion — Accessible first, personal preference second
By defaulting to tabs, we make sure that everyone has a great experience working together with others, no matter their own abilities.
And if you prefer spaces, feel free to use an auto-formatting tool that converts tabs to spaces when opening a file (all modern editors have these). Just make sure that the spaces get converted back to tabs before anyone else has to work on your code.
Only by making sure everyone has the same capability can we maximize our combined potential ❤️
I have myself decided to switch to tabs indefinitely after learning about this, but I'd love to hear your thoughts on this as well. Feel free to start a discussion below!
Thank you so much for reading. I hope you all have an amazing weekend. 🤗
This post was originally published on my website at alexandersandberg.com.
Top comments (14)
In the past, IDEs were more rigid and less dynamic, but modern IDEs can be configured to convert tabs to spaces automatically when opening a file, and the same thing can be done the other way around (spaces to tabs). Also the code can be unified when committing/pushing it into the repository. By doing that, the tabs/spaces issue is really not an issue.
I agree. Modern tools help us, no matter what "side" we choose!
But we should assume that not everyone is aware of, or is able to use this functionality. Therefore, it's still important to think about 'accessible first', which, in this context, means using tabs.
Accessibility shouldn't be an add-on, it should be a default. 🙂
Accessibility as default is nonsense. Accessibility imply access for different needs, sometimes opposed, of course should be a add-on, an easy access add-on but an add-on nontheless; are you suggesting that every editor readout loud by default and have huge fonts with high contrast by default? we should also have by default the OS in all languages?. The default is almost by definition for most of the target user, which doesn't mean accessibility shouldn't be a available and/or hard. But definetely not the default. If you want 1 single space indent because your lines are too long, the write longer lines, a 120 char line is way better than a single space indent, 4 spaces are too few and is hard to read? then use the Linux Kernel style with 8 or look for a tool to help your particular needs; a tab looks like a bunch of spaces, that's it, visual symbols main purpouse is to express something and just one "something". You have vertical delimiters for indents, coloured indents to make them easier to distinguish, you can enlarge space between characters. Newsflash, JS is not always available or desirable, should we disabla all JS by default? and high contrast hurt my eyes but are needed for others, so how do you propose to make both defaults?
I'm all for Accessibility and think it should go first, but this is not a matter of Accessibility being an extra/add-on or not. Most likely the tools that are being used already have these accessible features out of the box and can be set as the default (VSCode even detects when a screen reader is running and suggest changes to improve the experience on the fly!)
Didn't know VS Code had those features. That's really cool!
Yes, most likely, but not guaranteed. 🙂 Not everyone is using VS Code, Atom, or any of the other tools that have these kinds of features, but if we default to using tabs, it doesn't matter.
I guess the point I was trying to make is that, in an ideal world, everything should be designed for everyone. People with disabilities should not have to rely on certain tools or features.
Even though that's practically impossible, we should still aim for it, and make the default environment as accessible as possible.
yap freedom from ^coder code design is most important for coding
Tabs, that's it.
What's your current preference for indentation? Tabs or Spaces?
Would you consider switching to Tabs after learning this? 🙂
I don't really care. I hit my tab button on my keyboard for indentation, and the IDE takes care of the rest regardless of indentation character.
Come to think of it, I usually just hit my enter key, and the indentation is already made for me :D
Knowing this, I might start advocating tabs in the future, though.
Yes! The Enter key is often taking care of everything anyway!
If you don't really have a preference, all the amazing developers out there in need of customizable tab-widths will thank you for choosing tabs. ☺️
Wow, I have never think about this issue at all. Thank you for enlighting me.
Used to use 4 spaces, however, I am going to figure out how I can set up my working environment.
Thank you for sharing, Juneau!
I was a tabs-dev for so long until I decided to try out 2 spaces instead, a few months ago. I didn't really think much of it until I came across Chase's post. Now I'm all for tabs again! 🙌
I agree, tabs are better because of smaller files.
When you add up hundreds, or thousands of tabs, spaces would multiply that by 4.
100 tabs = 400 spaces.
1000 tabs = 4000 spaces.
1 million tabs = 4 million spaces.
you can reduce the file size to -3000 bytes by using tabs instead of spaces.
In the case of 1 million, your replacing 4000kb with 1000kb, simply by using tabs instead of spaces.
Of course, if you minify the final code, this only matters for space on your own PC, or if you have a team, it saves space on their PC. Also saves space on github, if you upload the original code.
I agree that accessibility is a concern in tabs vs spaces debate. I even tried using tabs about 6 years ago. It wasn't a great experience. Code in IDE looked fine. However I don't just look at my code in IDE - source control GUI app, git management web interface (my workplace wasn't using GitHub) all rendered tabs assuming 8 space indentation. So the result was accessibility issues even for individuals without special accessibility needs. In the ideal world tabs would be the best choice - the tools I was using would be easily adaptable for individual needs. In the real messy world the tools were developed with time constraints and did not have easy options to change the rendering options. So while I agree that tabs are best in principle, choosing spaces can be more practical, even when considering accessibility.