我们先从一桩往事说起。
前阵子,微软资深老兵Raymond Chen在他的博客上,揭开了一段尘封已久的趣闻:当年微软和IBM携手开发OS/2操作系统时,双方竟为一个按键僵持不下。
在对话框里,用户按哪个键才能在输入框之间跳转?微软坚持用Tab,IBM却不认同。这场争议层层上报,整整跨越了七级管理架构,最终呈递到副总裁案头,并要求微软派出同级别的高管来做最终裁决。

微软的回应堪称经典冷幽默:“比尔·盖茨的母亲对Tab键不感兴趣。”言下之意,比尔·盖茨之上再无高管,难道还要请他的母亲来参与讨论一个小小的按键?
区区一个按键,竟能让两家科技巨头闹到高管直接对峙。
但说实话,跟另一场旷日持久的战争比起来,这实在不算什么。那场战争的主题是:编写代码时,缩进究竟该用Tab键,还是空格键?
这个问题听上去就像“你吃饭用左手还是右手”一样琐碎。然而,就是这样一个看似微不足道的事情,却让全球最聪明的一群人争论了整整半个世纪,其历史甚至比“冯·诺依曼派”与“图灵派”的论战还要久远。

一切还得从打字机说起。Tab键最初就出现在打字机上,它的本职任务就是替代空格完成缩进工作,避免打字员一下下敲击空格键导致手腕劳损。
进入计算机时代后,存储容量按KB计算。同样是缩进4层,空格需要16个字符,而Tab只需4个,节省下来的都是实实在在的成本。因此,早期终端直接将Tab宽度固定为8个字符。从1969年的TOPS-10到1974年的VT52,Tab始终是8个字符。在ASCII码中,Tab和Space也有着截然不同的定义——一个是控制字符,另一个是可打印字符。老祖宗定下的规矩,无可争议。
直到1978年,VT100终端首次允许用户自定义Tab宽度。这下,麻烦来了。
大家很快发现:你的电脑上Tab显示4个字符宽,我的是8个,他的是2个。在你那里排版完美的代码,换到我的屏幕上立刻变得杂乱无章。这该找谁说理?
为了应对这种混乱,空格派正式登场。他们的论点简单而直接:“使用空格,在任何地方都一样。”
本来,你爱用Tab就用Tab,喜欢“到哪儿都一样”就用空格,互不干扰。但真正将这场技术分歧升级为“宗教战争”的,是两位重要人物的正式登场。
第一位:Linux之父,林纳斯·托瓦兹

这位老兄不仅是Tab党,更是纯粹的原教旨主义者。Linux内核编码规范的第一章就如此明确写道:
“制表符宽度为8个字符,因此缩进也应该是8个字符。某些异端试图将缩进设为4个甚至2个字符深,这无异于试图将圆周率定义为3。”
本来空格派顶多算盖两栋楼,而林纳斯简直恨不得亲自开着飞机去撞毁它们。
但他这么执着也并非无理取闹。他的逻辑是:8字符缩进,一行80个字符很快就填满了,你最多只能嵌套3层。超过3层?说明你的代码本身写得就有问题。如果你的代码缩进到第四层出了毛病,那不是Tab的错,而是你的问题。
因此,有句名言至今仍在流传:“如果你的代码需要超过3层缩进,那你就已经搞砸了,去修正你的程序吧。”

第二位:Python之父,吉多·范罗苏姆
当然,空格派也拥有顶尖高手。这边派出的代表,就是吉多·范罗苏姆。
与Linux走的是完全相反的道路,Python将缩进变成了一种语法规则。你不缩进,代码就无法运行——解释器通过数每行前面的空白字符来判断代码结构。如果团队里有人用Tab、有人用空格,程序会直接报错。

实际上,吉多早期也曾尝试推行Tab,但社区的反馈实在一言难尽。类似于终端问题,不同编辑器对Tab转换为空格的默认行为完全不同,导致代码在跨平台时立刻崩溃。
为了保全自己的声誉不被社区“群起而攻之”,他最终做出决定:所有人统一使用4个空格,严禁混用!
紧接着,他制定的PEP 8成为了Python的“宪法”,空格也因此成为了Python社区的绝对信仰。

