Tabs are objectively better than spaces - gomakethings.com

https://programming.dev/post/2586046

Tabs are objectively better than spaces - gomakethings.com - programming.dev

Ah yes I understand now!

Tabs let you define how big you want each indent to be

…except when they don’t. Many common environments have a hardcoded tab size of 8, which is insanely big for using it for indentation.

Because other people might have restricted environment which might not suit their preference is not a good reason to level it down IMO.

Also, I think 9 is the best size for indent (matter of preference), do you think I should switch to space so everyone can enjoy this wonderful view I have ?

Ah, the best kind of indent. A tab and a space.
Or just set tabsize to 9, that’s the point :)
Where’s the fun in that?
Try it and you’ll see
Why would you ever need 9 other than trolling people on the internet?
Straight on point!

It’s not just “might”. Termux is pretty much the only good choice for programming on Android.

I think 9 is the best size for indent (matter of preference), do you think I should switch to space

I think you should switch to an exorcist.

What’s your point ? You can use vim on termux and set the tabsize to whatever you want for example.
Yes, but if you use something like cat, head, less, etc. to view the code, or the Python REPL, you’re still going to see the defnult tab size.
You can set the tabstop with less -x*n*. But ok I see what you mean. I still stand by my point though. If termux doesn’t support setting tabstops and it’s an issue, then it’s a bug in termux, not a reason to level down your formatting standard.
Also :exorcise is only a quick pluginstall away, anyway. /s

As an embedded software developer that does linux kernel drivers I’ve come to love the tab size 8 indentation level.

I’m paraphrasing: “if your indentation level gets too deep, it’s time to rethink/refactor your function.”

And with tab 8 you’ll notice it rather quick if your function does too much/unrelated stuff.

A function should be short and do one thing only, if possible. It also makes unit testing easier if that’s a requirement.

When you’re operating on such a low level of abstraction, it’s no wonder you don’t need deep nesting.
Oh, I’ve done my fair share of C++ and Python as well. But you got to agree with me that when you are on your fourth indented “if case” it’s time to step back and think about what you are trying to achieve. I mean it’s probably going to work, but probably also very hard to maintain that type of code.
How would you implement, for example, Gaussian elimination with at most 3 levels of nesting?

Abstraction.

The solution to all levels of nesting.

Be specific. Which exact part would you abshract away and how?
There a many ways to implement abstractions, but it’s highly dependent on the language in question. You could simply refactor each level of nesting into its own function, with all dependents provided as parameters instead of scoped variables. You could then flatMap to avoid a bunch of nested looping, favoring a linear approach that’s often easier to reason about. You could go all out and refactor all your continual statements away in favor of the Either monad. You’d then have a number of functions, each doing one thing (including no nesting), and a main function gluing it all together, linearly. That is a pattern you can always apply; there’s nothing controversial about it, and nothing particularly challenging about Gaussian elimination.

What environment are you using that has a hardcoded tab size? I haven’t seen this since typewriters.

Some projects just use tabs as a compressed form of 8 spaces. But that is a sin. Use tab to mean “one indent level” and align with spaces if you need to. (the occasional ASCII art diagram)

What environment are you using that has a hardcoded tab size?

Microsoft Windows’ Notepad. I have sometimes used that when on a public computer.

What environment are you using that has a hardcoded tab size?

  • Termux
  • SourceHut
  • “View page source” in the browser

Termux

I think running tabs -N (where N is you preferred tab size) in the terminal should work. This is what I use in my zshrc on desktop.

SourceHut

Yup, they seem to be pretty opinionated here. If you look at the source there is just an inlined:

“View page source” in the browser

On Firefox this uses my default tab size of 4. But I guess changing this default isn’t user-friendly.

You can’t count it as good when it is unconfigurable when it happens to use your preference when the whole selling point of tabs is that they’re configurable.
I don’t understand what you are trying to say. I agree that SourceHut forcing their preference isn’t good. The other two are configurable and I have configured them to my preference on my machines.
You made it sound like Firefox wasn’t configurable, my bad. I thought you were saying you didn’t care that it wasn’t configurable because you liked the width they chose.
Oh no. It is configurable, although it requires editing userContent.css. So barely configurable. I think it defaults to 8 but I reduce it to 4.

I agree that SourceHut forcing their preference isn’t good.

I don’t think this is a fair point. Every developer makes “opinionated” decisions on default settings on a daily basis. SourceHut is open source and anyone can propose a patch that makes the tab width configurable, which to my knowledge has not happened. “Forcing their preferences” would imo imply that this discussion happened and the patch was rejected without good reason.

To me, this sounds a lot like the usual “I don’t like the how this thing that you provide for me for free is doing this one thing so I demand you change it for me free of charge” argument.

Github uses 8 as a default. It’s configurable though.

This is the biggest problem with tabs. Too many tools don’t let you adjust the size (or make it very difficult). This is the only reason I usually prefer spaces (only very slightly).

My dream solution is elastic tabstops and I’ve posted about it here before a few months ago. The problem with wanting elastic tabstops is that it seriously compounds the issue of “editors don’t properly support it”

nickgravgaard.com/elastic-tabstops/

Elastic tabstops - a better way to indent and align code

Elastic tabstops - a better way to indent and align code

