ZKIZ Archives


如何將你的新工程師迅速調教成一隻老鳥

http://xueyuan.cyzone.cn/guanli-HR/235105.html

前言

第一次覺得有興趣介紹新兵營文化是和王建碩聊天的時候。當時我在百姓網裡做Advisor, 瞭解到他們也有類似新兵訓練營(即如何讓新來的員工迅速融入到公司文化中進行高效協作)的項目,一開始也是向Facebook學習,但在具體的操作上都在很小心的摸索,所以我們進行了比較深入的探討。本文將分多篇來介紹新兵營計劃的內容,背後的理念和操作上要注意的細節問題。本文節選自即將於12月份出版的新書《我在Facebook的日子 – 打造Facebook》。

什麼是新兵營

其實,扎克伯格在2012年2月宣佈IPO時對外發表的公開信裡說得很清楚:「……Facebook要求所有新入職的工程師——包括那些將來並非主要從事編程工作的經理——參加新兵訓練營(Bootcamp),學習我們的代碼庫、工具和方法。業內有許多人負責管理工程師團隊,並不願親自動手編寫代碼;然而,我們尋找的實踐型人才都希望也能夠經受新兵訓練營的檢驗。」

沒錯,新兵訓練營,其實也是菜鳥養成營,其目的就是讓新來的工程師和產品經理接受為期六週的集中培訓以盡快融入公司之中,更為順暢地開始工作。可是,這有什麼稀奇的?很多公司都會為新員工指定一個導師啊。但是,Facebook的做法明顯區別於他們。

為什麼要有新兵訓練營?

先談談新兵訓練營的歷史。

新兵訓練營計劃並不是從公司一成立就有的。我加入Facebook的時候還沒有這一計劃。我進入公司時,第一個月裡找了一堆有問題的代碼來修改,通過這些工作接觸並認識了很多朋友。第二個月,我選了一個大概長度為一個月的項目自己玩,也沒什麼人來管。就在這些練習中慢慢地認識公司的人,學習公司的文化,並逐漸融入Facebook。但是隨著公司迅速發展、員工不斷增多,無計劃的自學式的方法無法迅速地幫助大量新員工高效融入到Facebook,所以從2008年中開始,Facebook開始系統性地設計和試驗新兵訓練營計劃,並在實踐中不斷改進。很快,這個計劃變成了所有新加入的工程師都要強制參加的培訓計劃。對於產品經理,原則上也要求他們參加。由於產品經理進來的時候都已經確定好去某個組,不像工程師,大部分都沒有確定去向,所以如果產品經理的老闆有特殊要求的話則可以不經過新兵訓練營而直接開始工作。這種情況比較少見。

這一計劃的主要推動者是安德魯·博斯沃斯(Andrew Bosworth), 博斯沃斯是公司文化的主要捍衛者,「上帝不允許我們有一天不為Facebook的未來做準備。我們曾見過一家又一家的公司在做大後因為規模陷入麻煩,或因為文化陷入麻煩。」在2008年初,他開始意識到,Facebook的文化可能面臨挑戰甚至失敗。他剛進公司時,所有人都彼此認識,可是2008年夏季的一天,當他在公司的餐廳排隊時,遇到了一位之前從未見過的工程師。於是博斯沃思問他,在公司幹了多久;對方的回答讓他震驚:一年。他感覺有點不對勁兒。「我們是Facebook,如果我們不能規劃一個超過150人的溝通網絡,就真的有麻煩了。」他這麼想。我在Facebook這四年半,一開始幾乎每個工程師都互相認識,但人員的迅速增長,讓這一點變得不可能。如何有效的讓最適合(潛在)合作的人互相認識,有信任感,來保證項目的高效完成,成了Facebook這麼些年很大的一個挑戰。等到項目開始的時候參與的人員才開始互相認識,那麼磨合期會更長,磨合成本會更高。

2008年中,正是新員工如潮水般湧進公司之際,作為公司整個文化培育行動的一部分,新兵訓練營計劃登場了。這項計劃就是為了讓新工程師們認識公司裡面相關的人,瞭解公司的文化,瞭解公司的技術與產品,從而能迅速地融入Facebook,並找到適合自身能力和興趣的小組(即通過這個過程確定他的具體工作職能)。

