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

Google的軟件工程經(jīng)驗(yàn)總結(jié)

開發(fā) 項(xiàng)目管理
大部分的 Google 代碼都存在統(tǒng)一的源代碼庫中,可供 Google 內(nèi)部所有工程師訪問。但是 Chrome 和 Android 則分別有單獨(dú)的代碼庫。

摘錄翻譯自“Software Engineering at Google”,作者:Fergus Henderson

軟件開發(fā)

代碼庫

大部分的 Google 代碼都存在統(tǒng)一的源代碼庫中,可供 Google 內(nèi)部所有工程師訪問。但是 Chrome 和 Android 則分別有單獨(dú)的代碼庫。

Google 的代碼庫,在 2015 年 1 月的統(tǒng)計(jì)中,共計(jì) 86T 數(shù)據(jù),上10億個(gè)文件,9百萬個(gè)源代碼文件,其中包含了 20 億行代碼。迄今為止共計(jì) 3500 萬次提交,每個(gè)工作日平均發(fā)生 4 萬次更新。

任何 Google 員工,都可以隨意的訪問所有代碼,并下載、編譯,可以在自己的環(huán)境下自行改寫,但任何更改的提交,都需要通過代碼負(fù)責(zé)人的審批才可以。

所有的開發(fā)都在庫的頭部進(jìn)行。對(duì)代碼進(jìn)行任何更改后,自動(dòng)化系統(tǒng)將進(jìn)行測(cè)試,并在幾分鐘內(nèi)通知開發(fā)者和代碼審查者,對(duì)更改的測(cè)試是否失敗。

代碼庫中每個(gè)分支都有單獨(dú)的文件注明“代碼所有人”,只有代碼所有人才有權(quán)利審核提交的更改。通常情況下,項(xiàng)目組的所有成員都是“代碼所有人”。

[[185879]]

編譯系統(tǒng)

Google 使用分布式編譯系統(tǒng),叫做 Blaze。Blaze 提供了標(biāo)準(zhǔn)的命令,用于編譯和測(cè)試庫中的所有代碼。Blaze 這種統(tǒng)一的編譯工具,讓 Google 公司的所有工程師都能隨時(shí)編譯和測(cè)試任何軟件,也都能跨項(xiàng)目工作。

程序員需要撰寫“BUILD”文件,用來引導(dǎo) Blaze 如何編譯軟件。在Go語言的代碼中,build 文件可以自動(dòng)生成。

每個(gè)編譯步驟必須是“隔離”的,只依賴于聲明的輸入。為了實(shí)現(xiàn)編譯的分布式運(yùn)行,必須強(qiáng)制要求正確輸入所有的依賴:只有聲明了的輸入才被發(fā)送到進(jìn)行編譯的機(jī)器上去。

每個(gè)編譯步驟的結(jié)果是確定的。這樣保證了編譯系統(tǒng)可以緩存編譯結(jié)果。軟件工程師可以回退到老的版本號(hào),并重新編譯,且得到完全一樣的二進(jìn)制結(jié)果。

編譯結(jié)果緩存在云端。包括中間結(jié)果,這樣當(dāng)有別的編譯請(qǐng)求過來,系統(tǒng)直接應(yīng)用緩存的結(jié)果。

增量的重新編譯非???。編譯系統(tǒng)運(yùn)行在內(nèi)存中,當(dāng)重新執(zhí)行編譯任務(wù)時(shí),它能夠分析文件上次編譯后發(fā)生的增量變化。

提交前檢查。Google 有專門的自動(dòng)化工具,用來在發(fā)起代碼審查和準(zhǔn)備提交更改到代碼庫時(shí),進(jìn)行一整套的標(biāo)準(zhǔn)檢查。

代碼審查

