电竞比分网-中国电竞赛事及体育赛事平台

關(guān)于ZAKER Skills 合作
差評(píng) 1小時(shí)前

為一個(gè)看不見(jiàn)的東西,程序員因吵了半個(gè)世紀(jì)。

前段時(shí)間,微軟退役老兵 Raymond Chen 在他的博客上翻出了一段舊事:

當(dāng)年微軟和 IBM 合作開(kāi)發(fā) OS/2 操作系統(tǒng)時(shí),兩邊因?yàn)橐粋€(gè)按鍵吵了起來(lái)。

在對(duì)話框里,用戶按哪個(gè)鍵從一個(gè)輸入框跳到下一個(gè)?微軟說(shuō)用 Tab,IBM 不同意,然后一級(jí)一級(jí)往上升級(jí),升了七層,一直升到副總裁,要求微軟也派同級(jí)別高管來(lái)確認(rèn)。

微軟這邊回了一句:"Bill Gates's mother is not interested in the TAB key." 意思是比爾 · 蓋茨上面就剩他媽了,難道比爾 · 蓋茨他媽也要來(lái)討論 Tab 鍵嗎?

一個(gè)按鍵而已,能讓兩家巨頭公司鬧到高管對(duì)線。

但實(shí)際上,相比 "Tab 要不要用來(lái)切換字段 " 這種小打小鬧,圍繞它還有一場(chǎng)更大的戰(zhàn)爭(zhēng):寫(xiě)代碼的時(shí)候,縮進(jìn)到底該用 Tab,還是用空格?

這問(wèn)題聽(tīng)著跟 " 你吃飯用左手還是右手 " 一樣無(wú)聊。但就這么個(gè)破事兒,全世界最聰明的一幫人,為它撕了整整半個(gè)世紀(jì)。甚至比馮諾依曼派和圖靈派的吵吵還要早。

因?yàn)檫@事兒,得從打字機(jī)說(shuō)起。Tab 鍵最早在打字機(jī)上就有了,本職就是替空格干縮進(jìn)的活,省得打字員一格一格戳到手腕報(bào)廢。

但到了計(jì)算機(jī)時(shí)代,存儲(chǔ)是按 KB 的。同樣縮進(jìn) 4 層,空格要 16 個(gè)字符,Tab 只要 4 個(gè),省出來(lái)的全是白花花的銀子。

所以早期終端直接把 Tab 定成 8 個(gè)字符寬。從 1969 年的 TOPS-10 到 1974 年的 VT52,Tab 永遠(yuǎn) 8 個(gè)字符寬。甚至在 ASCII 里, Tab 和 Space 也有著完全不同的定義,一個(gè)是控制字符,另一個(gè)是可打印字符,老祖宗定的規(guī)矩,沒(méi)的商量。

直到 1978 年,VT100 終端把 Tab 寬度第一次變成了可以自定義的,這下壞了。

因?yàn)榇蠹液芸炀桶l(fā)現(xiàn),我擦,你的 Tab 是 4 個(gè)字符寬,我的是 8 個(gè),他的是 2 個(gè)。你電腦上排好的代碼,到我屏幕上一開(kāi)就全亂了,那找誰(shuí)說(shuō)理去?

所以為了應(yīng)對(duì)混亂的 Tab 字符,空格黨正式登上了舞臺(tái),因?yàn)樗麄兊恼摀?jù)非常簡(jiǎn)單白給:" 用空格,到哪兒都一樣啊。"

本來(lái)吧你樂(lè)意用 tab 就用,喜歡到哪兒都一樣就用空格,也沒(méi)人攔著。但真正把技術(shù)分歧升級(jí)成宗教戰(zhàn)爭(zhēng)的,是因?yàn)閮蓚€(gè)男人堂堂登場(chǎng)。

第一位上場(chǎng)的選手,就是鼎鼎大名的Linux 之父:萊納斯 · 托瓦茲。

這老小子不僅是 Tab 黨,而且是純純的原教旨主義者,畢竟 Linux 內(nèi)核編碼規(guī)范的第一章,就是這么寫(xiě)的:

" 制表符是 8 個(gè)字符,因此縮進(jìn)也是 8 個(gè)字符。有些異端運(yùn)動(dòng)試圖將縮進(jìn)設(shè)為 4 個(gè)甚至 2 個(gè)字符深,這無(wú)異于試圖將圓周率定義為 3。"