新兵在這六週裡究竟要做什麼?

第一週的週一,新來的工程師們在公司自助餐廳裡和負責他們的導師(Mentor)吃完中飯後,為期六週的強制性訓練營就拉開了序幕。這位導師將全權負責回答新人們的各種問題,從工作,到生活,到八卦,如果新人真的感興趣的話。簡短的介紹之後(博斯沃思和其他老員工會在這個環節介紹公司的文化),每人會分到一台電腦和一張辦公桌。第一次打開電腦時,他們會看到6封電子郵件,其中1封是歡迎信,另外5封介紹了他們將要執行的任務,包括修復Facebook網站上的錯誤。訓練的目的很多,其中之一就是讓新員工充分認識到,他們擁有直接改變Facebook網站的力量。

Facebook很希望工程師在第一天就把所有的編程環境都設置好,在第一天就提交代碼 [1]。這樣可以在週二參與每週例行的代碼發佈活動,將代碼同步到Facebook幾十萬台服務器中。Facebook並不希望新人在第一天提交複雜的代碼,基本都是很簡單的改變;希望通過練手讓工程師能迅速瞭解整個流程,迅速進入角色。

頭三週有很多課程要上。一般公司的COO(首席運營官),CPO(首席產品官),工程副總裁都會在第一週給新人們介紹各個部門概況,給大家一個全局的認識。第二周,重點在於公司各個重要產品,常用的技術框架和技術工具的介紹。第三週,集中在公司的運營(包括市場,銷售等部門),商業模式(Facebook主要的廣告模式和虛擬貨幣的盈利手段)和其他非產品技術部門的介紹。

從第三週開始,新人們就開始接觸很多相關的需要招人的組,和這些組的經理交流,瞭解這些組的產品,參加這些組的會議和討論。一般要求在第三週的週末,新人要選出不多於三個組作為他們感興趣的備選組。接下來每一週的事情就是進一步縮小目標範圍,以達到在第六週時只剩備選組的目的。這個組當然就是新人最後要加入的組。

從第一週到第六週,所有新人60%以上的時間,都需要花在修復代碼錯誤上面。其他所有的事情應該在剩餘的40%時間內完成。Facebook相信,讓工程師融入公司最好的辦法是通過代碼的交流。畢竟,產生高質量的代碼的確是所有工程師最主要的工作。

誰可以做新兵訓練營的導師?

導師需要對公司文化有比較強的認識,一般要在公司呆過一年以上。自願擔任導師者一般是想發展成人事經理(People Manager)的,也就是對人員管理、對與人打交道感興趣的人。

既然作為公司整個文化培育行動的一部分,那麼如何產生出新兵訓練營的導師則是其中的關鍵。首先,他需要對公司文化有比較強的認識,一般要在公司呆過一年以上,當然越久越好。我在2010年中開始做新兵訓練營導師時已在Facebook超過三年;和我同期的導師有一位比我還要早一年。其次,做導師是自願性質的(也可以由老闆推薦合適的工程師去擔任),只要你有意願就可以提出申請,但也需要得到你老闆的同意,因為做導師需要佔用1/4強的正常工作時間。對自己要求高的人並不會因為做導師而讓自己的績效降低1/4,所以這意味著要擠佔自己一部分業餘時間。

通常,自願擔任導師者一般是想做人事經理的,也就是對人員管理、對與人打交道感興趣的人。現在Facebook硬性規定,所有可能升職為經理的候選人,必須至少做一期新兵訓練營的導師。比如我就是在升職為經理之前,被我的老闆推薦去做過兩期的導師。另外,做導師一般要求是技術牛人,因為在訓練營裡,新員工每天都要完成大量具體的技術任務,需要導師在必要的時候在技術問題上加以指導。導師也要有能力在結束時準確判斷新兵們的能力和所長。

截至我離開Facebook時,大概每兩週會進來一批新工程師,那麼每期新兵訓練營是六週,每期有2~4個導師,每個導師要帶5~9個人,大概每週需要花10~20小時的時間。所有的導師有一個負責人,就是博斯沃斯,他還有一個助手,負責所有的導師和新員工的分配,基本上是把背景類似的(比如校友、原同事、有相同的技術興趣點等)分配給同一個導師,這樣每個小組裡成員之間更好溝通。

