下載「 極客時間 」App,,收聽完整版音頻。 上個月,,作為 Go 語言的三位創(chuàng)始人之一,,Unix 老牌黑客羅勃·派克(Rob Pike)在新文章“Go: Ten years and climbing”中,回顧了一下 Go 語言的發(fā)展過程,。其中提到,,Go 語言這十年的迅猛發(fā)展大到連他們自己都沒有想到,并且還成為了云計算領(lǐng)域中新一代的開發(fā)語言,。還提到了,,中國程序員對 Go 語言的熱愛完全超出了他們的想象,甚至他們都不敢相信是真的,。 這讓我想起,,我在 2015 年 5 月份拜訪 Docker 公司在灣區(qū)的總部時,Docker 負(fù)責(zé)人也和我表達(dá)了相似的感嘆:他們完全沒有想到居然中國有那么多人喜歡 Docker,,而且還有這么多人在為 Docker 做貢獻(xiàn),,這讓他們感到非常意外。此外,,還跟我說,,中國是除了美國本土之外的另外一個如此喜歡 Docker 技術(shù)的國家,在其它國家都沒有看到,。 的確如他們所說,,Go 語言和 Docker 這兩種技術(shù)已經(jīng)成為新一代的云計算技術(shù),,而且可以看到其發(fā)展態(tài)勢非常迅猛。而中國也成為了像美國一樣在強力推動這兩種技術(shù)的國家,。這的確是一件讓人感到非常高興的事,,因為中國在跟隨時代潮流這件事上已經(jīng)做得非常不錯了。 然而,,從 2014-2015 年我在阿里推動 Docker 和 Go 語言的痛苦和失敗過程中,,以及這許多年來,有很多很多人問我是否要學(xué) Go 語言,,是否要學(xué) Docker,,Go 和 Docker 是否能用在生產(chǎn)線上,這些問題看來,,對于 Go 語言和 Docker 這兩種技術(shù),,在國內(nèi)的技術(shù)圈中有相當(dāng)大的一部分人和群體還在執(zhí)觀望或是不信任的態(tài)度。 所以,,我想寫這篇文章,,從兩個方面來論述一下我的觀點和看法。
這兩個問題是相輔相成的,所以我會把這兩個問題揉在一起談,。 雖然 Go 語言是在 2009 年底開源的,,但我是從 2012 年才開始接觸和學(xué)習(xí) Go 語言的。我只花了一個周末兩天的時間就學(xué)完了,,而且在這兩天,,我還很快地寫出了一個能工作很好的網(wǎng)頁爬蟲程序,以及一個簡單的高并發(fā)文件處理服務(wù),,用于提取前面抓取的網(wǎng)頁的關(guān)鍵內(nèi)容,。這兩個程序都很簡單,總共才寫了不到 500 行代碼,。 我當(dāng)時對 Go 語言有幾點體會,。 第一,語言簡單,,上手快 。Go 語言的語法特性簡直是太簡單了,,簡單到你幾乎玩不出什么花招,,直來直去的,,學(xué)習(xí)曲線很低,上手非???。 第二,并行和異步編程幾乎無痛點 ,。Go 語言的 Goroutine 和 Channel 這兩個神器簡直就是并發(fā)和異步編程的巨大福音,。像 C、C++,、Java,、Python 和 JavaScript 這些語言的并發(fā)和異步方式太控制就比較復(fù)雜了,而且容易出錯,,而 Go 解決這個問題非常地優(yōu)雅和流暢,。這對于編程多年受盡并發(fā)和異步折磨的我來說,完全就是讓我眼前一亮的感覺,。 (圖片來自 Medium:Why should you learn Go?) 第三,,Go 語言的 lib 庫麻雀雖小五臟俱全 。Go 語言的 lib 庫中基本上有絕大多數(shù)常用的庫,,雖然有些庫還不是很好,,但我覺得不是問題,因為我相信在未來的發(fā)展中會把這些問題解決掉,。 第四,,C 語言的理念和 Python 的姿態(tài) 。C 語言的理念是信任程序員,,保持語言的小巧,,不屏蔽底層且底層友好,關(guān)注語言的執(zhí)行效率和性能,。而 Python 的姿態(tài)是用盡量少的代碼完成盡量多的事,。于是我能夠感覺到,Go 語言想要把 C 和 Python 統(tǒng)一起來,,這是多棒的一件事啊,。 (圖片來自 Medium:Why should you learn Go?) 所以,即便 Go 語言存在諸多的問題,,比如垃圾回收,、異常處理、泛型編程等,,但相較于上面這幾個優(yōu)勢,,我認(rèn)為這些問題都是些小問題。于是就毫不猶豫地入坑了,。 當(dāng)然,,一個技術(shù)能不能發(fā)展起來,,關(guān)鍵還要看三點。
上述的這三點是非常關(guān)鍵的,新的技術(shù)只需要占到其中一到兩點就已經(jīng)很不錯了,,何況有的技術(shù),,比如 Java,是三點全占到了,,所以,,Java 的發(fā)展是如此好。當(dāng)然,,除了上面這三點重要的,,還有一些其它的影響因素,比如:
用這些標(biāo)尺來量一下 Go 語言,我們可以清楚地看到:
所以,Go 語言的未來是不可限量的,。當(dāng)然,,我個人覺得,Go 可能會吞食很多 C,、C++,、Java 的項目。不過,,Go 語言所吞食主要的項目應(yīng)該是中間層的項目,,既不是非常底層也不會是業(yè)務(wù)層。 也就是說,,Go 語言不會吞食底層到 C 和 C++ 那個級別的,,也不會吞食到高層如 Java 業(yè)務(wù)層的項目。Go 語言能吞食的一定是 PaaS 上的項目,,比如一些消息緩存中間件,、服務(wù)發(fā)現(xiàn)、服務(wù)代理,、控制系統(tǒng),、Agent、日志收集等等,,沒有復(fù)雜的業(yè)務(wù)場景,,也到不了特別底層(如操作系統(tǒng))的中間平臺層的軟件項目或工具。而 C 和 C++ 會被打到更底層,,Java 會被打到更上層的業(yè)務(wù)層,。這是我的一個判斷。 好了,,我們再用上面的標(biāo)尺來量一下 Go 語言的殺手級應(yīng)用 Docker,,你會發(fā)現(xiàn)基本是一樣的。
所以,早在 3,、4 年前我就覺得 Docker 一定會是未來的技術(shù),。雖然當(dāng)時的坑兒還很多,但是,,相對于這些大的因素來說,,那些小坑兒都不是問題。只是需要一些時間,,這些小坑兒在未來 5-10 年就可以完全被填平了,。 同樣,我們可以看到 Kubernetes 作為服務(wù)和容器調(diào)度的關(guān)鍵技術(shù)一定會是最后的贏家,。這點我在去年初就能夠很明顯地感覺到了,。 關(guān)于 Docker 我還想多說幾句,這是云計算中 PaaS 的關(guān)鍵技術(shù),,雖然,,這世上在出現(xiàn) Docker 之前,幾乎所有的要玩公有 PaaS 的公司和產(chǎn)品都玩不起來,,比如:Google 的 GAE,,國內(nèi)的各種 XAE,如淘寶的 TAE,,新浪的 SAE 等,。但我還是想說,PaaS 是一個被世界或是被產(chǎn)業(yè)界嚴(yán)重低估的平臺,。 PaaS 層是承上啟下的關(guān)鍵技術(shù),,任何一個不重視 PaaS 的公司,其技術(shù)架構(gòu)都不可能讓這家公司成長為一個大型的公司,。因為 PaaS 層的技術(shù)主要能解決下面這些問題,。
老實說,,這些問題的關(guān)鍵程度已經(jīng)到了能判斷一家依托技術(shù)的公司的研發(fā)能力是否靠譜的程度。沒有這些技術(shù),,依托技術(shù)拓展業(yè)務(wù)的公司幾乎沒有可能發(fā)展得規(guī)模很大,。 在后面,我會另外寫幾篇文章詳細(xì)地講一下分布式服務(wù)化和 PaaS 平臺的重要程度,。 最后,,我還要說一下,為什么要早一點地進(jìn)入這些新技術(shù),,而不是等待這些技術(shù)成熟了后再進(jìn)入,。原因有這么幾個。
從中,我看到了非常具體的各種思潮和思路,,這些東西比起 Go 和 Docker 來說更有價值,。因為,這不但讓我重新思考我已掌握的技術(shù)以及如何更好地解決已有的問題,,而且還讓我看到了未來,。我不但有了技術(shù)優(yōu)勢,而且這些知識還讓我的技術(shù)生涯多了很多的可能性,。
一個公司或是個人能夠占有技術(shù)先機,,就會比其它公司或個人有更大的影響力,。一旦未來行業(yè)需求引爆,那么這個公司或是個人的影響力就會形成一個比較大的護(hù)城河,,并可以快速地產(chǎn)生經(jīng)濟(jì)利益,。 近期,在與中國移動,、中國電信以及一些股份制銀行進(jìn)行交流的過程中,,我已看到通訊行業(yè)、金融行業(yè)對于 PaaS 平臺的理解已經(jīng)超過了互聯(lián)網(wǎng)公司,,而我近 3 年來在這些技術(shù)上的研究讓我也從中受益非淺,。 所以,Go 語和 Docker 作為 PaaS 平臺的關(guān)鍵技術(shù)前途是無限的,,我很慶幸趕上了這個浪潮,,也很慶幸在 3 年前我就看到了這個趨勢,現(xiàn)在我也在用這些技術(shù)開發(fā)相關(guān)的技術(shù)產(chǎn)品,,助力于為高速成長的公司提供這些關(guān)鍵技術(shù),。 注:本文摘自陳皓(左耳朵耗子)在極客時間App開設(shè)的付費專欄“左耳聽風(fēng)”,更多文章請掃描下圖二維碼,。 陳皓特意選擇“洞悉技術(shù)的本質(zhì),,享受科技的樂趣”作為專欄的Slogan,意在幫助讀者拓寬思維,、開闊視野,,并能在技術(shù)工作中找到一種快樂的感覺。專欄的內(nèi)容設(shè)置具體如下:
|
|