The Tabs vs. Spaces war is over, and spaces have emerged victorious
Rationale for Tabs (Configurable Indent, Accessibility)
- Tabs are defended as the “semantic indent” character: one tab = one logical level, with visual width left to each user.
- Supporters emphasize accessibility: people have different eyesight, screens, and density preferences; tabs let each viewer choose 2, 3, 4, 8, etc.
- Go is cited as an example: official tooling uses tabs so each dev can configure width independently.
- Some argue this is the intended meaning of the tab character, and that other uses (e.g., “tab = 8 spaces”) misunderstand or misuse it.
Arguments for Spaces and Uniform Rendering
- Opponents say tabs break the “what I see is what you see” property; inconsistent tab stops (often default 8) make code unreadable in many tools and web views.
- Hard line-length limits clash with variable-width tabs: a file wrapped to 80 chars at tab=2 may overflow badly at tab=6.
- Spaces avoid invisible mixed whitespace, confusing diffs, and alignment that shifts with editor settings. Many teams simply ban tabs and let the Tab key insert spaces.
Hybrid Approach: Tabs for Indent, Spaces for Alignment
- A common compromise is “tabs for indentation, spaces for alignment.”
- Critics say this invariably degenerates into broken alignment, mixed whitespace, and tooling complexity; linters/formatters rarely enforce it well.
- There’s a secondary debate on alignment itself: some say column alignment aids readability (e.g., SQL, tables), others call it unnecessary bikeshedding that harms diffs.
Line Length, Tab Width, and Indent Size
- Disagreement persists over 2 vs 3 vs 4 vs 8 spaces; some argue 3 is visually optimal, others insist on powers of two.
- Many treat 80 columns as obsolete on modern screens; others still care about side‑by‑side panes and prefer ~100 columns.
- Variable tab width makes a single global line limit tricky if team members choose different widths.
Tooling, Formatters, and “War Mostly Over”
- Several claim the war is effectively over because ecosystems standardize via autoformatters (gofmt, rustfmt, Prettier, etc.) and
.editorconfig. - Others note formatters can break ASCII diagrams or comments, and sometimes change formatting rules between versions.
- Some suggest the real endgame is read‑time formatting over a structured representation (AST/database), where each user chooses their own visual style; Unclear how widely this can or will be adopted.
Meta Observations
- Many see the core conflict as (tabs + spaces) vs (spaces-only) rather than tabs vs spaces.
- There’s broad agreement that consistency per project and letting tools decide is more valuable than winning the argument itself, even as the bikeshedding clearly continues.