Go 語言之父:四十年軟件開發(fā)巨變與 Go 的過去和未來
作者 | Evrone
譯者 | 無明
來源 | InfoQ
Rob Pike 是 Go 語言核心作者之一。本文是針對(duì) Rob 的一次專訪,話題涉及 Rob 四十年的職業(yè)生涯、Go 語言過去十年的發(fā)展及其未來。
現(xiàn)今的規(guī)模要大得多,不僅僅是計(jì)算機(jī)和網(wǎng)絡(luò),還有程序本身。所有的 Unix V6(大約發(fā)布于 1975 年)都可以輕而易舉地裝在一個(gè) RK05 磁盤(只有差不多 2MB 的存儲(chǔ)空間)中,還留出了大量的用戶空間。這是一個(gè)很好的計(jì)算環(huán)境,至少在當(dāng)時(shí)看起來是這樣的。
盡管還不是很確定,但在經(jīng)過十多年的發(fā)展之后,參數(shù)多態(tài)設(shè)計(jì)——也就是通常認(rèn)為的泛型,將在未來一兩年出現(xiàn)。為已有的語言找到一種合適的設(shè)計(jì)是個(gè)大難題,不過 Ian Lance Taylor(Go 語言另一位核心作者)在這個(gè)問題上投入了驚人的精力,現(xiàn)在看來答案已經(jīng)觸手可及了。
這將給庫、生態(tài)系統(tǒng)和社區(qū)帶來怎樣的影響?我們拭目以待。
我非常喜歡靜態(tài)類型,因?yàn)樗姆€(wěn)定性和安全性。
我非常喜歡動(dòng)態(tài)類型,因?yàn)樗o我?guī)砹藰啡ぁ?/p>
我不喜歡類型驅(qū)動(dòng)編程、類型層次、類和繼承。盡管有很多非常成功的項(xiàng)目都是通過這種方式構(gòu)建的,但我覺得這種方法將重要的決策過早地放在了設(shè)計(jì)階段。換句話說,我更喜歡組合,而不是繼承。
不過我要對(duì)那些喜歡使用繼承的人說:不要在意我所說的,請(qǐng)繼續(xù)使用你認(rèn)為有效的方式。
最大的意外是我們得知 Go 語言被用來編寫惡意軟件。你無法控制誰會(huì)使用你的東西或者他們會(huì)用它做些什么。
我來自一個(gè)早于 IDE 出現(xiàn)的時(shí)代。在 Go 語言項(xiàng)目的早期,我們討論過 Go 語言是否需要借助 IDE 才能獲得成功。但當(dāng)時(shí)團(tuán)隊(duì)中沒有人具備開發(fā) IDE 的技能,所以我們沒有嘗試去開發(fā)一個(gè) IDE。不過,我們確實(shí)開發(fā)了可用來解析和打印 Go 語言代碼的庫,并很快成為各種編輯器和 IDE 插件的基礎(chǔ),這是一個(gè)意外的成功。
最近,我們一直在努力開發(fā)一個(gè)叫作 gopls 的 Go LSP 服務(wù)器,任何支持該協(xié)議的編輯器或 IDE 都可以用它來改善 Go 語言編程體驗(yàn)。
或許是因?yàn)槲覀兞?xí)慣使用簡單的編輯器樣式,所以我們確信 Go 語言開發(fā)人員在編程環(huán)境方面也不需要做很多繁重的工作。不過,IDE 確實(shí)可以提供一些幫助:我看到的大多數(shù) Go 語言開發(fā)人員都使用了 IDE,或者至少是支持 Go 語言的編輯器,并從中獲得了很多好處。
使用什么樣的編輯器是一個(gè)個(gè)人偏好問題,取決于你使用的編程語言。
Go 語言是一種通用的編程語言。你可以用它開發(fā)你想要的東西,而不用擔(dān)心語言會(huì)被固定在一個(gè)問題領(lǐng)域。
開發(fā) Go 語言的經(jīng)歷讓我明白了人們喜歡對(duì)編程語言發(fā)表意見。我自己也確實(shí)這樣,但我已經(jīng)厭倦了這種消極的結(jié)果,所以現(xiàn)在我盡量避免去評(píng)判它們。
在過去的 10 年里,語言設(shè)計(jì)領(lǐng)域出現(xiàn)了真正的復(fù)興,而在此之前,很少有新編程語言出現(xiàn)并獲得成功。我很高興看到這些以及它們所帶來的創(chuàng)新。
谷歌對(duì) Go 語言項(xiàng)目的支持是非??犊?,我非常感謝它。當(dāng)然,Go 語言的出現(xiàn)是因?yàn)槲覀冋J(rèn)為谷歌需要它,云計(jì)算需要一種支持并發(fā)和易于部署的編程語言。不過,谷歌并沒有太過直接插手這個(gè)項(xiàng)目,它支持我們,讓我們做我們認(rèn)為是對(duì)的事情。
對(duì)于其他公司和用戶來說,社區(qū)輸入是了解項(xiàng)目進(jìn)展(語言、編譯器、工具、運(yùn)行時(shí)、庫、環(huán)境)的關(guān)鍵組成部分。
我想說兩件事,一個(gè)是技術(shù)上的,一個(gè)是政治上的。
從技術(shù)方面說,Go 語言支持并發(fā)計(jì)算。Go 語言只有十年左右的歷史,但在它誕生之初,“線程”和并發(fā)并沒有在編程社區(qū)得到廣泛的重視。事實(shí)上,開發(fā) Go 語言的一個(gè)主要原因是當(dāng)時(shí)在 C++ 中執(zhí)行并發(fā)計(jì)算比較困難。在項(xiàng)目啟動(dòng)后不久,對(duì)并發(fā)性的支持成了一個(gè)明顯的優(yōu)勢,彌補(bǔ)了其他方面的不足。人們看到并發(fā)性的優(yōu)勢之后,他們就開始探索語言的其他方面,然后進(jìn)一步了解到更多的東西。所以,對(duì)并發(fā)的支持是一道很重要的關(guān)口。
正如 Cloudflare 的 John Graham-Cumming 所言,“我是為了并發(fā)而來,為了組合而留”。
Go 語言改變了多核計(jì)算編程。
從政治方面說,我們兌現(xiàn)了對(duì) Go 1.0 兼容性的承諾。在使用了幾年 Go 語言之后,我們有一長串需要修復(fù)的東西,而且都是重大的變更。我們開發(fā)了一個(gè)更新程序,用“go fix”命令來推動(dòng)社區(qū),然后我們就停了下來。這種穩(wěn)定性——2012 年編寫的 Go 程序到今天仍然可以完美地編譯和運(yùn)行——是 Go 語言發(fā)展的一股巨大的推動(dòng)力。其他公司可以非常自信地使用 Go 語言,相信我們不會(huì)對(duì)他們的程序造成破壞。在 1.0 和兼容性承諾兌現(xiàn)之后,使用率得到顯著的提高。
避免倦怠的最好方法是在一個(gè)可以為你提供支持的環(huán)境中做你真正喜歡做的事情。在我的整個(gè)職業(yè)生涯中,我非常幸運(yùn),但并不是每個(gè)人都像我一樣幸運(yùn)。如果你感到工作壓力很大,你應(yīng)該放松一下,或者改變一下方向,尤其是當(dāng)下這種情況。
幾年前,Danny Berkholz 說 Go 語言是“云基礎(chǔ)設(shè)施的新興語言”,這并非偶然。Go 語言是谷歌員工設(shè)計(jì)的,目的是讓谷歌相關(guān)程序的開發(fā)變得更容易,尤其是部署在聯(lián)網(wǎng)服務(wù)器上的程序,也就是我們今天所說的“云”。
因此,看到一些使用 Go 語言開發(fā)的云計(jì)算組件(Docker、Kubernetes 等),我們感到欣慰,但并不會(huì)很驚訝。Go 語言確實(shí)已經(jīng)成為云基礎(chǔ)設(shè)施事實(shí)上的編程語言。
Rust 是一種有趣的編程語言,我饒有興趣地關(guān)注著它的發(fā)展。除此之外,我沒有其他意見,就像我上面說的那樣。
我們?cè)诟鞣N會(huì)議和社交媒體上遇到的人是 Go 語言發(fā)展的關(guān)鍵組成部分。很多貢獻(xiàn)者以積極的方式影響著語言的發(fā)展,包括最初移植到 Windows 和非 x86 架構(gòu)、工具和庫的開發(fā)、對(duì)技術(shù)建議的深入討論,等等。
當(dāng) Go 開發(fā)團(tuán)隊(duì)參與到社區(qū),參與討論、提出問題、尋求幫助和指導(dǎo),就走向了另一個(gè)方向。
有一件事我認(rèn)為很重要,那就是讓社區(qū)的聲音保持統(tǒng)一,讓社區(qū)成為一個(gè)團(tuán)隊(duì),而不只是個(gè)體。一致的信息更容易理解。
需要說明的是,我是一個(gè)聯(lián)合作者。Ken Thompson 和 Robert Griesemer 和我一起啟動(dòng)了這個(gè)項(xiàng)目,還有其他很多人也為項(xiàng)目做了巨大貢獻(xiàn),所以請(qǐng)不要把我當(dāng)成“作者”。
Go 語言確實(shí)提高了我的公眾形象,讓我被一個(gè)新的充滿活力的社區(qū)所認(rèn)識(shí)。但除此之外,并沒有太大的影響。在漫長的職業(yè)生涯中,我有過很多成功的經(jīng)歷(也有無數(shù)次的失敗)。
很簡單,忽略那些討厭你的人。只需要傾聽那些理解你的目標(biāo)的聲音,他們才是你需要關(guān)心的人。不是每個(gè)人都認(rèn)同你所做的,不過這沒關(guān)系,那些參與推進(jìn)你正在嘗試做的事情的人是一個(gè)極好的想法、能量和靈感的來源。
我們將永遠(yuǎn)感謝這個(gè)充滿激情的社區(qū)。
參考閱讀:
https://evrone.com/rob-pike-interview
-END-
推薦閱讀
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請(qǐng)聯(lián)系我們,謝謝!






