blog
2026-06-04

为一个看不见的东西,程序员因吵了半个世纪。


前段时间,微软退役老兵Raymond Chen在他的博客上翻出了一段旧事:

当年微软和IBM合作开发OS/2操作系统时,两边因为一个按键吵了起来。

在对话框里,用户按哪个键从一个输入框跳到下一个?微软说用Tab,IBM不同意,然后一级一级往上升级,升了七层,一直升到副总裁,要求微软也派同级别高管来确认。


微软这边回了一句:"Bill Gates's mother is not interested in the TAB key." 意思是比尔·盖茨上面就剩他妈了,难道比尔·盖茨他妈也要来讨论 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字符,空格党正式登上了舞台,因为他们的论据非常简单白给:"用空格,到哪儿都一样啊。"

本来吧你乐意用tab就用,喜欢到哪儿都一样就用空格,也没人拦着。但真正把技术分歧升级成宗教战争的,是因为两个男人堂堂登场。

第一位上场的选手,就是鼎鼎大名的Linux之父:莱纳斯·托瓦兹。


这老小子不仅是Tab党,而且是纯纯的原教旨主义者,毕竟Linux内核编码规范的第一章,就是这么写的:

"制表符是8个字符,因此缩进也是8个字符。有些异端运动试图将缩进设为4个甚至2个字符深,这无异于试图将圆周率定义为3。"

这尼玛,敢情人家空格党要有两栋高楼,他得是恨不得亲自开飞机的那种。

但人家这倒也不是在耍流氓。他的逻辑是:8字符缩进,一行80个字符就满了,你最多嵌套3层,超过3层说明代码写烂了啊。你的代码缩进到第四层出了问题,那不是Tab的问题,是你的问题。

所以有句名言至今流传:"如果你的代码需要超过3层缩进,那你已经完蛋了,去修你的程序吧。"


但问题是,空格党也有高手。这边派出的就是:Python之父,吉多·范罗苏姆。

和Linux相比,这哥们就走了完全相反的路,Python把缩进变成了一种语法。

你不缩进,代码就跑不了,因为解释器靠数你每行前面有几个空白字符来判断代码结构,如果团队里有人用Tab有人用空格,那直接就报错了。


实际上,吉多早期其实也想推Tab,但社区反馈实在是一言难尽。

跟前面的终端问题类似,由于不同编辑器对Tab转空格的默认行为完全不一样,你的代码一跨平台就直接炸了。

所以为了保全自己的户口本不被社区Aoe,最终他决定:所有人全部用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还是空格"也会和"羊毫还是狼毫"一样,成为古法编程时代的非遗谈资。

老程序员们坐在一起喝酒,聊起当年为了一个看不见的字符差点跟同事绝交,就像老木匠聊起刨子该推还是该拉吵得不可开交。

手艺还是好手艺。只是用得上的人,越来越少了。

撰文:纳西

编辑:江江 & 面线

美编:素描

图片、资料来源

the register,Github等,部分图源网络


来源于:https://www.163.com/dy/article/KUHODT84051196HN.html    如有侵权请联系我们