左耳朵耗子:谈谈Go语言、Docker和新技术
更多左耳朵耗子的獨家干貨,請訂閱極客時間出品的陳皓全年專欄《左耳聽風》,一次訂閱、永久閱讀。即日起,戳此訂閱立享以下兩大福利:
\\福利一:原價 ¥199/年,極客時間新用戶注冊立減 ¥30
\\福利二:每邀請一位好友購買,你可獲得36元現金返現,多邀多得,上不封頂,立即提現(提現流程:極客時間服務號-我的-現金獎勵提現)
\\上個月,作為Go語言的三位創始人之一,Unix老牌黑客羅勃·派克(Rob Pike)在新文章“Go: Ten years and climbing”中,回顧了一下Go語言的發展過程。其中提到,Go語言這十年的迅猛發展大到連他們自己都沒有想到,并且還成為了云計算領域中新一代的開發語言。還提到了,中國程序員對Go語言的熱愛完全超出了他們的想象,甚至他們都不敢相信是真的。
\\這讓我想起,我在2015年5月份拜訪Docker公司在灣區的總部時,Docker負責人也和我表達了相似的感嘆:他們完全沒有想到居然中國有那么多人喜歡Docker,而且還有這么多人在為Docker做貢獻,這讓他們感到非常意外。此外,還跟我說,中國是除了美國本土之外的另外一個如此喜歡Docker技術的國家,在其它國家都沒有看到。
\\的確如他們所說,Go語言和Docker這兩種技術已經成為新一代的云計算技術,而且可以看到其發展態勢非常迅猛。而中國也成為了像美國一樣在強力推動這兩種技術的國家。這的確是一件讓人感到非常高興的事,因為中國在跟隨時代潮流這件事上已經做得非常不錯了。
\\然而,從2014-2015年我在阿里推動Docker和Go語言的痛苦和失敗過程中,以及這許多年來,有很多很多人問我是否要學Go語言,是否要學Docker,Go和Docker是否能用在生產線上,這些問題看來,對于Go語言和Docker這兩種技術,在國內的技術圈中有相當大的一部分人和群體還在執觀望或是不信任的態度。
\\所以,我想寫這篇文章,從兩個方面來論述一下我的觀點和看法。
\\- \\t
一個方面,為什么Go語言和Docker會是新一代的云計算技術。
\\t\\t - \\t
另一個方面,作為技術人員,我們如何識別什么樣的新技術會是未來的趨勢。
\\t\
這兩個問題是相輔相成的,所以我會把這兩個問題揉在一起談。
\\雖然Go語言是在2009年底開源的,但我是從2012年才開始接觸和學習Go語言的。我只花了一個周末兩天的時間就學完了,而且在這兩天,我還很快地寫出了一個能工作很好的網頁爬蟲程序,以及一個簡單的高并發文件處理服務,用于提取前面抓取的網頁的關鍵內容。這兩個程序都很簡單,總共才寫了不到500行代碼。
\\我當時對Go語言有幾點體會。
\\第一,語言簡單,上手快。Go語言的語法特性簡直是太簡單了,簡單到你幾乎玩不出什么花招,直來直去的,學習曲線很低,上手非常快。
\\第二,并行和異步編程幾乎無痛點。Go語言的Goroutine和Channel這兩個神器簡直就是并發和異步編程的巨大福音。像C、C++、Java、Python和JavaScript這些語言的并發和異步方式太控制就比較復雜了,而且容易出錯,而Go解決這個問題非常地優雅和流暢。這對于編程多年受盡并發和異步折磨的我來說,完全就是讓我眼前一亮的感覺。
\\
\(圖片來自Medium:Why should you learn Go?)
第三,Go語言的lib庫麻雀雖小五臟俱全。Go語言的lib庫中基本上有絕大多數常用的庫,雖然有些庫還不是很好,但我覺得不是問題,因為我相信在未來的發展中會把這些問題解決掉。
\\第四,C語言的理念和Python的姿態。C語言的理念是信任程序員,保持語言的小巧,不屏蔽底層且底層友好,關注語言的執行效率和性能。而Python的姿態是用盡量少的代碼完成盡量多的事。于是我能夠感覺到,Go語言想要把C和Python統一起來,這是多棒的一件事啊。
\\
\(圖片來自Medium:Why should you learn Go?)
所以,即便Go語言存在諸多的問題,比如垃圾回收、異常處理、泛型編程等,但相較于上面這幾個優勢,我認為這些問題都是些小問題。于是就毫不猶豫地入坑了。
\\當然,一個技術能不能發展起來,關鍵還要看三點。
\\- \\t
有沒有一個比較好的社區。像C、C++、Java、Python和JavaScript的生態圈都是非常豐富和火爆的。尤其是有很多商業機構參與的社區那就更為人氣爆棚了,比如Linux的社區。
\\t\\t - \\t
有沒有一個工業化的標準。像C、C++、Java都是有標準化組織的。尤其是Java,其在架構上還搞出了像J2EE這樣的企業級標準。
\\t\\t - \\t
有沒有一個或多個殺手級應用。C、C++和Java的殺手級應用不用多說了,就算是對于PHP這樣還不能算是一個好的編程語言來說,因為是Linux時代的第一個殺手級解決方案LAMP中的關鍵技術,所以,也發展起來了。
\\t\
上述的這三點是非常關鍵的,新的技術只需要占到其中一到兩點就已經很不錯了,何況有的技術,比如Java,是三點全占到了,所以,Java的發展是如此好。當然,除了上面這三點重要的,還有一些其它的影響因素,比如:
\\- 學習曲線是否低,上手是否快。這點非常重要,C++在這點上越做越不好了。\\t
- 有沒有一個不錯的提高開發效率的開發框架。如:Java的Spring框架,C++的STL等。\\t
- 是否有一個或多個巨型的技術公司作為后盾。如:Java和Linux后面的IBM、Sun……\\t
- 有沒有解決軟件開發中的痛點。如:Java解決了C和C++的內存管理問題。\
用這些標尺來量一下Go語言,我們可以清楚地看到:
\\- Go語言容易上手;\\t
- Go語言解決了并發編程和寫底層應用開發效率的痛點;\\t
- Go語言有Google這個世界一流的技術公司在后面;\\t
- Go語言的殺手級應用是Docker,而Docker的生態圈在這幾年完全爆棚了。\
所以,Go語言的未來是不可限量的。當然,我個人覺得,Go可能會吞食很多C、C++、Java的項目。不過,Go語言所吞食主要的項目應該是中間層的項目,既不是非常底層也不會是業務層。
\\也就是說,Go語言不會吞食底層到C和C++那個級別的,也不會吞食到高層如Java業務層的項目。Go語言能吞食的一定是PaaS上的項目,比如一些消息緩存中間件、服務發現、服務代理、控制系統、Agent、日志收集等等,沒有復雜的業務場景,也到不了特別底層(如操作系統)的中間平臺層的軟件項目或工具。而C和C++會被打到更底層,Java會被打到更上層的業務層。這是我的一個判斷。
\\好了,我們再用上面的標尺來量一下Go語言的殺手級應用Docker,你會發現基本是一樣的。
\\注:以上僅為文章的一部分,欲閱讀全文,還請點擊鏈接下載InfoQ極客時間手機客戶端。打開『左耳聽風』專欄的試讀文章模塊,繼續閱讀。
總結
以上是生活随笔為你收集整理的左耳朵耗子:谈谈Go语言、Docker和新技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 34.11. 视图、存储过程、函数
- 下一篇: C++标准pdf 分享