其实,两派的核心逻辑本质上相差无几——一方用强制的缩进来倒逼代码架构优化,另一方用绝对统一的空格来换取跨平台的安全性。思路不同,结果自然大相径庭。再加上两位技术大佬的站台,就好比封神榜里的元始天尊与通天教主都发了话,接下来自然不必多说。
从上世纪末到最近几年,Tab党和空格党就像阐教与截教,彼此攻讦不休。
举一个例子,在HBO神剧《硅谷》中,男主角发现女朋友使用空格时,当场崩溃冲出家门,并破口大骂:“我绝不可能和一个用空格代替制表符的人在一起。”

该剧的技术顾问是Google的开源总监,而这段情节的灵感恰恰来自程序员们的真实吐槽。
还有2017年,Stack Overflow的数据科学家也忍不住“拱火”:他们分析了几十万份数据后发现,使用空格的程序员平均薪资比使用Tab的高出8.6%。这一发现甚至登上了BBC。
空格派难道还搞起了薪资歧视?这简直是职场霸凌!

不过,后来真相得以查明:并非使用空格让你变有钱,而是有钱的公司普遍要求你使用空格。高薪群体大多供职于工程规范严格的大型企业。在几百人协作的庞大代码库里,空格所带来的“绝对一致性”确实最为省心。
说白了,缩进方式本质上只是一个变量,它并非编程能力的体现,而是反映出你所在工程环境的成熟度。

那么,最终谁赢了?
直接说结论:虽然胜负未分,但Tab党在道德层面占据了上风。
这并非因为Tab键“根正苗红”,而是源于一群大家可能从未考虑过的人——盲人程序员。
盲人程序员依靠盲文显示器来编写代码,而盲文面板通常只有40个字符格。4空格的缩进嵌套3层就占用了12格,相当于30%的物理空间被白白浪费。手指摸一圈下来,发现没摸到多少实际代码内容。而Tab一层仅占一格,3层嵌套只需3格。
这样一来,Tab在道德层面直接“封神”。因为空格派所追求的“一致性”,本质上假设每个人都拥有完美的视力和标准的显示器。但现实世界并非如此。

不过,空格派也并未因此投降——安装一个适配插件就能折叠空格缩进,技术性问题终归可以用技术手段解决。
同样地,随着2017年EditorConfig、Prettier这类代码格式化工具的普及,手工敲代码引发的这种争论也渐渐被技术改进所平息。这些工具默认不使用Tab,但同样支持,并会采用“Tab缩进、空格对齐”的SmartTabs思路。
所以,空格还是Tab,越来越变成了一种文化层面的身份认同。

弗洛伊德在1917年提出过一个概念,叫做“微小差异的自恋”。两个群体越是相似,就越会对彼此间那一点点不同之处感到抓狂。所有程序员面对的压力几乎一模一样:改不完的需求、查不尽的Bug、半夜三更的报警提示,连发际线的走势都高度重合。正因为太像了,才需要找到一个微小的差异来证明——“我跟你不一样”。
无论是简约头像还是动漫头像,格子衫还是女装,Tab还是空格,这些早已不再是单纯的工程决策。其本质,是极客世界里的部落图腾。
这种自古以来就存在的争论,仅靠人类自身,永远分不出胜负。
然而,随着AI时代的到来,分不分胜负其实也已不再重要。
2026年,Claude Code的创造者鲍里斯·切尔尼表示:“我们公司已经没有手写代码了。”他还预言,“软件工程师”这个头衔将在2026年开始消失。未来,每个人都是会写需求的产品经理,代码相关的工作全交给AI Agent。

当AI帮你写代码时,它会严格遵守项目配置文件。至于缩进用什么?随你便。反正不是人类亲手敲的。
这就好比你好不容易争论清楚毛笔该用羊毫还是狼毫,结果一抬头,发现大家都改用打印机了。
也许再过二十年,“你用Tab还是空格”这个问题,也会和“羊毫还是狼毫”一样,成为古法编程时代的一项非物质文化遗产话题。
老程序员们坐在一起喝酒时,聊起当年为了一个看不见的字符差点跟同事绝交的经历,就像老木匠们聊起刨子该推还是该拉曾让他们吵得不可开交一样。
手艺依然是好手艺。只是能用到它的人,越来越少了。
