不久前,微软资深退休员工Raymond Chen在其博客中分享了一段往事:当年微软与IBM合作开发OS/2操作系统时,双方曾为一个按键问题争执不休——在对话框里,用户按哪个键才能从一个输入框跳转到下一个?微软坚持使用Tab键,而IBM表示反对,随后问题逐级上报,整整走了七层,一直递交到副总裁级别,并要求微软也派出同等级别的高管进行确认。微软方面的回复是:“比尔·盖茨的母亲对Tab键不感兴趣。”——言下之意,比尔·盖茨上面只剩他母亲了,难道还要让她来讨论Tab键吗?
区区一个按键,竟能让两家顶级科技公司闹到高管对峙。但说实话,比起“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字符,空格党正式登场。他们的论据非常简单直白:“用空格,无论在哪儿都一样。”本来各用各的也没人拦着,但真正把技术分歧升级为宗教战争的,是因为两个男人的隆重登场。
第一位选手,鼎鼎大名的Linux之父:林纳斯·托瓦兹。这位老兄不仅是Tab党,而且是纯粹的原教旨主义者。Linux内核编码规范第一章就写着:“制表符宽度为8个字符,因此缩进也应该是8个字符。有些异端运动试图将缩进设为4个甚至2个字符深,这无异于试图把圆周率定义为3。”
他倒也不是在耍流氓。他的逻辑是:8字符缩进配合一行80个字符,最多嵌套3层;超过3层就说明代码写得太差了。如果你的代码缩进到第四层出了问题,那不是Tab的问题,而是你的问题。因此有句名言流传至今:“如果你的代码需要超过3层缩进,那你已经完蛋了,去修你的程序吧。”

但空格党也有高手。这边派出的是Python之父,吉多·范罗苏姆。与Linux相反,他把缩进变成了一种语法——不缩进,代码就无法运行,因为解释器会通过每行前面的空白字符数量来判断代码结构。如果团队里有人用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年就会开始消失。以后每个人都是会写需求的产品经理,代码的事交给Agent。

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