這尼瑪,敢情人家空格黨要有兩棟高樓,他得是恨不得親自開(kāi)飛機(jī)的那種。

但人家這倒也不是在耍流氓。他的邏輯是:8 字符縮進(jìn),一行 80 個(gè)字符就滿了,你最多嵌套 3 層,超過(guò) 3 層說(shuō)明代碼寫(xiě)爛了啊。你的代碼縮進(jìn)到第四層出了問(wèn)題,那不是 Tab 的問(wèn)題,是你的問(wèn)題。

所以有句名言至今流傳:" 如果你的代碼需要超過(guò) 3 層縮進(jìn),那你已經(jīng)完蛋了,去修你的程序吧。"

但問(wèn)題是,空格黨也有高手。這邊派出的就是:Python 之父,吉多 · 范羅蘇姆。

和 Linux 相比,這哥們就走了完全相反的路,Python 把縮進(jìn)變成了一種語(yǔ)法。

你不縮進(jìn),代碼就跑不了,因?yàn)榻忉屍骺繑?shù)你每行前面有幾個(gè)空白字符來(lái)判斷代碼結(jié)構(gòu),如果團(tuán)隊(duì)里有人用 Tab 有人用空格,那直接就報(bào)錯(cuò)了。

實(shí)際上,吉多早期其實(shí)也想推 Tab,但社區(qū)反饋實(shí)在是一言難盡。

跟前面的終端問(wèn)題類似,由于不同編輯器對(duì) Tab 轉(zhuǎn)空格的默認(rèn)行為完全不一樣,你的代碼一跨平臺(tái)就直接炸了。

所以為了保全自己的戶口本不被社區(qū) Aoe,最終他決定:所有人全部用 4 個(gè)空格,不許混用!

緊接著他制定的 PEP 8 也成了 Python 憲法,空格也就成了 Python 黨的絕對(duì)信仰。

其實(shí)本來(lái)吧,同樣是為了解決代碼問(wèn)題,一個(gè)是用暴力縮進(jìn)倒逼代碼架構(gòu),一個(gè)用絕對(duì)空格換取跨平臺(tái)安全。底層邏輯都差不多,但思路不一樣,結(jié)果就大有不同。

再加上兩方大佬站臺(tái),就跟封神榜似的。元始天尊通天教主都發(fā)話了,那還說(shuō)啥了。

于是從上世紀(jì)末到最近幾年,這 tab 黨和空格黨就跟闡教截教一樣,大家就互毆吧。

舉個(gè)例子,在 HBO 神劇《硅谷》里,男主發(fā)現(xiàn)女朋友用空格,當(dāng)場(chǎng)就崩潰了沖出家門(mén),破口大罵說(shuō) " 我絕不可能和一個(gè)用空格代替制表符的人在一起。"

嘖嘖,這劇組技術(shù)顧問(wèn)是 Google 的開(kāi)源總監(jiān),這段的靈感還真就來(lái)自程序員的真實(shí)吐槽。

還有在 2017 年,Stack Overflow 的數(shù)據(jù)科學(xué)家也是看熱鬧不嫌事大,直接拱火說(shuō)哥們分析幾十萬(wàn)份數(shù)據(jù)后發(fā)現(xiàn),用空格的程序員平均薪資比用 Tab 的高 8.6%,這事還上了 BBC。

你們空格黨怎么還薪資歧視啊喂!職場(chǎng)霸凌!

不過(guò)后來(lái)真相查明出來(lái),不是用空格讓你變有錢(qián)了,而是有錢(qián)的公司逼你用空格。

因?yàn)楦咝饺后w大多供職于工程規(guī)范嚴(yán)格的大廠,在幾百人協(xié)作的代碼庫(kù)里,空格的 " 絕對(duì)一致性 " 確實(shí)最省心。

說(shuō)白了,縮進(jìn)方式本質(zhì)上是個(gè)變量,代表的不是編程能力,而是你所處的工程環(huán)境有多成熟。

那么講到這,那最后空格黨和 tab 黨誰(shuí)贏了呢?

直接說(shuō)結(jié)論,雖然沒(méi)分出勝負(fù),但是 tab 黨在道德上占據(jù)了上風(fēng)。

