谷歌的語言何以戰勝Python?50%的人都應該立即學習Golang
本文轉載自公眾號“讀芯術”(ID:AI_Discovery)
很多軟件工程師視Python為比較喜愛的語言之一,工作生活都和它死死綁定在一起。但Google, Uber, Dropbox, Soundcloud, Slack, 和Medium的軟件工程師并不是這樣。長期以來,優秀企業的程序員們一直迷戀于另一種語言。
盡管大部分開發者還在使用Python,但無論是對于API、網頁服務,或是數據處理,高級員工都已經增加了對于Golang(Go)的使用,它的表現棒極了!
由先驅建立
Go是由谷歌的一個全明星三人組發明的:
- Rob Pike參與開發了Unix環境,并參與創建了Limbo編程語言。
- 有了Ken Thompson,這個團隊就有了Unix和B語言(C語言的前身)的發明人。
- Robert Griesemer是谷歌的V8 JavaScript機器的負責人之一,同時也是谷歌創造的另一門語言——Sawzall的主要開發者。
谷歌最初正是用Python編寫的,但是在2007年前后,工程師們正在尋找一種更好的語言來執行谷歌的主要任務。
Rob Pike在2012年的一次篇演講中提到了他們遇到的問題:
- 構建緩慢:生成新代碼需要很長時間。
- 依賴路徑不可控:你是否曾經試圖安裝一個軟件包,結果卻發現你不得不安裝至少5個其他的依賴路徑和無數的子依賴路徑來讓它運行?是的,即使是谷歌人也有這個問題。
- 版本偏離:由于到處都是重復的代碼,工程師可能只會更新原始代碼片段的一個版本,而忘記其他版本。因此,最終得到的版本既包含新代碼,也包含舊代碼。
- 編寫自動工具較困難:編寫自動寫代碼的程序是可能的——事實上,大多數程序在某個階段都會這樣做。但在現代編程語言中,這仍然很難實現。
- 每個程序員都使用語言的不同子集:對于Python,一個開發人員可能使用numpy包,另一個更喜歡scipy包。諸如此類,當程序員想要將他們的代碼混合到一個包中時,情況就會變得混亂。
- 程序理解能力差:那些說自己一讀代碼就懂的人是在撒謊,它不是一個簡單的“Hello World”程序。而且代碼的文檔通常幫不上什么忙——在大多數情況下,它甚至不存在,或者被編得很糟糕。
- 重復操作:你是否曾經從程序的某個部分復制一段代碼?這是不好的做法。但大多數編程語言都使其易于實現。
- 更新成本高:在上面描述的這種混亂情況下,更新軟件需要花費大量的時間和腦力。
- 跨語言構建:Python適合于中小型腳本,c++適合于復雜的程序,Java適合于web開發,Haskell適合于有惰性但穩健的代碼。結果是,一個程序常常包含許多不同語言的代碼片段。但是為了編譯、調試和保持簡潔,用一種語言編寫程序要好得多。
于是三人組開始設計一種干凈、簡單、易讀的語言。一種可以消除或至少減輕軟件工程中這些常見問題的語言。
一門精簡的語言
這些常見問題的根源在于現代語言的復雜性。想想Python或C——你有沒有試著閱讀過整個文檔?祝你好運。相比之下,Go比較大的特點就是簡單。這并不意味著你不能用它來構建復雜的代碼。但Go考慮到了,不要有引入復雜性卻不能解決問題的特性。
例如,Go不像其他面向對象語言那樣有類。作為其他語言中常用功能,類可以使一個對象繼承另一個對象的屬性。
問題是,如果試圖改變一個對象的結構而不改變其他對象的結構,就會破壞代碼。Go有一個被稱為struct替代方法,其更偏向組合而不是繼承。
Go的其他主要特征是:
- 類型安全:在C語言中,使用光標做任何事情——包括使程序崩潰。Go不會讓你這樣搞砸東西的。
- 正交性:這意味著如果在代碼中更改一個對象,其他對象不會因此而更改。與C語言不同的是,比如,如果你改變了一個變量,那么其他的變量也會隨之改變。Go是正交的,因為它使事情更簡單。
- 最小化:在Go中,只有一種方法來編寫代碼。而Python有無數種方法來編寫一個東西!
- 可讀性高:和Python一樣,Go會把可讀性放在第一位。因此它相比大多數語言來說對新手更友好,也使維護代碼更容易。
- 文檔化:尤其對于初級開發人員,他們覺得為了使別人可以使用代碼而寫一些關于代它的簡介是很乏味的。使用Godoc,這個過程會比大多數語言更加自動化,開發人員不需要浪費寶貴的時間來記錄他們所做的事情。
- 實用性:重要的東西應該易于編寫代碼,即使這意味著其他事情不可能在Go中完成。邏輯是,你希望通過使重復的任務變得快速和簡單來提高開發人員的效率。如果有更復雜的問題他們可以用另一種語言來寫。
或許這些聽起來毫無創意,從某種意義上說,確實如此,這不是一種帶有時髦特征的語言,Go不是一種用來探索和研究的語言。
但神奇之處正在于此,當你嘗試著去創造一些能運行的東西的時候,當你在一個團隊中,有許多不同背景的人在同一個代碼上工作的時候,當你厭倦了其他語言帶來的混亂的時候,Go能救你于水火。
日益繁榮的社區
由于其簡單性,Go是當今存在的很具協作性的語言之一。過去程序員們總是坐在自己的小隔間里,從不與別人見面,這樣的時代已經一去不復返了。
現在,我們有StackExchange來解決所有的編碼問題。我們有Slack,Zoom,Google Meet等來和我們的團隊保持聯系。但現代語言仍然是為小隔間里的小書呆子量身定做的。
Go改變了這種局面。盡管比Python晚了20歲,但它擁有一個充滿活力的社區。他們將尊重、開放和友好置于行為準則之上,雖然其他語言,如Python或C,也有類似的社區聲明,但對這些基本價值觀的強調較少。
因此,社區在Go年度調查中扮演著明確的角色也就不足為奇了
有關社區和領導力的問題 | 圖源:2019
數據不言自明
根據2019 Go Survey,谷歌的語言主要用于網站開發、網絡和系統編程。Python的前景看起來與之非常相似:
Python的使用數據 | 圖源:2019 Python
唯一顯著的區別是有多少Python用于數據分析和機器學習。在這些領域,其他熱門的新語言也正在涌現。
你可以看到許多Python的用法都可能被Go所取代,包括46%的網絡開發46%,37%的系統管理和DevOps中,以及19%的網絡編程中。即使你認為許多開發人員完成了所有這三種工作,至少一半的Python支持者正在做他們在Go中可以做的事情。
事實上,開發人員已經意識到Go提供的巨大潛力。根據Hackerrank的數據,在2019年,大約有三分之一的程序員想學Go。
接下來的熱門語言 | 圖源:Hackerrank.
由于Go非常容易學習,我們應該會在未來幾年看到從Python到Go的轉變。雖然對于大多數公司,尤其是不像Dropbox或Medium那樣龐大有錢的公司來說,把所有的代碼重寫用Go編寫將是非常昂貴的。但對于新項目來說,你至少應該嘗試一下。
給彼此一個機會,給未來一個可能,何不去試試Go呢?