News for hackers. Stuff that matters.
Re:Who decided indenting with spaces was a good idea? by nostrademons on Wednesday April 01, 2015 @09:39PM (#9308174)
It's because at some point, your code will encounter low-tech technology that doesn't let you set the tabstop. This might be a terminal app, or an actual dumb terminal, or a cut & paste into a textbox on a webpage, or a third-party tool that expects spaces only, or a refactoring tool that you wrote yourself but don't have time to get working with tabs, or a parser that can count characters but has no logic for tabs. When this happens, your tab-based formatting will get messed up, while your spaces-based formatting will look exactly the way you wrote it.

A lot of mysteries about why people don't use clearly-superior technological solutions are solved by understanding that ubiquity is a feature, in many cases the most important feature. I don't use vim because it's the best text editor; I use it because I can be reasonably sure every single UNIX-like system I ever log into will have it, and once it's in my fingers from having to learn it on a remote server, I might as well use it for daily programming. I don't use HTTP because it's an efficient protocol; I use it because every single device, library, and language speaks it. I didn't write Gumbo [1] in C because I like the language; I did it because every modern language can bind to C libraries, and so this lets a maximum number of people use it.

[1] https://github.com/google/gumbo-parser

Re:Who decided indenting with spaces was a good idea? by smt88 on Thursday April 02, 2015 @10:53AM (#9311012)
The tab character has been around since 1963. I have so far never in my life had a problem with using "smart tabs"[1][2]. For my purposes (web development), I don't expect that this will ever happen.

I'd be interested to know a real-world, recent example where tabs could have been a problem for someone.

1. http://www.emacswiki.org/emacs/SmartTabs

2. http://vim.wikia.com/wiki/Indent_with_tabs,_align_with_space...

Re:Who decided indenting with spaces was a good idea? by amwmedia on Thursday April 02, 2015 @09:12AM (#9310459)
I'm sure there ARE parsers and old terminals that may not understand tabs, but I don't plan to make decisions about how I write code based on the possibility of maybe, someday running into SOMETHING that doesn't like what I'm doing. Especially when switching my entire code base from tabs to spaces is as simple as a global find/replace.
Re:Who decided indenting with spaces was a good idea? by smt88 on Wednesday April 01, 2015 @09:14PM (#9308098)
Oh god. You might as well have posted, "Why do people use Mac instead of Windows?" in the year 2002.

People use spaces because they're a fixed width, not in spite of that fact. They allow you to know that your code will look exactly the same with any monospace font, which is especially important if you do things like lining up operators.

I personally use a hybrid: the entire line is indented with tabs. This tells you which block you're in.

Then, for alignment or anything else that isn't related to the entire block, I use spaces.

Many IDEs support this hybrid mode, including the IntelliJ family. It gives you the best of both worlds.

Re:Who decided indenting with spaces was a good idea? by woah on Wednesday April 01, 2015 @11:00PM (#9308421)
Makes sense in a way I guess, but I would hate to work with you. I've now got to use some different text editor or install a plugin to alternate between white space characters?
Re:Who decided indenting with spaces was a good idea? by smt88 on Thursday April 02, 2015 @01:04AM (#9308768)
It's not a problem working with others, since you can replicate this manually without much effort.

Let's say I have the following code:

        if (test1) {
            if (test2) {
                executeSomething({
                    "first"  : "1st",
                    "second" : "2nd"
                });
            }
        }
Here's the same code with spaces replaced by "S" and tabs replaced by "T":

    TifS(test1)S{
    TTifS(test2)S{
    TTTexecuteSomething({
    TTTT"first"SS:S"1st",
    TTTT"second"S:S"2nd"
    TTT});
    TT}
    T}
You could set your IDE to use tabs, and then for fine-grained indentation (where I've lined up the property definitions in the object), you'd use spaces.

Many IDEs and text editors will automatically detect indentation settings, and some of the popular ones (WebStorm, Netbeans, I think vim) also support hybrid indentation.

So it's only really a problem when someone uses a plain-text, Notepad-like text editor, but I haven't met a professional developer who does that in a long time.

Re:Who decided indenting with spaces was a good idea? by dozzie on Thursday April 02, 2015 @05:35AM (#9309516)

  TTifS(test2S&&
  TTSSSStest3)S{
  // ...
Show me an editor which can tell indentation from alignment at the beginning of the line. And moreover, which can tell it for a dozen of unrelated languages, like Perl, C, make, Erlang, XML and YAML.
Re:Who decided indenting with spaces was a good idea? by smt88 on Thursday April 02, 2015 @10:49AM (#9310986)
All IntelliJ products[1], vim[2], and emacs[3] support this. They call it "smart tabs". Sublime has a plugin that does something similar[4].

I don't have it installed and can't find documentation for it, but I believe NetBeans does this by default.

Again, this is something that usually happens naturally when you're indenting with tabs. Very few humans or programs are going to do alignment with tabs, even if they're indenting with them.

1. https://www.jetbrains.com/idea/help/code-style-java.html#d53...

2. http://vim.wikia.com/wiki/Indent_with_tabs,_align_with_space...

3. http://www.emacswiki.org/emacs/SmartTabs

4. http://wbond.net/sublime_packages/alignment

Re:Who decided indenting with spaces was a good idea? by dozzie on Thursday April 02, 2015 @02:02PM (#9312327)
OK, and now explain me why none of these work correctly with all the mentioned languages.
Re:Who decided indenting with spaces was a good idea? by smt88 on Thursday April 02, 2015 @06:49PM (#9313649)
They work fine with Perl, C, XML, and YAML. I wouldn't know about Erlang, but I'd imagine they work with that, too.

It seems as though you have an idea in your head that you're unwilling to research, and when I present you with information, you're unwilling to accept that you could be wrong.

Re:Who decided indenting with spaces was a good idea? by dozzie on Sunday April 05, 2015 @08:47AM (#9323885)
> They work fine with Perl, C, XML, and YAML.

Or do they? Either they are language agnostic or they are not. If they are language-independent, they can't work properly, since indentation and alignment are syntax-specific (that is, need some information extracted from syntax). If they are language-specific, they can't work with all the languages I happen to need, which may include some DSLs rarely used by programmers and some languages defined by myself. I see no other option.

I have checked plugin for Vim; it doesn't work as you advertise. It either puts only spaces or only tabs at the beginning of the line, depending on expandtab setting. I assume from your comment that others work as well as this one.

Re:Who decided indenting with spaces was a good idea? by UnoriginalGuy on Wednesday April 01, 2015 @11:26PM (#9308500)
> tabs actually use less space on disk as only one character is stored instead of 2, 4 or 8.

If I didn't have the ability to store 1,000,000,000,000 of them, I'd care greatly. To be honest source code size isn't even in the ballpark of concerns I have. Intermediate bin files (e.g. obj files) are far larger and problematic for source control and sending source to someone (e.g. several meg a piece rather than a couple of hundred KB).

As for an answer to your question: Spaces are an exact width. Tabs change widths. Therefore for precision and reproducibility spaces are a better choice across all platforms.

Many IDEs support inserting a preset number of spaces when you tab anyway, so the problem is invisible to you.

Re:Who decided indenting with spaces was a good idea? by smt88 on Thursday April 02, 2015 @06:51PM (#9313658)
Code size does matter for websites and web apps, and for high-traffic sites, the difference between 1 byte and 4 bytes is significant.

That said, if you've gotten to a point where you have high traffic, you've had lots of time to implement something that optimizes your assets anyway.

Re:Who decided indenting with spaces was a good idea? by jannotti on Wednesday April 01, 2015 @11:14PM (#9308454)
Because sometimes you must use spaces, because you are indenting a continuation line that should be indented to an exact spot with respect to the previous line (you're in the middle of an expression, you want to be at the start of an open parenthesis, etc).

Surely the suggestion in that case is not to carefully insert tab characters to the same indentation of the previous line, and then spaces for the rest, so that you have some tabs and some spaces on the continued line? Anything else fails if the tabs are set as "developer preference" on display, but that tabs + spaces on one line is incredibly fiddly.

Re:Who decided indenting with spaces was a good idea? by amwmedia on Thursday April 02, 2015 @09:01AM (#9310391)
yeah, I would wonder why your continuation line has to line up perfectly with the previous one. When you start laying your code out so that everything is perfectly aligned to everything else, it just leads to headaches and heartbreaks when other developers don't share your passion for perfectly manicured code. :-)
Re:Who decided indenting with spaces was a good idea? by digitalpacman on Wednesday April 01, 2015 @11:26PM (#9308501)
I dislike ever seeing this. Sounds too OCD
Re:Who decided indenting with spaces was a good idea? by mblakele on Wednesday April 01, 2015 @09:54PM (#9308234)
Re:Who decided indenting with spaces was a good idea? by daemin on Wednesday April 01, 2015 @10:33PM (#9308337)
Even though I prefer to use tab characters at home it would be much better if a single tab character could indent the code to the appropriate level. So a tab character means indent the code to where appropriate based on some predefined rules. Granted this is only possible for some languages and not others, and it would be much nicer even when using a non-flat file for code.
Re:Who decided indenting with spaces was a good idea? by facorreia on Wednesday April 01, 2015 @09:19PM (#9308111)
The guy that had to use punched cards to enter code that would be printed to paper.

http://computers.mcbx.netne.net/media/pcards/k_cobol_cyf.jpg

Re:Who decided indenting with spaces was a good idea? by irascible on Thursday April 02, 2015 @09:05AM (#9310416)
TABS + 1TBS = Pabst Blue Ribbon MF!
Re:Who decided indenting with spaces was a good idea? by a3voices on Wednesday April 01, 2015 @09:32PM (#9308150)
Because you can move the cursor vertically and be in the correct column.
Re:Who decided indenting with spaces was a good idea? by digitalpacman on Wednesday April 01, 2015 @11:29PM (#9308512)
Use an IDE that's smart enough to do it for you