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