最近,微软退役工程师 Raymond Chen 在个人博客中回忆了一段鲜为人知的往事:
当年微软与 IBM 携手开发 OS/2 操作系统时,双方曾因一个按键的触发逻辑争执不下。
在对话框界面中,用户应该按哪个键才能从一个输入框跳转到下一个?微软提议使用 Tab 键,IBM 不同意,于是矛盾层层上报,一直升到副总裁级别,对方还要求微软派遣同等职位的高管来确认方案。

微软这边的回应是:"Bill Gates's mother is not interested in the TAB key." 言下之意,比尔·盖茨上面就只剩他母亲了,难道连盖茨的母亲也要为 Tab 键专门开会吗?
仅仅一个按键,竟让两家科技巨头闹到高管对峙。
不过,和“用 Tab 切换字段”这种小摩擦相比,真正的风暴还在后面——编写代码时缩进到底该用 Tab 还是空格?
这个问题乍听起来就像“你吃饭用左手还是右手”一样无聊。但偏偏就是这件小事,全球最聪明的一群人为此争执了整整半个世纪,甚至比冯·诺依曼派与图灵派的辩论还要早。

要追溯这场代码缩进之争的源头,得从打字机说起。Tab 键最早出现在打字机上,本职工作就是替代空格完成缩进任务,避免打字员一格一格地敲击导致手腕劳损。
然而进入计算机时代,存储容量以 KB 计算。同样缩进四层,空格需要 16 个字符,而 Tab 仅需 4 个,节省下来的空间都是宝贵的资源。
因此早期终端直接将 Tab 宽度固定为 8 个字符。从 1969 年的 TOPS-10 到 1974 年的 VT52,Tab 始终保持 8 字符宽度。甚至在 ASCII 编码中,Tab 和 Space 也被明确区分为控制字符和可打印字符。老祖宗定下的规矩,不容商量。
直到 1978 年,VT100 终端首次允许用户自定义 Tab 宽度,从此麻烦接踵而至。
很快大家发现:你的 Tab 宽度是 4 个字符,我的是 8 个,他的是 2 个。你在自己电脑上排版整齐的代码,在我屏幕上打开就完全错乱,该找谁说理去?

为了应对混乱的 Tab 字符显示问题,空格党正式登场。他们的论据非常直白:“用空格,无论在什么环境下显示效果都一样。”
本来,你爱用 Tab 就用 Tab,喜欢统一就去空格,没有人会阻拦。但真正把技术分歧升级为“宗教战争”的,是两个关键人物的登场。
第一位选手,正是大名鼎鼎的 Linux 之父:林纳斯·托瓦兹。

这位老兄不仅是 Tab 党,更是纯粹的原教旨主义者。Linux 内核编码规范的第一章就这样写道:
“制表符是 8 个字符,因此缩进也必须是 8 个字符。有些异端运动试图将缩进设为 4 个甚至 2 个字符深度,这无异于试图将圆周率定义为 3。”
这语气,简直恨不得亲自开飞机去撞击空格党的大楼。
但林纳斯并非无理取闹。他的逻辑是:8 字符缩进,一行 80 个字符就满了,最多嵌套 3 层,超过 3 层就说明代码结构太差。代码缩进到第四层出现了问题,那不是 Tab 的问题,而是你的设计问题。
因此有一句名言至今流传:“如果你的代码需要超过 3 层缩进,那你已经完蛋了,回去重构你的程序吧。”

而空格党这边,也有一位重量级人物——Python 之父,吉多·范罗苏姆。
他和林纳斯走了完全相反的路。吉多把缩进化为了语法——你不缩进,代码就无法运行。解释器通过统计每行前面的空白字符数来判断代码结构。如果团队中有人用 Tab、有人用空格,代码立刻就会报错。

实际上,吉多早期也曾想推广 Tab,但社区反馈非常糟糕。和前面终端问题类似,不同编辑器对 Tab 转空格的默认行为完全不一致,代码一旦跨平台就直接崩溃。
因此,为了保全自己的“名声”不被社区集体攻击,他最终决定:所有人统一使用 4 个空格,严禁混用!
紧接着,他制定的 PEP 8 成为了 Python 的“宪法”,空格也成了 Python 社区的绝对信仰。

其实,双方都是为了解决代码规范问题:一方用强制的缩进深度倒逼代码架构优化,另一方用绝对的空格一致性换取跨平台安全。底层逻辑类似,但思路不同,结果也大相径庭。
再加上两位大佬的站台,就像封神榜里的元始天尊和通天教主都发了话,那还有什么可说的?
于是从上世纪末到最近几年,Tab 党和空格党就像阐教与截教一样,互不相让。
举个例子,在 HBO 神剧《硅谷》中,男主角发现女朋友使用空格缩进,当场崩溃冲出家门,破口大骂:“我绝不可能和一个用空格代替制表符的人在一起。”

啧啧,剧组的科技顾问是 Google 的开源总监,这段灵感确实来自程序员的真实吐槽。
还有 2017 年,Stack Overflow 的数据科学家也是看热闹不嫌事大,直接公开“拱火”:分析了几十万份数据后发现,使用空格的程序员平均薪资比使用 Tab 的高 8.6%。这件事还上了 BBC 新闻。
空格党你们怎么还搞薪资歧视啊喂!这是职场霸凌!

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

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

不过空格党也没有就此投降——安装一个适配插件就能折叠空格缩进,技术问题终归可以用技术手段解决。
同样,随着 2017 年 EditorConfig、Prettier 这类格式化工具的出现,手工敲代码的争论也逐渐被技术改进所平息。这些工具默认不使用 Tab,但也支持,并且提供了使用 Tab 缩进、空格对齐的 SmartTabs 思路。
所以空格还是 Tab,越来越变成了一种文化上的身份认同。

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

当 AI 帮你写代码的时候,它遵守的是项目配置文件。至于缩进用什么?
随便。反正不是人敲的。
这好比你费了半天劲争论毛笔该用羊毫还是狼毫,结果抬头一看,大家都用打印机了。
也许再过二十年,“你用 Tab 还是空格”也会和“羊毫还是狼毫”一样,成为古法编程时代的非遗谈资。
老程序员们坐在一起喝酒,聊起当年为了一个看不见的字符差点跟同事绝交,就像老木匠聊起刨子该推还是该拉,吵得不可开交。
手艺还是好手艺。只是用得上的人,越来越少了。
撰文:纳西
编辑:江江 & 面线
美编:素描
图片、资料来源:
the register,Github等,部分图源网络