Google 開發(fā)了基于 Web 的代碼審查管理工具。程序員可以申請(qǐng)對(duì)代碼進(jìn)行審查,審查者可以在瀏覽器上比較差異,并寫上評(píng)語。當(dāng)寫代碼的人發(fā)起一次審查申請(qǐng),則系統(tǒng)自動(dòng)發(fā)郵件給審查者,并附上代碼查看頁的鏈接。

對(duì)源代碼的任何更改,必須經(jīng)過最少一次審查。如果更改不是由“代碼所有人”做出,則還必須由所有人中的一位進(jìn)行審查。

系統(tǒng)可以自動(dòng)推薦合適的審查者。當(dāng)然,寫程序的人,可以自己選擇審查者。

Google 鼓勵(lì)工程師們,將每一次代碼更改控制在較小的規(guī)模上。 30-99 行的代碼更改,通常視為“中等”;300 行以上則標(biāo)記為“大”; 1000-1999 行,則是“巨大”;

測(cè)試

單元測(cè)試是必須的,在 Google 的開發(fā)中廣為采用。集成測(cè)試和回歸測(cè)試,也較為普及。Google 有一個(gè)自動(dòng)化的工具,用來衡量測(cè)試覆蓋的范圍,這個(gè)結(jié)果也在代碼瀏覽器中可以查看。

部署前一定要做壓力測(cè)試。項(xiàng)目組要用表格或者圖標(biāo)顯示關(guān)鍵參數(shù),尤其是壓力之下的延遲和錯(cuò)誤率。

Bug 跟蹤

Google 使用的 Bug 跟蹤工具叫 Buganizer。有的團(tuán)隊(duì),安排專人分配 Bug,有的團(tuán)隊(duì)則在例行的會(huì)議中分配。

開發(fā)語言

Google 內(nèi)部有四大語言,一般都建議工程師在這四種里挑選。四大語言是:  C++,Java, Python, Go。不用多說,減少語言數(shù)量,可以增加代碼復(fù)用,并提高內(nèi)部協(xié)作。

每種語言都有代碼規(guī)范,保證風(fēng)格統(tǒng)一。公司范圍內(nèi),還有針對(duì)“代碼可讀性”的培訓(xùn),由經(jīng)驗(yàn)豐富的老司機(jī),對(duì)新人進(jìn)行培訓(xùn)。代碼審查,也需要對(duì)“可讀性”做專門的評(píng)審。

在不同語言之間的交互操作,要通過Protocol Buffers 來處理。Protocol Buffers 是 Google公司開發(fā)的一種數(shù)據(jù)描述語言,類似于XML能夠?qū)⒔Y(jié)構(gòu)化數(shù)據(jù)序列化,可用于數(shù)據(jù)存儲(chǔ)、通信協(xié)議等方面

調(diào)試工具和性能分析工具

Google 的服務(wù)器連接了很多庫,提供用于調(diào)試服務(wù)器的工具。服務(wù)器崩潰時(shí),可以自動(dòng)導(dǎo)出堆棧軌跡到日志文件。 還有 Web 界面用于調(diào)試,可以用來查看呼入和呼出的 RPC 調(diào)用、更改的命令行標(biāo)志值、資源消耗、性能分析等。

發(fā)版

Google 的大部分項(xiàng)目組,都有固定的軟件工程師負(fù)責(zé)發(fā)版。

大部分的軟件,發(fā)版比較頻繁。通常是周發(fā)版,或者每?jī)芍馨l(fā)版,有些項(xiàng)目組甚至每天發(fā)。所以,自動(dòng)化進(jìn)行發(fā)版就是必須的了。頻繁發(fā)版有助于工程師們保持斗志,提高整體速度,實(shí)現(xiàn)更多的迭代,從而也可以獲得更多的反饋,并做出更多有益的更正。

上線

要上線任何更改,并對(duì)用戶可用,則需要項(xiàng)目組外很多人的審批。審批來自多個(gè)方面,包括法律合規(guī)、隱私保護(hù)、安全要求、可靠性、業(yè)務(wù)需求等等。