導師需要做什麼?

新員工在訓練營裡60%~70%的時間要用在修改程序錯誤上,而遇到任何困難,都可以尋求導師的幫助,關鍵是方法、理念、文化的傳遞。

那麼,導師具體要做些什麼呢?新員工有任何問題,尤其是關於公司文化的,除了嘗試自己解決以外,都可以尋求導師的幫助或指導;導師不會在任何時候給新員工臉色看,而是會全力支持他們的學習。

首先,導師每週和被指導的新員工做「一對一」的重點討論,比如他最近的學習進展,表現如何,哪些方面做得好,哪些方面需要加強。公司要求導師對新員工給予最直接的反饋,以幫助他們迅速成長。另外一個交流的重點是對於公司內現有的哪些團隊和項目感興趣,因為新兵訓練營的最終目的就是讓他們順利融入公司,找到合適的小組。什麼才算是合適的小組呢?從新員工的角度來說,就是既能發揮他的長處,又是他感興趣的;從公司的立場看,當然希望重點的項目能夠得到合適的人力分配。如果能做到雙方都滿意的匹配,就是理想狀態了。Facebook非常鼓勵員工到他感興趣但不熟悉的領域,這樣可以給一個項目帶來新鮮的視角。當然,這麼做的前提是這些人是很聰明的、非常有學習能力的工程師。


其次,導師每週都要參加導師碰頭會,參加者包括所有正在訓練營的導師、博斯沃斯及其助手,會議就訓練營中遇到的一些具體問題進行討論,找出解決方案。大多數時間會花在一些表現特別出色或特別遜色的新兵身上,如果沒有這兩類人的話,會提早散會。對於表現特別出色的,導師要著重考慮哪些組最適合這些能力強悍的新兵。公司希望將最好的新兵用在最重要、最需要他們特長的崗位上。有好幾次,在一期新兵營剛開始的時候,幾個組的組長都發信要招同一個人,這樣的「搶人」就需要在碰頭會上商量如何進行引導和解決。對於表現特別遜色的,則會花時間討論如何幫助他們改變以有所起色。因為,對於通過Facebook層層面試的人,公司相信他們還是有實力的。不經過多次努力,公司不會輕易得出他們不適合Facebook這一結論。

還有,導師會分配一些代碼錯誤給新員工進行修補,這類任務通常會佔到新員工60%~70%的時間。設想一下,作為一個新人,你的工作成果很快就被數以億萬計的用戶使用,多麼有成就感的事情!這樣做可以給他們極大的自信。修改錯誤的過程中,新員工可以瞭解到相關項目的前因後果,需要跟相關程序的小組及工程師打交道,熟悉很多內部工具……這就又回到了新兵訓練營的最終目的上——幫他們找到最合適的組。

如果新工程師在修改錯誤時遇到了困難,那他是先跟自己在訓練營裡的朋友互相商量,一群菜鳥找出答案來,還是直接尋求導師的幫助呢?當然,菜鳥互幫互助是最受鼓勵的,解決問題的方式往往不止一種,而是有很多,每個人都可以構想自己的方法,自己什麼嘗試都沒做就直接問別人則是非常忌諱的。如果實在不行、確實需要找導師時,導師往往也不會給出直接的答案,而是告訴新人們,可以去找代碼錯誤涉及的原先的工程師聊聊,哪些人對這個部分更瞭解。正如中國的諺語,「授之於魚,不如授之以漁」,希望新員工能夠自己去思考這些遇到的問題,然後找出解決方法;當然,也不能在困難面前自己一個勁死磕,要學會適當尋求別人的幫助。一個簡單的原則是:至少要在相關的代碼裡花了半小時而沒有任何頭緒,這時候才適合去尋找導師或者問相關的工程師。這樣你在和導師或者相關工程師請教的時候,可以在解釋完遇到的問題之後,再迅速描述你已經查看的代碼和已經排除的一些假設;當別人知道你做過功課的時候,會更加願意幫你。不懂就問,而不是自己先鑽研的人,在Facebook不受歡迎。

訓練營裡很多時候碰到的情況是,解決一個問題其實有好幾種方式,但新員工還不明白哪種方式是Facebook通用的,這個時候導師可以告訴他去代碼庫裡看看其他類似的地方是怎麼處理的,看以前的工程師是怎麼做的,重複這種方式保持一致性一般沒有問題。所以如何高效地做代碼查看成了每個員工都要學會的技能。

