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