自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

谷歌的語言何以戰(zhàn)勝Python?50%的人都應(yīng)該立即學(xué)習(xí)Golang

開發(fā) 后端
很多軟件工程師視Python為比較喜愛的語言之一,工作生活都和它死死綁定在一起。但Google, Uber, Dropbox, Soundcloud, Slack, 和Medium的軟件工程師并不是這樣。長期以來,優(yōu)秀企業(yè)的程序員們一直迷戀于另一種語言。

 本文轉(zhuǎn)載自公眾號“讀芯術(shù)”(ID:AI_Discovery)

 

很多軟件工程師視Python為比較喜愛的語言之一,工作生活都和它死死綁定在一起。但Google, Uber, Dropbox, Soundcloud, Slack, 和Medium的軟件工程師并不是這樣。長期以來,優(yōu)秀企業(yè)的程序員們一直迷戀于另一種語言。

盡管大部分開發(fā)者還在使用Python,但無論是對于API、網(wǎng)頁服務(wù),或是數(shù)據(jù)處理,高級員工都已經(jīng)增加了對于Golang(Go)的使用,它的表現(xiàn)棒極了!

 

由先驅(qū)建立

Go是由谷歌的一個全明星三人組發(fā)明的:

  • Rob Pike參與開發(fā)了Unix環(huán)境,并參與創(chuàng)建了Limbo編程語言。
  • 有了Ken Thompson,這個團隊就有了Unix和B語言(C語言的前身)的發(fā)明人。
  • Robert Griesemer是谷歌的V8 JavaScript機器的負責人之一,同時也是谷歌創(chuàng)造的另一門語言——Sawzall的主要開發(fā)者。

谷歌最初正是用Python編寫的,但是在2007年前后,工程師們正在尋找一種更好的語言來執(zhí)行谷歌的主要任務(wù)。

Rob Pike在2012年的一次篇演講中提到了他們遇到的問題:

  • 構(gòu)建緩慢:生成新代碼需要很長時間。
  • 依賴路徑不可控:你是否曾經(jīng)試圖安裝一個軟件包,結(jié)果卻發(fā)現(xiàn)你不得不安裝至少5個其他的依賴路徑和無數(shù)的子依賴路徑來讓它運行?是的,即使是谷歌人也有這個問題。
  • 版本偏離:由于到處都是重復(fù)的代碼,工程師可能只會更新原始代碼片段的一個版本,而忘記其他版本。因此,最終得到的版本既包含新代碼,也包含舊代碼。
  • 編寫自動工具較困難:編寫自動寫代碼的程序是可能的——事實上,大多數(shù)程序在某個階段都會這樣做。但在現(xiàn)代編程語言中,這仍然很難實現(xiàn)。
  • 每個程序員都使用語言的不同子集:對于Python,一個開發(fā)人員可能使用numpy包,另一個更喜歡scipy包。諸如此類,當程序員想要將他們的代碼混合到一個包中時,情況就會變得混亂。
  • 程序理解能力差:那些說自己一讀代碼就懂的人是在撒謊,它不是一個簡單的“Hello World”程序。而且代碼的文檔通常幫不上什么忙——在大多數(shù)情況下,它甚至不存在,或者被編得很糟糕。
  • 重復(fù)操作:你是否曾經(jīng)從程序的某個部分復(fù)制一段代碼?這是不好的做法。但大多數(shù)編程語言都使其易于實現(xiàn)。
  • 更新成本高:在上面描述的這種混亂情況下,更新軟件需要花費大量的時間和腦力。
  • 跨語言構(gòu)建:Python適合于中小型腳本,c++適合于復(fù)雜的程序,Java適合于web開發(fā),Haskell適合于有惰性但穩(wěn)健的代碼。結(jié)果是,一個程序常常包含許多不同語言的代碼片段。但是為了編譯、調(diào)試和保持簡潔,用一種語言編寫程序要好得多。

于是三人組開始設(shè)計一種干凈、簡單、易讀的語言。一種可以消除或至少減輕軟件工程中這些常見問題的語言。

 

一門精簡的語言

這些常見問題的根源在于現(xiàn)代語言的復(fù)雜性。想想Python或C——你有沒有試著閱讀過整個文檔?祝你好運。相比之下,Go比較大的特點就是簡單。這并不意味著你不能用它來構(gòu)建復(fù)雜的代碼。但Go考慮到了,不要有引入復(fù)雜性卻不能解決問題的特性。

例如,Go不像其他面向?qū)ο笳Z言那樣有類。作為其他語言中常用功能,類可以使一個對象繼承另一個對象的屬性。

問題是,如果試圖改變一個對象的結(jié)構(gòu)而不改變其他對象的結(jié)構(gòu),就會破壞代碼。Go有一個被稱為struct替代方法,其更偏向組合而不是繼承。

