当前位置:

首页 > 硬件相关 > 为一个看不见的东西,程序员因吵了半个世纪。

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

从微软与IBM因Tab键争论到程序员之间长达半个世纪的Tab与空格缩进之争,Linux之父力挺8字符Tab,Python之父则推行4个空格。薪资调查显示空格党收入更高,但实为大厂规范所致。盲人程序员使Tab在道德上占优,而AI写代码或将终结这一争论。

前段时间,微软退役老兵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之父,吉多·范罗苏姆。

跟Linus走的完全是相反的路。他把缩进变成了一种语法——你不缩进,代码就跑不了。解释器靠数你每行前面有几个空白字符来判断代码结构。如果团队里有人用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等,部分图源网络


本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
硬件相关 空格
相关文章 更多
深入探讨全角空格和半角空格的使用
深入探讨全角空格和半角空格的使用

全角空格和半角空格是我们在日常写作中经常会用到的两种空格符号。在许多人看来,全角空格和半角空格可能只是一种无聊的文稿排版细节,但实际上它们的使用却可以影响到我们的阅读体验和文本的表达方式。全角与半角的概念在中文输入法中起到了非常重要的作用,特别是在数字、英文混合输入时更为常见。下面将从全角空格和半角空格的定义、区别以及使用场景等方面展开探讨。首先,我们需要了

全角空格与半角空格的不同之处
全角空格与半角空格的不同之处

全角空格与半角空格的不同之处在我们使用文字处理软件或者编辑文字内容的时候,有时候会遇到空格这个概念。空格在排版和格式化文本时是一个很基础的元素,不过很多人可能并不知道全角空格和半角空格之间的区别。在日常使用中,我们或许能感受到全角空格和半角空格在不同的情境下会产生不同的效果,但可能并没有意识到这其中的细微差别。首先,全角空格和半角空格的区别在于它们所占据的宽

全角空格与半角空格的区别及应用场景
全角空格与半角空格的区别及应用场景

全角空格与半角空格的区别及应用场景在日常使用中,我们经常会遇到全角空格和半角空格这两种不同的空格符号,它们在打字、排版等方面有着不同的应用场景。全角空格和半角空格虽然外观上看起来很相似,但实际上却有着差别。下面将详细介绍全角空格与半角空格的区别及其应用场景。首先,我们来说说全角空格和半角空格的区别。全角空格是一种占据一个字符宽度的空格符号,它与中文字符的宽度

灵活运用:使用trim函数轻松处理中文空格问题
灵活运用:使用trim函数轻松处理中文空格问题

灵活运用:使用trim函数轻松处理中文空格问题在日常的编程工作中,我们经常会遇到处理字符串的情况,而字符之间的空格问题是一个比较常见且让人头疼的挑战。特别是对于中文文本,中英文之间的空格处理更是需要特殊的考虑。在这篇文章中,我们将介绍如何通过使用PHP编程语言中的trim函数来轻松处理中文空格问题,并提供具体的代码示例帮助读者更好地理解和使用这个函数。PHP

PHP开发指南:快速去掉字符串中的空格技巧
PHP开发指南:快速去掉字符串中的空格技巧

PHP开发指南:快速去掉字符串中的空格技巧在PHP开发中,处理字符串是非常常见的操作。其中,去掉字符串中的空格是一个常见需求。本文将介绍几种快速去掉字符串中的空格技巧,帮助开发者更高效地处理字符串。使用trim()函数去掉字符串两端的空格trim()函数是PHP中用来去掉字符串两端空格的函数,它可以去掉字符串开头和结尾的空格,包括空格、制表符、换行符等。$s

分享Golang处理空格的有效技巧
分享Golang处理空格的有效技巧

标题:Golang替换空格的实用技术分享随着互联网的普及和发展,程序设计和开发变得愈发重要。在编程过程中,数据处理是一个非常关键的部分。处理文本数据时,常常会遇到需要替换空格的情况,本文将分享如何在Golang中实现替换空格的技术,并提供具体的代码示例。为什么需要替换空格?空格是文本数据中常见的特殊字符之一,有时候我们需要将空格替换成其他字符,或者去除掉空格

