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

如何在中國打造擁有谷歌工程師文化的團隊

開發(fā) 后端
本文為出門問問&Ticwear CTO雷欣博士從Coding、開發(fā)環(huán)境以及團隊合作等角度切入,分享谷歌的工程師文化、以及他和他的團隊是如何在中國打造公司的工程師文化。

 本文為出門問問&Ticwear CTO雷欣博士從Coding、開發(fā)環(huán)境以及團隊合作等角度切入,分享谷歌的工程師文化、以及他和他的團隊是如何在中國打造公司的工程師文化。

 

一、什么是谷歌的工程師文化

在加入谷歌之前,我曾在微軟斯坦福研究所工作過。這兩個地方其實是非常不一樣的,微軟是一種傳統(tǒng)軟件的開發(fā)模式,而斯坦福研究所是一個研究所,主要工作更偏向研究方向,更看重創(chuàng)新等能力,反而對代碼質量等的要求不是特別高。

到了谷歌之后,我印象最深的是,谷歌對代碼質量的要求和追求到了一種近乎狂熱的程度,主要體現在幾個方面:

 

  1. Coding Style。谷歌內部有一套非常長的Coding Style Guide For Every Language。其中C++是谷歌的主要語言,包括其他語言如Java、Python等,不管什么語言,谷歌都有一個很長的Style Guide。

     

  2. Readability。在谷歌,當你要想寫程序的時候,要先拿到所謂的Readability。假如你的代碼質量不過關,沒有通過Readability考核的話,那你的代碼可能就沒法Check In到代碼庫里面。

     

  3. Unit Test。谷歌有非常完善的Unit Test機制,也有十分強烈的Unit Test文化。大家都知道,寫軟件其實跟搭積木很像,如果下層基礎不扎實的話,那整個軟件框架其實是很危險的。在谷歌,差不多每做一次代碼改動都會有一個Unit Test,雖然這會讓開發(fā)變慢,但它也意味著高質量和可靠性。

     

  4. Code Review。谷歌很重視Code Review,基本上谷歌所有代碼都會保證至少有兩個以上的人對它Review后,才會讓你Check In。

     

  5. LGTM(Look Good To Me)。***,你的代碼寫完之后,你需要得到這樣一個“LGTM”,就是“Look Good To Me”,得到這樣一個Prove后,你才能把這個代碼提交上去。

高效的開發(fā)環(huán)境

1、強大穩(wěn)定的Base庫

除了對代碼質量的高要求,谷歌的開發(fā)環(huán)境也相當強大,非常高效。在谷歌,成千上百萬的代碼用的其實都是同一個代碼庫,大家共享一套強大穩(wěn)定的Base庫。

 

這點是我以前在微軟的時候沒有看到的,在微軟,我們可能是每個小組都有自己的代碼庫,而且每個小組都有自己不同的代碼規(guī)范和風格,因此,當更換團隊或跨組工作的時候,不同小組之間的不同標準就會造成一些困難。

但在整個谷歌,所有的代碼規(guī)范都是統(tǒng)一的,因此可以這樣想,假如把代碼質量看作一個函數,描述成一個高斯分布的話,那谷歌的總體代碼是高斯分布的Balance,方差是非常小的,整體質量是非常高的。

2、代碼構建工具Blaze

代碼的話,谷歌有一個構建工具叫Blaze,這是一個好東西。我們寫代碼的人可能都知道Makefile,但這個工具的話,我記得以前經常會花更多的時間在調這個Makefile,而不是寫代碼上。

但谷歌的Blaze就讓事情變得簡單了,它可以讓我們集中精力在代碼上,進行快速并行編譯,并且效率非常高。

實際上,很多前谷歌人從谷歌出去后,想到的***件事都是怎么重現谷歌的這個框架,怎么能夠重新搭建這些東西,讓寫代碼變得更加容易。

其實,很多公司都有類似的工具,比如Facebook有Buck,Twitter有Pants,國內有個更加山寨的Blade,實際上這些東西都是想要達成Blaze的機制。

谷歌還有其他很多好東西,譬如Protocol Buffer,就是一種數據交換的格式;Stubby,谷歌后臺系統(tǒng)基于HTTP的RPC機制;還有Map Reduce、Big Table、GTest、 GFlags、 GLog等等??偟膩碇v,這些東西能讓讓開發(fā)更高效。