Go的其他主要特征是:

  • 類型安全:在C語言中,使用光標做任何事情——包括使程序崩潰。Go不會讓你這樣搞砸東西的。
  • 正交性:這意味著如果在代碼中更改一個對象,其他對象不會因此而更改。與C語言不同的是,比如,如果你改變了一個變量,那么其他的變量也會隨之改變。Go是正交的,因為它使事情更簡單。
  • 最小化:在Go中,只有一種方法來編寫代碼。而Python有無數(shù)種方法來編寫一個東西!
  • 可讀性高:和Python一樣,Go會把可讀性放在第一位。因此它相比大多數(shù)語言來說對新手更友好,也使維護代碼更容易。
  • 文檔化:尤其對于初級開發(fā)人員,他們覺得為了使別人可以使用代碼而寫一些關(guān)于代它的簡介是很乏味的。使用Godoc,這個過程會比大多數(shù)語言更加自動化,開發(fā)人員不需要浪費寶貴的時間來記錄他們所做的事情。
  • 實用性:重要的東西應(yīng)該易于編寫代碼,即使這意味著其他事情不可能在Go中完成。邏輯是,你希望通過使重復(fù)的任務(wù)變得快速和簡單來提高開發(fā)人員的效率。如果有更復(fù)雜的問題他們可以用另一種語言來寫。

或許這些聽起來毫無創(chuàng)意,從某種意義上說,確實如此,這不是一種帶有時髦特征的語言,Go不是一種用來探索和研究的語言。

但神奇之處正在于此,當你嘗試著去創(chuàng)造一些能運行的東西的時候,當你在一個團隊中,有許多不同背景的人在同一個代碼上工作的時候,當你厭倦了其他語言帶來的混亂的時候,Go能救你于水火。

日益繁榮的社區(qū)

由于其簡單性,Go是當今存在的很具協(xié)作性的語言之一。過去程序員們總是坐在自己的小隔間里,從不與別人見面,這樣的時代已經(jīng)一去不復(fù)返了。

現(xiàn)在,我們有StackExchange來解決所有的編碼問題。我們有Slack,Zoom,Google Meet等來和我們的團隊保持聯(lián)系。但現(xiàn)代語言仍然是為小隔間里的小書呆子量身定做的。

Go改變了這種局面。盡管比Python晚了20歲,但它擁有一個充滿活力的社區(qū)。他們將尊重、開放和友好置于行為準則之上,雖然其他語言,如Python或C,也有類似的社區(qū)聲明,但對這些基本價值觀的強調(diào)較少。

因此,社區(qū)在Go年度調(diào)查中扮演著明確的角色也就不足為奇了

有關(guān)社區(qū)和領(lǐng)導(dǎo)力的問題 | 圖源:2019

 

數(shù)據(jù)不言自明

根據(jù)2019 Go Survey,谷歌的語言主要用于網(wǎng)站開發(fā)、網(wǎng)絡(luò)和系統(tǒng)編程。Python的前景看起來與之非常相似:

Python的使用數(shù)據(jù) | 圖源:2019 Python

唯一顯著的區(qū)別是有多少Python用于數(shù)據(jù)分析和機器學(xué)習(xí)。在這些領(lǐng)域,其他熱門的新語言也正在涌現(xiàn)。

你可以看到許多Python的用法都可能被Go所取代,包括46%的網(wǎng)絡(luò)開發(fā)46%,37%的系統(tǒng)管理和DevOps中,以及19%的網(wǎng)絡(luò)編程中。即使你認為許多開發(fā)人員完成了所有這三種工作,至少一半的Python支持者正在做他們在Go中可以做的事情。

事實上,開發(fā)人員已經(jīng)意識到Go提供的巨大潛力。根據(jù)Hackerrank的數(shù)據(jù),在2019年,大約有三分之一的程序員想學(xué)Go。

接下來的熱門語言 | 圖源:Hackerrank.

由于Go非常容易學(xué)習(xí),我們應(yīng)該會在未來幾年看到從Python到Go的轉(zhuǎn)變。雖然對于大多數(shù)公司,尤其是不像Dropbox或Medium那樣龐大有錢的公司來說,把所有的代碼重寫用Go編寫將是非常昂貴的。但對于新項目來說,你至少應(yīng)該嘗試一下。

給彼此一個機會,給未來一個可能,何不去試試Go呢?

 

責任編輯:華軒 來源: 讀芯術(shù)
相關(guān)推薦

2022-10-31 08:02:07

Python函數(shù)式編程

2017-04-05 12:04:17

python函數(shù)

2011-07-25 10:09:57

Python

2022-09-08 08:07:21

編程語言程序員

2015-04-16 10:26:51

程序員 Python Ruby

2022-09-07 07:06:11

編程語言開發(fā)人員

2013-08-15 13:48:18

產(chǎn)品產(chǎn)品經(jīng)理

2018-08-10 10:45:35

編程語言Python程序員

2019-08-21 10:15:41

開發(fā)Redis數(shù)據(jù)

2021-10-20 06:05:01

編程語言開發(fā)

2013-06-07 10:39:38

CSS代碼CSSCSS教程

2017-10-18 11:32:44

機器學(xué)習(xí)無監(jiān)督學(xué)習(xí)監(jiān)督學(xué)習(xí)

2020-01-14 08:28:50

Linux命令程序

2014-03-07 14:20:30

2023-05-09 10:55:43

CPU緩存內(nèi)存

2020-08-07 07:56:50

Ubuntu快捷鍵Windows

2012-02-28 10:52:13

2018-03-07 12:57:53

2017-10-24 14:21:30

機器學(xué)習(xí)人工智能算法

2021-02-20 10:37:43

代碼編碼開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號