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