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