Google 有一個(gè)內(nèi)部的上線審批工具,用來執(zhí)行審查和上線審批。通過定制,這個(gè)工具,對(duì)不同的產(chǎn)品有不同的審查和審批流程。

過錯(cuò)總結(jié)

發(fā)生了重大的服務(wù)事故后,相關(guān)人員要起草過錯(cuò)總結(jié)報(bào)告。文檔描述事故細(xì)節(jié),包括標(biāo)題、概要、影響、時(shí)間段、原因、故障組件、行動(dòng)。 總結(jié)的聚焦在于問題,以及未來如何解決,而不是聚焦在于人,也不是為了懲罰責(zé)任人。

頻繁的重寫代碼

Google 鼓勵(lì)頻繁的重寫代碼,任何軟件每隔幾年就重寫一遍。一來可以優(yōu)化產(chǎn)品,采用***進(jìn)技術(shù),去掉無用的功能,另外還可以轉(zhuǎn)移知識(shí)到新員工,并保持員工的斗志。

項(xiàng)目管理

20%的自由時(shí)間

盡人皆知,google的工程師擁有 20%的自由時(shí)間,可以隨意做感興趣的東西,而無需審批。這當(dāng)然是為了激發(fā)工程師的各種創(chuàng)意,同時(shí)也讓工程師們保持高效率,而不是窒息在必須完成的任務(wù)中。 另外,也考慮到,很多員工都會(huì)私下里自己做一些東西,那么還不如鼓勵(lì)大家將這些研究方向公開。

目標(biāo)和關(guān)鍵結(jié)果

不論個(gè)人還是團(tuán)隊(duì),都要明確的寫下自己的目標(biāo),并評(píng)估達(dá)成目標(biāo)的進(jìn)度。每個(gè)季度的末尾,要根據(jù)關(guān)鍵結(jié)果,對(duì)目標(biāo)達(dá)成情況進(jìn)行打分,分?jǐn)?shù)從 0 分到 1 分。這 OKR 分?jǐn)?shù)是全公司內(nèi)部公開的。但這并不直接用作個(gè)人績(jī)效評(píng)估的輸入。

平均得分是 0.65,但鼓勵(lì)大家將目標(biāo)定的高一些,所以在可完成任務(wù)之上,再加 50% 的工作量是正常的。

項(xiàng)目立項(xiàng)

對(duì)于項(xiàng)目立項(xiàng)審批,以及項(xiàng)目取消,Google并沒有清楚定義的流程。即便是在 Google 做過 10 年的老經(jīng)理,也不知道決策是如何做出的。很可能因?yàn)樵诠痉秶鷥?nèi),流程并不一致,經(jīng)理們可以自行判斷并決策。有時(shí)候,決策是由下而上進(jìn)行的,因?yàn)轫?xiàng)目組的人都走光了。有時(shí)候,決策是自上而下的,老板們決定哪些項(xiàng)目得到更多的預(yù)算,那些則必須關(guān)閉。

機(jī)構(gòu)重組

當(dāng)關(guān)閉一個(gè)大項(xiàng)目時(shí),工程師們可以自行尋找新機(jī)會(huì),加入新團(tuán)隊(duì)。有的時(shí)候,還會(huì)搞“去碎片化”行動(dòng),把瑣碎的分散的團(tuán)隊(duì)合并,這個(gè)時(shí)間工程師也可以自行選擇團(tuán)隊(duì)和工作地點(diǎn)。

經(jīng)常進(jìn)行重組,有利于突破大公司的低效陷阱。

人的管理

崗位

Google 將“技術(shù)路線”和“管理路線”分開;將“技術(shù)領(lǐng)導(dǎo)” 從“管理”中分出;將“研究”綜合到“工程”中;設(shè)置“產(chǎn)品經(jīng)理”、“項(xiàng)目經(jīng)理”、和“站點(diǎn)可靠性”來支持工程師們。