如果涉及的是具體產品的技術性問題,Facebook不建議導師進行深入的幫助,因為這樣就變成我來幫助你做一件非常具體的事情了,而關鍵的是教給新員工方法、理念、文化上的東西。

如何為新員工找到合適的工作職位

導師在跟幾位需要招人的經理討論之後,就會安排大致匹配的新員工與之見面,通常是經理在做「推銷」;而新員工好比是在「面試」那些小組,最後由他決定自己想去哪個組。

為了讓合適的組找到合適的人,新兵訓練營負責日常運營的人(博斯沃斯的助手)會在每一期開始前一週把所有新兵的簡歷E-mail給有招人名額的經理。如果經理看到一個特別合適的,新兵營會配合這個經理去引起目標人選的興趣,比如說會鼓勵他參加該組的討論會,多分配該組相關的代碼錯誤修改任務等。但最後能不能成功,最大的決定來自於新兵本人。

另外,導師也會主動跟目前需要人手的那些組溝通,看自己負責指導的新員工更適合哪些項目。Facebook專門有一個頁面,叫團隊優先級頁面(Team Priority Page),負責產品技術的各個組都可以把自身的用人需求放在上面,還有一個由博斯沃斯和工程總監們組成的委員會,每兩週開一次會,討論每個組的用人優先度。博斯沃斯的強勢在這個會議上大有用處。根據這些情況,導師會跟相應的幾個經理做一些探討,比如挑幾個最重要的組當中要招人的幾個職位,看起來跟自己的所負責的新員工背景比較符合,進行一個大致的匹配,相當於導師幫新人做了一次初選。畢竟讓一個新人在完全沒有指導的情況下去瞭解每個組,效率太低,也不現實。導師再鼓勵新員工去跟這些備選組的人去接觸、溝通。

導師每週都會對所指導的新員工進行評級(有Rockstar—明星,Solid—紮實,Shaky—搖擺這幾個級別)並簡要地評價,說明他水平如何、有什麼特長、對哪些組特別感興趣等,這些評價整理彙總之後會發給所有的經理,所以他們對新員工的能力也有了大致的瞭解。

導師在跟幾位經理經過討論之後,就會安排大致匹配的新員工與之見面,一般半個小時左右,通常是經理來介紹他的小組在做什麼項目,需要招什麼樣的人,這項工作的意義何在,這個小組對整個公司有什麼意義等,相當於在做「推銷」;而新員工主要是聽,好比是在「面試」那些小組,最後由他決定自己想去哪個組。

除非有特殊情況,一般某個新員工選定的組都會接收他,不能拒絕。因為如果你拒絕的理由是「他不行」的話,那不如解僱他,而不是說你不願意讓他到你的組、但可以到其他組,這種想法違背Facebook的文化。我在前面就強調過這一點,「我們都是為Facebook工作的,而不是為了某個小組工作」,所以如果你覺得某個新員工不行,那其他組也不應該要他。如果原因是「他的背景不適合」,那一開始就不應該見面會談。導師極力避免把新人介紹到明顯不適合的組裡面,所以這個理由也不成立。

這種討論既可以由導師發起,也可以由需要用人的經理發起。比如我曾在新兵訓練營裡指導過一個之前在Google的資深工程師(Senior Staff Engineer),原先在Googe屬於前3%行列的,水平很高,沒過幾天就有好幾個組的經理跟我說想找這個人談談。當然,這種情況下,我不希望經理直接去找這個人。我要先做個篩選,畢竟對雙方都瞭解的只有我一個人,如果是我覺得合適的組,再轉給該工程師看他是否感興趣。另外,就是避免過度的「推銷」,這會讓員工迷惑、陷入過多選擇。畢竟對Facebook很重要的組有很多,有趣的組也很多,如果每個組都來向新人推銷一遍,新人的想法就混亂了,反而沒辦法做出選擇。

導師還有一個很重要的任務,就是當某幾個特別重要的崗位急缺人的時候,要花力氣去「忽悠」合適的人到這些組去。這個時候,導師會循循善誘,極力爭取喚起新人對這些組的重要性的認同和對其業務的興趣。我做過幾例這樣的推銷工作。老實說,這不是最自然的匹配方式,因為在這種時候誘導性太強。