3、敏捷的開發(fā)團隊

谷歌的開發(fā)團隊一般都是比較小、比較敏捷的。以前谷歌的CEO Eric Schmidt說過這樣的話,“Google有影響力的項目都是2個人的小團隊開發(fā)出來的,如搜索、廣告、Gmail”。

一位在騰訊的前谷歌人也說過這樣一句話,“3-5個人做不好的事情,30-50人做的更爛”。我是比較傾向于認同這句話的,假如一個項目在初始階段,沒有靠那么兩三個人把框架搭得非常好的話,你再招更多的人只會是添亂,增加溝通、交流的成本。

一個很小的、2-3人的小團隊有什么好處呢?你能實現快速開發(fā)、快速上線、快速迭代,然后再去推進這個產品的改進。

4、一切自動化,數據驅動

谷歌還有一個特點是一切自動化,數據驅動。我們以前在谷歌是做語音識別的,語音識別中其實有很多東西是需要人手動去參與、調解的,比如一些參數類的東西。當時,我們組里面就有人提出要做這么一件事情——當時谷歌有40、50種語言的識別系統(tǒng),那我們做這樣一套系統(tǒng),我按一個鍵,它過一段時間就能把所有的、每一種語言的語音識別系統(tǒng)全都訓練出來,然后全部自動推上線,中間過程中不需要任何人的參與。當時就有人提出了這樣的想法,這就有點將工程做到***、做到***的理念,這是非常重要的。

二、如何達到谷歌的代碼質量

那我們怎么在一個小的Start Up中間達到谷歌的代碼質量呢?我有一些建議:

1、堅持原則

一定要堅持原則,堅持Unit Test和Code Review。

Start Up的步伐、步調是非??斓模鞣矫娴母偁幰埠芗ち?,可能你不快的話就會落后。在這種情況下的話,很多產品經理面對各方面的壓力,可能會“我只需要這個產品快速出來,我根本不Care你里面是怎么做的,你的代碼質量、代碼風格,Whatever,我不Care。”

但實際上,我覺得這樣是不太好的,因為,從公司的長遠角度來講,你把基礎框架搭好之后,對以后的發(fā)展、穩(wěn)定都會有很大的幫助。因此,在很大程度上,要堅持Unit Test、建立Code Review的機制,定要保證你的代碼是有一定質量的。

2、擁抱開源

第二點是要擁抱開源。實際上,谷歌是一個非常大氣的公司,它已經把很多很好、很酷的內部的東西都開源出來了,我們要做的話,就是需要把這些東西積攢在一起,然后搭建一套更適合于創(chuàng)業(yè)公司的開發(fā)環(huán)境。

3、鼓勵更新、快速迭代

很多時候,我們會面臨一個問題,代碼的***個版本出來之后,那我以后是在這個基礎上修改呢,還是在一定階段把它推翻了重來呢?

谷歌的話,它內部基本上都認為,沒有什么代碼是能活過超過2、3年的,所以,會對代碼進行推陳出新。實際上,在代碼的推陳出新之間,會把以前沒有考慮到的東西會做得更好,也會鍛煉新人,然后學到更多東西。

三、我們怎么做產品

同谷歌一樣,我們推崇“快速上線、持續(xù)迭代”,認為“天下武功,唯快不破”,所以我們一般都是以2-3個人為一個小團隊去集中攻堅一些比較難的問題,尋求快速的突破。

每周,我們都會進行產品的迭代,像我們最近做的智能手表操作系統(tǒng)Ticwear,每周的話我們基本上都是,周一到周三開發(fā),提出Bugs和Features,然后周四進行內部測試和粉絲內測,然后周五就馬上公測。

維持這樣一個很快的節(jié)奏,實際上是非常累的,但是在這個過程中,你實際上鍛煉了團隊,你的產品也可以更快的滿足用戶的需求。

四、打造一支谷歌工程師文化的團隊

1、招什么樣的人

***是要通才(Generalist)而非專才(Specialist),這個是非常重要的,通常來講,一個創(chuàng)業(yè)公司跟一個大公司的差別在于,創(chuàng)業(yè)公司的資源是非常有限的,每個人可能要做很多不同的事情,所以,對我們創(chuàng)業(yè)公司來說,一般想招的是通才(Generalist),而不是專才(Specialist)。大公司的話,因為它資源非常多,人也非常多,所以他更希望某一個人進來之后,能老老實實做一件事、做一個螺絲釘,把這個事情做得最深、最透,但是我們小公司的話,更多地希望員工能有更多的Coverage。