工程中主要的崗位包括:

工程經(jīng)理

這是工程序列中唯一的“人員管理”崗位。軟件工程師也“可能”管理人,但工程經(jīng)理“總是”管理人。工程經(jīng)理通常以前就是工程師,具備技術(shù)經(jīng)驗(yàn),以及管理人的技能。

技術(shù)領(lǐng)導(dǎo)力與人員管理能力之間,是有區(qū)別的。

“工程經(jīng)理”不一定帶領(lǐng)項(xiàng)目;項(xiàng)目通常由“技術(shù)組長(zhǎng)”負(fù)責(zé),當(dāng)然“技術(shù)組長(zhǎng)”也可能由“工程經(jīng)理”擔(dān)任,但大多數(shù)情況下都是“工程師”。項(xiàng)目的“技術(shù)組長(zhǎng)”對(duì)項(xiàng)目中的技術(shù)問題,具有決定權(quán)。

經(jīng)理負(fù)責(zé)選擇“技術(shù)組長(zhǎng)”,并監(jiān)控團(tuán)隊(duì)績(jī)效。工程經(jīng)理還負(fù)責(zé)職場(chǎng)發(fā)展的培訓(xùn)及***,進(jìn)行績(jī)效評(píng)估,并部分負(fù)責(zé)薪酬制定。還要做一些招聘工作。

一般來說,工程經(jīng)理管理 3 – 30 個(gè)人,普遍情況下是 8 – 12 人。

工程師

在 Google,“工程”和“管理”的職業(yè)發(fā)展路線是不同的。工程師可以管理下屬,但這不是必須的。在更高層次,領(lǐng)導(dǎo)力是必須的,但領(lǐng)導(dǎo)力不一定從對(duì)人的管理中來。比如,開發(fā)了***影響力的軟件,或者寫的代碼被很多工程師使用,也是一種領(lǐng)導(dǎo)力。

研究科學(xué)家

科學(xué)家的招聘的門檻更高,需要有學(xué)術(shù)上的論文發(fā)表能力和代碼能力。除了科學(xué)家需要論文和著作外,科學(xué)家和工程師沒有顯著的區(qū)別。在Google,科學(xué)家和工程師一起工作,同樣研發(fā)產(chǎn)品,同在一個(gè)團(tuán)隊(duì)。這樣的安排為的將研究成果更好的導(dǎo)入產(chǎn)品中。

站點(diǎn)可靠性工程師

對(duì)系統(tǒng)的維護(hù)由軟件工程師團(tuán)隊(duì)負(fù)責(zé),而不是通常的系統(tǒng)管理員。站點(diǎn)可靠性工程師的技能要求,比軟件開發(fā)工程師要稍低。

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

產(chǎn)品經(jīng)理負(fù)責(zé)管理產(chǎn)品,他們協(xié)調(diào)軟件工程師的工作,宣講功能特性,與其他團(tuán)隊(duì)配合,跟蹤bug和進(jìn)度,保證一切順暢運(yùn)行以開發(fā)出高質(zhì)量的產(chǎn)品。產(chǎn)品經(jīng)理不寫代碼。

計(jì)劃經(jīng)理/技術(shù)計(jì)劃經(jīng)理

計(jì)劃經(jīng)理有點(diǎn)類似產(chǎn)品經(jīng)理,但他們不管產(chǎn)品,而是管理項(xiàng)目、過程、或運(yùn)營(yíng)。

工程師與產(chǎn)品經(jīng)理、計(jì)劃經(jīng)理的比例,一般非常高,大約在4:1 到30:1之間。

設(shè)施

Google 有很先進(jìn)的各種設(shè)備,包括游戲房、健身房,以及提供各種美食的免費(fèi)餐廳,這一切都是為的將員工留在公司,多多工作。還可以帶朋友來蹭飯,這樣就增加了將朋友招聘進(jìn)來的機(jī)會(huì)。