在新兵訓練營結束後,也會發生淘汰的情況,但幾率很低。印象中,在我離開Facebook時,像這種情況淘汰掉的總共不超過10個人,而經過新兵訓練營的工程師和產品經理一共大概有500多人,淘汰率不到2%。

在我曾經帶過的一期當中,有一位伯克利畢業的專攻機器學習(Machine Learning)的博士,美國人,有三年多工作經歷,很年輕。他很聰明,但有典型的博士風格——凡事都要弄得特別深入、特別細緻。這樣導致了一個問題,速度太慢。一個我自己去做只用一兩個小時完成的代碼修復,一般期待新人最多半天,但這位兄弟為了把前前後後弄得一清二楚花幾天時間都搞不定。我們之間有過多次關於質和量如何平衡的討論,也達成了他應該加快速度、增加產出的結論。我在多次的表現評級上都給了他「搖擺(Shaky)」的評價,但似乎改善不多。在第四周,我們給了他最後的機會,讓他嘗試給動態消息組的機器學習算法部分做一個改進。機器學習算法的一個特點是對試驗的設計、數據的獲取和分析要求很高,相對於其他的產品項目,對質量的要求要高,速度的要求較低,比較適合研究型人才的胃口。所以,這種安排也是希望能讓他更容易展現自己的特長。從組裡的反應來看,對他的表現還算滿意。最後我們就讓他進了這個組,沒有讓他走人。對於表現不良的新人,雖然總體上Facebook是求快,但對於在某方面有造詣的工程師還是儘可能為他尋找合適的崗位。

這裡面其實也反映出一個問題,就是研究型人才如何在一家步伐很快的技術公司立足。Facebook也在慢慢地摸索。

就我個人做導師的經歷而言,新兵訓練營結束後我還會繼續跟蹤(這不是公司統一要求的)。新兵營畢業後一個月和三個月後,我會跟這些新員工再進行「一對一」談話,看他們感覺怎麼樣,新兵營對他們有沒有幫助,是否適應目前的工作,有沒有文化溝通上的衝突等。

訓練營不僅是新員工培訓班,也是經理培訓班

對於快速成長、規模不斷擴大的Facebook來說,新兵訓練營還是一個培養一線管理者的好地方,並有效地保持了自身的文化特色。

對於成立於2004年的Facebook來說,如何在快速成長中保持自身的文化特色(本書相關章節會專門講到公司的文化),如何在新工程師潮水般湧進公司時仍能以一貫之,就必須有一批新的一線管理層做基礎。新兵訓練營看似只不過是個新員工培訓班,但就像我們上面介紹的那樣,做導師的基本都是潛在的經理候選人,他們在訓練營裡同樣獲得了寶貴的領導經驗。他帶著5~9個新員工,就像一個小團隊,討論遇到的各種問題;在指導新員工如何解決問題的過程中,他可以學到管理技巧。

這種培養管理者的程序特別重要。因為Facebook從一開始就是由幾個20來歲、沒有職業經驗的年輕人成立的,之後的工程師主體也大多是這樣的年輕人,其中很多都沒有在別的公司工作過,儘管在打造網站方面做得非常出色,但對於公司文化的可持續性實在沒有把握。由於Facebook的結構非常扁平,一線管理層作為整個工程師管理的基礎,有一個系統性的培訓機構能持續性的提供新的經理,對於公司的發展是非常重要的。

新兵訓練營在這方面起到了不可忽視的作用。

備註:[1] Facebook代碼產生的過程包括寫代碼(write code),測試代碼(test code),審查代碼(review code),提交代碼(check in code),發佈代碼(release code)。寫代碼指在自己的開發機器上做好修改,這些修改只存在於自己的開發環境中;測試代碼指在本地端測試自己的修改以保證修改不引入明顯的問題;審查代碼指找合適的工程師同事來查看待提交的代碼;提交代碼是將經審查的代碼提交到服務器端的代碼庫之中;發佈代碼是將提交的新代碼同步到所有的服務器端讓最終用戶使用新的功能。


PermaLink: https://articles.zkiz.com/?id=39749

Next Page

ZKIZ Archives @ 2019