7 ms·
= Why Grown-Ups Don't Use Tabs[1] = * Joe likes 4-space tabs, I like 2-space tabs, and Jane is old-school with 8-space tabs. * All goes well until someone ali
by inanutshellus 9y ago
= Why Grown-Ups Don't Use Tabs[1] =
* Joe likes 4-space tabs, I like 2-space tabs, and Jane is old-school with 8-space tabs.
* All goes well until someone aligns something visually, like so:
[tab]void someNiceMethod(int myParamA,
[tab][tab][tab][tab][space][space]int myParamB...);
(What you should do--if you're going to visually align at all--of course, is
[tab]void someNiceMethod(int myParamA,
[tab] int myParamB...);
... but humans are humans and IDEs aren't created equal, so this doesn't happen consistently.)
* Now it aligns perfectly on my machine, looks mostly ok on Joe's machine, and is ON MARS on Jane's machine.
Thus one-or-more of three futures happens:
* Someone implements a code re-formatter into version control
* Someone re-aligns the code, starting the process over again.
* Someone calls a meeting and demands we all switch to spaces AND IDEs that let you treat spaces like tabs.
[1]: This came up last week (https://news.ycombinator.com/item?id=14560042 https://news.ycombinator.com/item?id=14560042) and this comment is shamelessly copied from that discussion (https://news.ycombinator.com/item?id=14561223 https://news.ycombinator.com/item?id=14561223).
- raverbashing 9y agoLinux uses with tabs and fixes the amount of spaces a tab is equivalent to is 8 spaces (for visual alignment) Problem solved and it works for them
- lucb1e 9y agoI was going to say you're obviously incorrect because in what editor can't you change your tab width? But I realized you are probably talking about the kernel.org project. Is that what you mean? There is an agreement within the Linux kernel project?
- quadrupleslap 9y agoYep, right at the start of the kernel style guide: https://www.kernel.org/doc/Documentation/process/coding-style.rst https://www.kernel.org/doc/Documentation/process/coding-styl...
- kyberias 9y agoWow, didn't remember how inconsistent the Linux coding style is. Or all C basically.
- raverbashing 9y agoYes, Linux is the Linux Kernel in this context (in kernel.org)
- lmm 9y agoAt that point they're getting negative value out of tabs - people can't set different tab widths and also can't use editors that don't use a width of 8 (or need to reconfigure editors that have a different default). They'd be better off just using spaces.
- raverbashing 9y agoNo, they aren't (but you're free to disagree) and any editor worth their salt can alter how many spaces a tab is displayed with.
- hawski 9y agoFuck alignment. [tab]void someNiceMethod( [tab][tab]int myParamA, [tab][tab]int myParamB, [tab][tab]... [tab]);
- spinningarrow 9y agoExactly. I never understood the benefit of alignment. I actually find it harder to read - by making the starting point of the line less predictable it's harder to skim through and if, say, you rename the function you've now got a much longer diff than necessary. After talking to several people, I've realised this is very subjective though (what isn't!). I certainly prefer indenting only, without worrying about alignment.
- octalmage 9y agoI totally agree. You can fight with alignment all day and it's not worth it in my opinion. Just have it indented on a new line and call it a day.
- Sean1708 9y agoIt's not so bad if you use a formatter (still prefer indenting though), but if you align everything by hand it's just more annoying than it is useful (in my opinion).
- seanmcdirmid 9y ago> Exactly. I never understood the benefit of alignment. Alignment is what makes ASCII art possible. Without alignment, we might as well be using modern proportional fonts rather than old-fashioned type writer fixed-width fonts (ducks).
- plopz 9y agoI know some of my coworkers still use mono-spaced fonts and I just don't understand it. Proportional fonts are so much more legible and nicer to look at.
- freehunter 9y ago>IDEs aren't created equal Shoot, just myself using a single IDE I always end up with spaces and tabs and missing indents and oddities. When I have something that's nested and I copy/paste it into another file, some of the spaces/tabs get preserved, some don't, and I end up having to either reformat it or ignore it, and then I forget which div closes which and it's just a headache.
- throw_away 9y agoThe "show whitespace" features of most IDEs will make the space vs. tab issue apparent. The only down side is then you start secretly hating every other dev who doesn't use this feature.
- l1ambda 9y agoBut the problem only happens when you use tabs _and_ spaces. Don't blame the tabs!
- pas 9y agohttp://imgur.com/vOWAAUK http://imgur.com/vOWAAUK
- inanutshellus 9y ago"I think we can all agree that compromise is not an option" ~Humanity
- deleted 9y ago[deleted]
- spinlock 9y ago`grep -A 1 "void someNiceMethod" src.java` (╯°□°)╯︵ ┻━┻
- Stratoscope 9y agoI could be equally condescending and say "Why Grown-Ups Don't Use Column Alignment." But using alignment doesn't mean you are childish. It's just a bad habit that leads to many problems. A couple of examples from the Servo source code, whose coding standard at one time required column alignment: let construction_item = ConstructionItem::TableColumnFragment(Fragment::new(node, specific)); self.set_flow_construction_result(&kid, ConstructionResult::Flow(kid_flow, Descendants::new())) There's no good reason for these lines to be so long. If they were formatted with indentation as shown in hawski's example, they would be much shorter. Another example from an earlier version of the code: ConstructionResult::ConstructionItem(ConstructionItem::Whitespace(whitespace_node, whitespace_style, whitespace_damage)) => { ... } Wait, is this aligned or not? What happened? Most likely it was aligned at one time, and then some names were changed and it became misaligned. If you use indentation instead of alignment, these problems never happen. And in fact, the Servo coding standard finally allows the use of indentation, and this particular call has been changed to use it. Now back to the question of tabs and spaces. If you use tabs and only use indentation with no alignment, then it doesn't matter what anyone uses for their tab width. The code will always look perfect whether someone likes their tabs rendered as 2, 4, 8, or any number of spaces. The code will also look fine for someone like me who prefers proportional fonts. In fact, I think every developer should try using a proportional font for a while. It's a good way to get over the bad habit of column alignment.
- swift 9y agoI'd argue that the real issue here is slavish adherence to the style guide without stopping to consider what's readable. Alignment, in my opinion, is a readability win in general. (We may have to agree to disagree here.) But when column alignment results in unreadable code like the examples you gave, you shouldn't use it. It's that simple. That doesn't mean that column alignment as a general principle is bad; you should optimize for the common case, and be willing to handle exceptional cases differently. A similar issue is formatting for 80 columns. In general, this is a good idea, because long lines can be hard to read and hard to edit. That doesn't mean that you should contort the formatting of your code in bizarre ways to avoid an 85 character line.