Google 的座位都是開放的,甚至有點(diǎn)擁擠,這有助于加強(qiáng)交流,但同時(shí)也影響了個(gè)人的專注,算是權(quán)衡之下的損失了。員工雖然有自己的座位,但每 6 -12 個(gè)月就要換一換,也是為了加強(qiáng)交流。

培訓(xùn)

Google 的培訓(xùn)有一下幾種:

  • 新員工 (Nooglers)都要參加一個(gè)入職培訓(xùn)教程
  • 技術(shù)員工要參加一個(gè)“Codelabs”,進(jìn)行短期的在線培訓(xùn)課程,其中還有編碼練習(xí)
  • 許多在線和現(xiàn)場(chǎng)的培訓(xùn)課程
  • 對(duì)于參加外部機(jī)構(gòu)的課程,Google也給予支持

每個(gè)新員工,都被指派一名正式的“導(dǎo)師” 和一名“搭檔”,以幫助他盡快上手。

換崗

鼓勵(lì)換崗流動(dòng),以在公司范圍內(nèi)傳播知識(shí),并提高跨組織的交流。在一個(gè)崗位工作 12 個(gè)月后,可以選擇其他項(xiàng)目,也可以選擇換個(gè)辦公室。

績(jī)效評(píng)估和獎(jiǎng)勵(lì)

Google 非常歡迎互相評(píng)價(jià)。 工程師可以彼此互贈(zèng)正面評(píng)價(jià),一種是“同事獎(jiǎng)金”,一種是“點(diǎn)贊”。每名員工,每年擁有兩次機(jī)會(huì),給予其他員工以“同事獎(jiǎng)金”提名,獎(jiǎng)金是 100 美元。這種“同事獎(jiǎng)金”是為了獎(jiǎng)勵(lì)員工在職責(zé)之外幫助他人。“點(diǎn)贊”則僅僅是表揚(yáng),沒有現(xiàn)金獎(jiǎng)勵(lì)。

經(jīng)理可以發(fā)放獎(jiǎng)金,包括一種在項(xiàng)目完成后的特殊獎(jiǎng)金。Google和其他公司一樣,也有年底績(jī)效獎(jiǎng)和股權(quán)激勵(lì)。

績(jī)效優(yōu)秀,可以晉升。而績(jī)效差的,則需要進(jìn)行改進(jìn),但有意思的是 Google 很少開除員工。員工還要對(duì)經(jīng)理的績(jī)效進(jìn)行評(píng)估,以保證管理效率和管理質(zhì)量。

責(zé)任編輯:張燕妮 來源: 燈下鼠
相關(guān)推薦

2009-10-22 15:07:12

綜合布線工程

2009-10-15 09:27:00

2011-07-21 13:40:17

java

2009-09-16 17:13:54

學(xué)習(xí)Linq

2009-08-19 09:24:43

AJAX引擎經(jīng)驗(yàn)總結(jié)

2009-09-29 16:32:11

OJB Hiberna

2010-03-25 13:42:14

云計(jì)算

2010-03-23 11:39:49

云計(jì)算

2010-05-19 17:24:55

MySQL編碼

2010-04-21 14:53:46

Oracle游標(biāo)

2009-09-16 17:44:54

LINQ to SQL

2009-09-08 10:57:55

LINQ查詢操作

2011-07-08 13:15:52

JSP

2009-09-11 13:29:31

LINQ查詢操作

2009-11-17 11:24:00

PHP應(yīng)用技巧

2010-06-12 17:37:18

UML實(shí)踐指南

2009-09-08 16:02:47

Linq使用Group

2009-08-20 17:35:47

Servlet和JSP

2009-08-13 18:13:27

C#學(xué)習(xí)經(jīng)驗(yàn)

2010-03-08 15:12:27

Python語言
點(diǎn)贊
收藏

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