第二是一定要有分析和解決問題的能力。

第三就是執(zhí)行力,小公司之所以能夠在某些程度上做得比大公司更好,靠得其實并不完全是Idea,因為Idea是很容易被抄襲的,實際上拼得是執(zhí)行力,假如你執(zhí)行的不夠好的話,那你就沒有任何機會。

第四是要有一定的交流能力,就是說,雖然我們非常鼓勵員工能有強大的單兵作戰(zhàn)能力,但我們同時也希望在2、3個人這樣的小團隊中,他們能有非常高效的交流、溝通,去推進一些項目。

2、面試流程

其實我們的面試流程基本上都是Follow谷歌的那一套,都是Phone Screen 再加上3輪Onsite Coding Interview,每一輪Coding Interview都是必須要在白板上寫代碼,其中就包括系統(tǒng)設計、算法、編碼等。算法會多一點,可能會有幾個,還有就是編碼,我們希望說,一個算法,你想出來了,也能通過你寫的代碼呈現出來,理論上,你的代碼寫完之后,我放在編輯器里面,它沒有錯誤,能夠編譯、能夠跑通,這是我們的要求。

3、培訓

那人招進來之后,我們怎么去培訓他們呢?當然會有一些基本的Coding Style的培訓,然后我們會找一些導師,給他們設計一些比較獨立的Starter Project,讓他們能慢慢融入這個團隊。同時,我們也會有一些Codelabs,在某些專題方面,教教大家怎么用我們搭建的一些模型。

平時,我們還會有各種各樣的活動,比較大一點的有問問講堂,我們會請一些比較知名的專家、學者來給我們分享一些技術、業(yè)界的***的進展。同時,我們內部也會有一些技術分享,還會搞一些Hackathon,做一些Self Review、Peer Review,讓大家更好地融入這個團隊。

4、在中國招人留人的困難

我實際上回來才一年多一點,就發(fā)現在中國招人和留人有很多困難。

 

  1. Risk Taking。我發(fā)現,其實很大一部分中國年輕人承擔風險的能力、Risk Taking的能力,相對美國來講是比較低的。我們在招人的時候,經常會碰到,有些人會說,“我爸媽認為大公司好,覺得BAT好”,或者說要有北京戶口,這樣的情況,這些我在美國的創(chuàng)業(yè)公司是很少見到的,所以這個也是我們比較頭疼的。

     

  2. Temptation。即使我們好不容易招到人了,那么怎么去留住他們也是我們比較頭疼的地方。因為我們的要求比較高,所以我們招到的人、特別是后端的人才,素質都還是比較高的,那么,特別是在現在這個創(chuàng)業(yè)環(huán)境特別好的情況下,他們就會面對很多各種各樣的誘惑,譬如說,我們公司至少有3個工程師走了,其中有2個到了別的公司當Director,另外一個到別的公司做CTO,他們都只是一般工程師啊。

所以這種情況下,你招人、到底要招什么樣的人、完全招那些***的人是不是***的一種方式,也是值得我們去思考的一個問題。

 

 

責任編輯:李英杰 來源: ego
相關推薦

2018-06-28 16:33:58

團隊工程師專家

2010-11-02 13:55:07

中國雅虎

2012-12-25 09:43:08

2012-12-26 09:20:30

2016-09-21 10:10:50

2015-01-12 10:01:35

2014-12-22 10:09:50

工程師

2013-10-24 14:51:52

工程師組織

2013-09-17 13:52:00

工程師產品產品文案

2012-03-31 16:57:52

工程師創(chuàng)業(yè)團隊

2014-10-14 13:34:48

2012-10-10 09:42:58

谷歌測試測試工程師

2010-10-14 10:35:24

谷歌工程師

2018-10-10 16:15:01

團隊研發(fā)效率

2018-02-25 11:00:05

2013-01-18 17:00:20

設計師創(chuàng)業(yè)團隊

2014-06-20 09:16:26

2013-10-12 13:43:14

蘋果工程師

2019-03-21 09:16:44

谷歌Android開發(fā)者

2013-03-18 09:58:52

點贊
收藏

51CTO技術棧公眾號