我認(rèn)為 Go 的成功歸功于這五個(gè)方面
大家好,我是煎魚(yú)。
在國(guó)外的播客節(jié)目 Go Time #100 中,Rob Pike 和 Robert Griesemer(Go 的兩位創(chuàng)始人)和主持人 Jerod Santo 討論了 Go 語(yǔ)言的成功緣由和一些思考。
如果你想創(chuàng)造一門(mén)成功的編程語(yǔ)言,向已經(jīng)做到的人學(xué)習(xí)是非常有價(jià)值的。
歡迎對(duì) Go 感興趣的小伙伴一起圍觀!
0. 說(shuō)明
Rob Pike(下稱(chēng):Rob)將 Go 的成功歸為了 5 個(gè)方面,在主持人 @Jerod Santo 的分享下形成了這篇《[1]》文章,與播客的內(nèi)容相對(duì)應(yīng)。
目錄如下:
- 他們寫(xiě)了一份正式的規(guī)范。
- 他們吸引了殺手級(jí)應(yīng)用。
- 他們啟動(dòng)了一個(gè)開(kāi)源社區(qū)。
- 他們使語(yǔ)言難以改變。
- 他們堅(jiān)持使用他們相信的功能。
1. 他們寫(xiě)了一份正式的規(guī)范
在介紹 Go 項(xiàng)目的起源時(shí),Rob:
" 這就是規(guī)范發(fā)生的時(shí)候。是的,幾個(gè)星期。所以我們真的開(kāi)始了六個(gè)月左右的頭腦風(fēng)暴和近似塑造。
我們做的第一件重要的事情——也許是我們做的第一件重要的事情 —— 是我們編寫(xiě)了語(yǔ)言的正式規(guī)范,我認(rèn)為這是項(xiàng)目成功的關(guān)鍵部分。
其中最重要的事情之一是 Ian Taylor 也在 Google,看到了規(guī)范,并決定為它編寫(xiě)一個(gè)編譯器。
有一天他走進(jìn)我們的辦公室說(shuō):“哦,順便說(shuō)一句,我已經(jīng)為你的語(yǔ)言編寫(xiě)了一個(gè)編譯器。” 那對(duì)我們來(lái)說(shuō)是一個(gè)了不起的時(shí)刻。
理所當(dāng)然,他成為了 Go團(tuán)隊(duì)的一員,現(xiàn)在仍在研究 Go。"
主持人:“該規(guī)范最初引起了 Ian Lance Taylor 等工程師同事的興趣”。
2. 他們吸引了殺手級(jí)應(yīng)用
不幸的是,Rob 并沒(méi)有說(shuō)明他們?cè)缙谑侨绾挝?Docker 的。我猜,通過(guò)使語(yǔ)言……對(duì)程序員有吸引力????♂?
Rob:“ 是的,Docker 是我們的殺手級(jí)應(yīng)用程序,因?yàn)樗怯?Go 編寫(xiě)的,運(yùn)行良好,并且成為現(xiàn)在所謂的云計(jì)算的核心……我們過(guò)去只稱(chēng)其為系統(tǒng)編程或服務(wù)器。
其中一項(xiàng)關(guān)鍵技術(shù)是用 Go 編寫(xiě)的,這一事實(shí)證明了該語(yǔ)言對(duì)很多人的目的是正確的……而且我認(rèn)為它實(shí)際上是一種非常好的語(yǔ)言。
這正是我們?cè)趯⒄Z(yǔ)言放在一起時(shí)正在考慮的事情,盡管我們自己并沒(méi)有這樣做。Kubernetes 是另外出現(xiàn)的,其誕生來(lái)自谷歌。但是,擁有用你的語(yǔ)言編寫(xiě)的重要軟件是用一種語(yǔ)言取得成功的一個(gè)非常重要的部分。
如果什么都沒(méi)有寫(xiě),那么語(yǔ)言有多好并不重要。”
3. 他們啟動(dòng)了一個(gè)開(kāi)源社區(qū)
Rob 坦率地談到了他們?cè)陂_(kāi)源世界中面臨的挑戰(zhàn),這令人耳目一新。
Rob:" 我確實(shí)認(rèn)為團(tuán)隊(duì)并沒(méi)有真正準(zhǔn)備好與開(kāi)源社區(qū)互動(dòng)以及這意味著什么。Ian 是我們當(dāng)中唯一一個(gè)在開(kāi)源世界中花費(fèi)大量時(shí)間的人,他所做的超出了他在社區(qū)工作中應(yīng)有的份額。
我們花了很長(zhǎng)時(shí)間才理解成為開(kāi)源社區(qū)的一部分意味著什么,擁有一個(gè)基本上由公司支付的項(xiàng)目,但有很多開(kāi)源貢獻(xiàn)者......我們實(shí)際上有很多很棒的開(kāi)源發(fā)展很早就發(fā)生了。Windows 的移植完全由外部貢獻(xiàn)者完成,這太棒了……社區(qū)的投入至關(guān)重要。
我認(rèn)為有時(shí)人們認(rèn)為谷歌控制它太多,這是他們的意見(jiàn),但我不同意;我認(rèn)為他們低估了團(tuán)隊(duì)對(duì)開(kāi)源社區(qū)所說(shuō)的話、閱讀所有問(wèn)題、處理得很好……有時(shí)不是很好,但最終它們都得到了修復(fù)。
當(dāng)有成千上萬(wàn)的人使用你的編程語(yǔ)言時(shí),這是一件非常具有挑戰(zhàn)性的事情,而現(xiàn)在它被認(rèn)為是世界上數(shù)百萬(wàn)的 Go 程序員。他們對(duì)這件事都有自己的看法,以及如何傾聽(tīng),但也要確保你保持項(xiàng)目的靈魂正確 —— 我認(rèn)為沒(méi)有任何簡(jiǎn)單的答案。
我認(rèn)為很多人認(rèn)為這是微不足道的,你只是接受了每個(gè)人都想要的東西......但是你不會(huì)有 Go,你會(huì)擁有完全不同的東西。這真的很棘手,這是一個(gè)非常困難的平衡行為。"
4. 他們使語(yǔ)言難以改變
這個(gè)一開(kāi)始有點(diǎn)違反直覺(jué)。通常對(duì)于軟件,延展性是一種美德,而僵化則是一種詛咒。然而,Rob 很好地解釋了為什么不這么做,對(duì)于像 Go 這樣的編程語(yǔ)言是多么的重要。
Rob:“好吧,我們很難改變。我們特意為 Go 1 寫(xiě)下了我們承諾不會(huì)改變?nèi)魏螙|西。這對(duì)語(yǔ)言的成功至關(guān)重要,因?yàn)樗蛊髽I(yè)能夠相信我們正在做的、依賴(lài)我們的 Go,并不會(huì)破壞他們的東西……這使得做出改變變得更加困難。我認(rèn)為很多人不欣賞我們對(duì)這份合同的熱情相信。
我們沒(méi)有破壞人們的程序,盡管它現(xiàn)在是一個(gè)有十年歷史的項(xiàng)目。這只是一個(gè)令人難以置信的負(fù)擔(dān),但讓我們到達(dá)現(xiàn)在的位置至關(guān)重要 ”
煎魚(yú):“這里指的是 Go1 兼容性保障,產(chǎn)生了很大的意義。
5. 他們堅(jiān)持使用他們相信的功能
當(dāng) Jon Calhoun 詢(xún)問(wèn)社區(qū)反饋以及團(tuán)隊(duì)對(duì)變革的抵制如何與之抗衡時(shí)。
Rob:"Go 的某些功能對(duì)其成功很重要,但人們并不喜歡,我們對(duì)此非常直言不諱。
我認(rèn)為您提到的未使用變量的編譯錯(cuò)誤就是其中之一。這很煩人 —— 你忘記刪除一個(gè)未使用的變量,你的程序就會(huì)無(wú)法編譯。但對(duì)我們來(lái)說(shuō),這是我們?cè)噲D講述的故事的一部分,也就是:編寫(xiě)一種盡可能保證更好代碼質(zhì)量的語(yǔ)言,即使我們無(wú)法阻止你編寫(xiě)糟糕的代碼……但我們可以確保不會(huì)讓你的構(gòu)建速度變慢或代碼更難維護(hù)的事情發(fā)生。
我認(rèn)為真正讓人們發(fā)瘋的是:你不允許導(dǎo)入你不使用的庫(kù)。這對(duì)我們來(lái)說(shuō)非常重要,因?yàn)槲覀兓撕芏鄷r(shí)間用大量二進(jìn)制文件進(jìn)行緩慢構(gòu)建,確保程序的依賴(lài)項(xiàng)正是您需要的,僅此而已;這對(duì)我們來(lái)說(shuō)非常重要,但對(duì)很多人來(lái)說(shuō),每次你進(jìn)行編輯并刪除打印語(yǔ)句或其他東西時(shí),編譯器都會(huì)說(shuō)“你沒(méi)有使用這個(gè)庫(kù)。我不會(huì)再繼續(xù)編譯你了。”
然后 Brad 寫(xiě)了一個(gè)叫做 goimports 的東西,它是 gofmt 的一個(gè)變種,可以為你管理導(dǎo)入,這幾乎消除了這類(lèi)抱怨。
通常情況下,自動(dòng)化可以解決很多抱怨。"