优雅处理Golang中的空格替换
优雅处理Golang中的空格替换

Golang是一种开源的编程语言,它具有简洁、高效和强大的特点,因此越来越受到广大开发者的喜爱。在实际的开发过程中,我们经常会遇到需要处理字符串的情况,其中替换空格是一个比较常见的需求。本文将介绍一些Golang中优雅替换空格的技巧,并提供具体的代码示例。1.使用strings.Replace()函数packagemainimport(

如何有效处理Golang中的空格字符
如何有效处理Golang中的空格字符

Golang高效处理空格字符的方法在Golang编程中,处理字符串中的空格字符是一个常见的任务。空格字符可以是空格、制表符、换行符等,在文本处理和字符串操作中经常会遇到。本文将介绍一些高效处理空格字符的方法,并附上相应的代码示例。方法一:使用strings包中的函数处理空格Golang的strings包提供了一些方便处理字符串的函数,其中包括处理空格字符的方

WPS打字后面自动出现空格怎么办?WPS打字后面自动出现空格取消方法
WPS打字后面自动出现空格怎么办?WPS打字后面自动出现空格取消方法

  wps是一款十分好用的办公软件,不过也有很多的用户们在问WPS打字后面自动出现空格怎么办?下面就让本站来为用户们来仔细的介绍一下WPS打字后面自动出现空格取消方法吧。  WPS打字后面自动出现空格取消方法  1、检查键盘设置:首先,检查一下键盘设置是否正常。有些键盘可能会有特殊功能键或快捷键,例如空格键可能会被设置为连续输入多个空格。确保键盘没有触发任何异常设置。  2、检查输入法设置:如果你使用了输入法软件,请检查其设置。某些输入法可能会有自动空格功能,需要手动关闭。进入输入法设置,找到相关的选项并

word为什么有空格却删的是字
word为什么有空格却删的是字

智能化的时代,word已经成为现实工作中最常用的办公软件,从电子代替手工,给大家解省了很多的工作时间,提高了工作效率。现在word文档的使用已经成为每个人基本要熟悉的操作软件。我们在运用word软件时会遇到各种各样的情况,我们在输入文档时,有时候需要在字的中间加空格,加了空格发现,空格加了,后面的字却被删除了。遇到这种情况怎么解决呢?请关看下面的课程。1、点击打开电脑桌面上的word软件,打开需要操作的文档。2、如图所示,想要在“万众一心”中间加上空格,但输入空格后发现后面的字就会被自动删除掉。这一般都可

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
Adobe Acrobat Pro macOS版
Adobe Acrobat Pro macOS版
Mac

Adobe Acrobat Pro 是面向办公、法务、财务、教育及出版用户的专业PDF处理软件,可在Mac上创建、编辑、转换、合并和保护文档,并提供OCR文字识别、表单、批注、内容比较、敏感信息遮盖及电子签名功能。

Blender
Blender
Windows、macOS 和 Linux

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

Shapr3D macOS版
Shapr3D macOS版
Mac

Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。

WINDOWS 更多
AutoCAD Windows版
AutoCAD Windows版
Windows

AutoCAD 是 Autodesk 推出的专业计算机辅助设计软件,Windows 版支持精确二维绘图、三维实体与曲面建模、图纸标注、布局发布和任务自动化,并包含多套行业专业化工具组合,适用于建筑、机械、电气、工程建设及制造设计人员。

Adobe Acrobat Pro Windows版
Adobe Acrobat Pro Windows版
Windows

Adobe Acrobat Pro 是面向专业 PDF 工作的综合解决方案,可在 Windows 中创建、编辑、转换、比较、整理和保护文档,并支持表单、电子签名、扫描件文字识别及敏感信息永久遮盖。订阅还包含网页、移动服务和云端协作能力,

Blender
Blender
Windows、macOS 和 Linux

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。