這倒不是因?yàn)樗缂t,而是一群大家壓根沒(méi)想過(guò)的人:盲人程序員。

由于他們靠盲文顯示器寫(xiě)代碼,盲文面板通常只有 40 個(gè)字符格。4 空格縮進(jìn)嵌套 3 層就是 12 格,那么 30% 的物理空間就浪費(fèi)在空白上,手指摸一圈發(fā)現(xiàn)沒(méi)摸到多少代碼內(nèi)容。而 Tab 一層只占一格,3 層嵌套就 3 格。

所以這下,Tab 在道德層面就直接封神了,因?yàn)榭崭顸h追求的 " 一致性 ",本質(zhì)上假設(shè)每個(gè)人都有完美視力和標(biāo)準(zhǔn)顯示器,但世界上還有很多人不是這樣的。

但空格黨也沒(méi)有因此投降,畢竟裝個(gè)適配插件就能折疊空格縮進(jìn)的事,技術(shù)問(wèn)題終歸可以用技術(shù)解決。

同樣的,隨著 2017 年 EditorConfig、Prettier 這類格式化工具的出現(xiàn),這些手工敲代碼的爭(zhēng)論也被技術(shù)改進(jìn)逐漸平息。這些工具默認(rèn)不用 Tab,但也支持,并且會(huì)用 Tab 縮進(jìn)、空格對(duì)齊的 SmartTabs 思路。

所以空格還是 tab,越來(lái)越變成了一種文化上的身份認(rèn)同。

弗洛伊德 1917 年提出過(guò)一個(gè)概念,叫 " 微小差異的自戀 "。

說(shuō)兩個(gè)群體越相似,越會(huì)對(duì)彼此一丁點(diǎn)不同的地方抓狂。所有程序員面對(duì)的壓力幾乎一樣:改不完的需求、查不盡的 Bug、半夜三點(diǎn)的報(bào)警,發(fā)際線曲線都高度重合。正因?yàn)樘窳?,才需要找一個(gè)微小差異來(lái)證明—— " 我跟你不一樣 "。

無(wú)論是簡(jiǎn)約頭像還是動(dòng)漫頭像,格子衫還是女裝,Tab 還是空格,這都早就不是工程決策了,本質(zhì)是極客世界里的部落圖騰。

這種古已有之的爭(zhēng)論,靠人類自己,是永遠(yuǎn)分不出勝負(fù)的。

但隨著 AI 時(shí)代的到來(lái),分不分其實(shí)也沒(méi)有什么意義。

2026 年,Claude Code 的創(chuàng)造者鮑里斯 · 切爾尼說(shuō):" 我們公司已經(jīng)沒(méi)有任何手寫(xiě)代碼了 ",并預(yù)言 " 軟件工程師 " 這個(gè)頭銜,2026 年就會(huì)開(kāi)始消失。 以后每個(gè)人都是會(huì)寫(xiě)需求的產(chǎn)品經(jīng)理,代碼的事兒交給 Agent。

當(dāng) AI 幫你寫(xiě)代碼的時(shí)候,它遵守的是項(xiàng)目配置文件。至于縮進(jìn)用什么?

隨便。反正不是人敲的。

這好比你費(fèi)了半天勁爭(zhēng)論毛筆該用羊毫還是狼毫,結(jié)果抬頭一看,大家都用打印機(jī)了。

也許再過(guò)二十年," 你用 Tab 還是空格 " 也會(huì)和 " 羊毫還是狼毫 " 一樣,成為古法編程時(shí)代的非遺談資。

老程序員們坐在一起喝酒,聊起當(dāng)年為了一個(gè)看不見(jiàn)的字符差點(diǎn)跟同事絕交,就像老木匠聊起刨子該推還是該拉吵得不可開(kāi)交。

手藝還是好手藝。只是用得上的人,越來(lái)越少了。

撰文:納西

編輯:江江 & 面線

美編:素描

圖片、資料來(lái)源

the register,Github 等,部分圖源網(wǎng)絡(luò)

相關(guān)標(biāo)簽

相關(guān)閱讀

最新評(píng)論

沒(méi)有更多評(píng)論了

覺(jué)得文章不錯(cuò),微信掃描分享好友

掃碼分享

企業(yè)資訊

查看更多內(nèi)容