This is a holy war that I will gladly fight again and again! I can’t believe that soft tabs are more popular, especially in python!
Python noob here. I thought you were only supposed to use spaces with python and tabs would give you indentation errors?
Tabs work fine, you aren’t allowed to mix, indentation must be consistent.

Actually I think you can technically mix. They have a “conversion factor”. But don’t, because then the code will look like crap on any other tab size (defeating the point of using tabs in the first place)

I think it would be better that each line needs to start with the exact same bytes to be considered within the same indent level. But I don’t think that is the decision Guido made.

That is because they are superior.

spatium vult.

That’s all well and good if everyone uses editors you can configure to a certain standard all the time. Then tabs all the way.

Unfortunately that’s not reality for everyone.

Everyone should use a better editor.
Honestly, what fucking editor are you using that doesn’t allow you to configure tab length? Wordpad?
I’m hopping between shells using whatever is installed.
Vim has it, even Nano has it. It’s one setting away, set it once and forget it. If you use throwaway containers it would be hassle but I don’t understand why you would need to view code inside the container in that case.
EditorConfig

EditorConfig is a file format and collection of text editor plugins for maintaining consistent coding styles between different editors and IDEs.

I've always wondered why some people tout "forcing a consistent appearance across environments" as a pro for spaces. That's a bad thing.

To be honest I'm surprised code format converters aren't ubiquitous. Let the repo have it's master format, enforced on commit. Then converters translate into each developer's preferred standard dialect on checkout and back again on commit.

The consistent appearance thing is probably more about how mixing tabs (for indentation) and spaces (for alignment, eg in multi-line function definitions of calls) looks like complete crap if you change the tab width.

I think you have it backwards. If you use tabs for indentation and spaces for alignment it works great for any tab size.

It is when you use a tab just as a compressed representation of 8 spaces and use them for alignment as well that it goes to shit. (because you have made the sin of tab == 8 spaces instead of the correct tab = 1 indent level)

How does that work, and with which editor settings? If you simply set the tab width (tabstop) in vim, things go south.

Say you have a function definition one indent level in, then 22 characters of text. You more want to align the next line to that. How does that work in practice with tabs?

The obvious way with tabs and ts=4 would be 6 tabs and two spaces(one tab for the initial indent, the rest to match 22 characters). But then someone with ts=2 comes along and barely gets half way there, or someone with ts=8 who overshoots by a lot.

Setting tabstop and shiftwidth differently is basically legacy braindead behaviour. It is going back to the logic of tab is just a way to compress spaces. If you are doing that then you have all of the problems of both tabs and spaces.

As for alignment the easy answer is don’t use tabs for alignment. Use tabs for indentation, if you want to align something use spaces for the alignment past the indentation. Lemmy seems to be breaking code snippets right now but I have a really old blog post about this.

kevincox.ca/2014/06/26/responsive-tabs/

The post is a little out of date when referencing the style of my blog but the C example shows alignment. If you can resize the browser you can see that the indention changes from 4 to 2 as the screen gets narrower without breaking the alignment.

Responsive Tabs - Kevin Cox

That’s not how you should mix tabs and spaces for alignment. You use the same number of tabs as the previous line, and then fill the remaining width with spaces. That way, when you change tab width, the alignment spaces will always start in the same column as the line they’re aligning to, regardless of the tab width.

Do most editors do that by default? If so, that's great -- if not, it's just a downside for tabs, if you need to hit enter, backspace out the automatic indents and then press space 30 times rather than just hit enter and have it aligned automatically.

vim seems to auto-insert tabs when you hit enter mid-function definition, at least with standard settings.

That seems like a problem with Vim, then… Typically I don’t align at all, so I’m not familiar with editor behavior for alignment; I prefer to just indent one level deeper.
Using only tabs for indentation and only spaces for alignment will never result in crap alignment when adjusting tabstops because the alignment does not use tabs.

I consider tabs for indentation a failed concept.

The idea is good, but it evidently failed. Most guidelines and newer Tools recommend or require or use spaces for indent. They have their reasons too.

The prevalence of spaces makes it hard to make a contrary argument for tabs. By now, I don’t think it’s worth even if it had reasonable advantages.

Editors/IDEs that parse syntax can adjust space indent too. A mixture for indent and alignment is not obvious for everyone (I always display whitespace in my editors and am deliberate and consistent, but many people and editor defaults won’t be). Some defaults of four or eight space-width tab display is atrociously wasteful and inaccessible.

Spaces are a good enough baseline. It works well enough. And most importantly it works consistently. That’s why it won in prevalence and use.

If I could only get everyone who works on the thing I work on to use a whitespace visualizer, it would be enough. We can fight about tabs or spaces after we get rid of all the unnecessary trailing ones.
You’ve a .editorconfig in your repo right? Right?
In case folks aren’t aware, editorconfig.org
EditorConfig

EditorConfig is a file format and collection of text editor plugins for maintaining consistent coding styles between different editors and IDEs.

I’m glad someone linked this. Should be further up in this thread.
I created a tool for removing trailing whitespace across the whole project. After cleanup now it’s at least only a matter of pointing it out in reviews and occasionally fixing landed sources.

It works well enough

is an argument that works for you because you have somewhat healthy eyesight (not counting common glasses).

It “won” because the majority of healthy people has no problem marginalizing minorities with disabilities.

Do you have actual experience with it?

I read a comment from someone with impaired eyesight who used an editor that would adjust space indent just fine.

Accessibility is a thing I always consider.