創業者們的回憶:那些我們在 Facebook 工作的日子

2015.11.24 by
36氪
36氪 查看更多文章

36氪是中國領先的科技新媒體,報導最新的互聯網科技新聞以及最有潛力的互聯網創業企業。

創業者們的回憶:那些我們在 Facebook 工作的日子
編按:對於一家新創公司來說,一個合格優秀的CTO絕對是可遇不可求的:需要對技術有前瞻,對產業格局有判斷,對管理有心得,情商還不能低。這篇...

圖說明

編按:對於一家新創公司來說,一個合格優秀的CTO絕對是可遇不可求的:需要對技術有前瞻,對產業格局有判斷,對管理有心得,情商還不能低。這篇文章整理自峰瑞資本組織的內部創業公司 CTO 交流會,峰瑞資本技術合夥人、前 Facebook 工程師覃超,以及神州專車 CTO、前 Facebook 工程師徐萬鴻,向創業者講述創業公司應該如何創造自己的工程師文化,以及 Facebook 的招牌產品 News Feed 背後的原理。

一、Facebook 的 CTO 都在做些什麼?

覃超:峰瑞資本技術合夥人,前 Facebook 工程師。

我在 2010-2014 年在 Facebook 工作,主要負責前端行動開發,從 Facebook Phone 到 iOS/Android Facebook App 和 Messager 等做過很多功能。同時我之前做過 PHP 後端的東西。

Image title

Facebook 第一特點就是重視技術兼設計。不像蘋果純設計而 Google 純技術,Facebook 是各占 50%。公司整體裝飾有意外多的藝術元素,而新的總部大樓更是由巨擘 Frank Gehry 設計的。

公司內部的彩虹樣式裝修,是美國最高法院宣佈同性戀合法時加上的,也體現公司對於不同事物的包容和尊重。產品的活力和企業文化包容有很大的關係,所以我建議創業公司不妨都包容開放一點,像是放一個無人機或者 Oculus VR 的眼鏡就很棒。

你可能感興趣:越洋獨家直擊!Facebook新總部大公開

Image title

公司裡還有很多 Poster,其實我覺得這是 Branding 和企業的「政治教育」內容。這些海報並不是專門一個人做,公司每個人都做,且公司有一個房間是專們製作這些東西的材料,只要你把你的設計交給他們,最後海報就會製作出來。

Facebook 另一個特點就是開放,沒有嚴格的許可權控制,例如 iOS 可以看到後端編號,PHP可以看 Android 的編號。任何員工只要在公司的內部網路裡,就可以隨時打開資料展示的頁面,然後看到公司的 MAU(Monthly Active User-月活躍用戶),DAU(Daily Active Users-日活月用戶)以及其他按照地區和功能切分的細節資料。這樣可以節省工作的管理開支,每個人也不會覺得束手束腳。

另外我們的工作空間就是網咖式的結構。這樣有兩個特點,好交流也鬧哄哄。最重要是有 Peer Pressure,比如你遲到或者打遊戲,都會被別人看到。比起其他很多美國公司的好處是,在 Facebook 工作刷 News Feed 或者微博、知乎是不會被限制的。

Image title

公司另一特點是默認給予員工最大程度的信任(按照老美的話說:trust by default),這也是美國文化的特點之一。一進公司就默認對你信任和尊重。它的相對應面是絕對強的執法能力,如果你洩露公司機密,則立馬把你開除。歷史上出現過幾次 Zuck 在 QA 的會議上說的公司機密被洩露的事件,那些洩密者最後基本都被開除。

Image title

一個公司最重要的是氣氛的和諧。不僅是工程師之間,還有和設計師、PM,他們也會參加一些討論,而且大家一定要坐在一起,這樣類似 UI 上細節的問題,比如顏色、畫素對齊等,都可以當面溝通。即使 Facebook 的遠端會議系統和線上溝通工具都已經很健全了,但公司還是鼓勵坐在一起工作。

Facebook 專案的人員配比:一個項目一般是兩三個設計師、5-10個工程師 2-3 個產品經理。每個月一波推進(Scrum 裡強調的 sprint),包括 2-3 個功能,按每個功能分一小組來做,但設計師可能會同時做多個設計。

Facebook 的流程其實比較傳統,但又夾雜很多敏捷開發的元素:一般是設計師先進行設計,然後工程師來開發,但整個過程中雙方又經常有互動。整個產品研發過程中,所有人都互相尊重、互相合作,從一開始設計師、工程師、PM 都會在一起討論,做出來之後還會坐在一起討論,會馬上給一些回饋,然後馬上修改好。

工程師寫程式的時候也會跟設計師一起交流,交流用的是 IRC 外加 Facebook Chat。任務管理方面,Facebook有自己的 Inhouse Task 系統。

最後我們的 IC 、release、monitoring 這些全部都是內部工具,開發花了不少人力,對於新創公司不是特別適用。對持續繼承來說,我覺得最經典的是 Jenkins,但是它的問題就是功能繁複、介面像 80 年代的軟體。如果你們用 Github 的話,我也推薦 Travis CI 和 Drone。

Image title

矽谷公司裡,在開發流程上我覺得最重要的就是:Code Review。

Facebook、Google、Uber 到現在的 Airbnb,無一不是強制要求 Code Review。Code review 過程中,不僅是可以互相檢查對方的程式碼,還可以自動跑 lint 和unit test,對於品質的提高和去除沒必要的bug非常有幫助。

這裡重點推薦一下 Facebook 的 Phabricator。它是個開源的程式審核和任務管理工具;它的其他功能也極其豐富;還可以搭載在私有的伺服器上,使其程式碼和資料不會被盜用。

Image title

最後一點 Facebook 讓我覺得印象深刻的是它對於工程師技術能力的高要求和提供的一整套培訓。另外就是在矽谷公司工作,要學會有效地描述表達一個觀點,逼自己去學和反復複習。我覺得反復的一個過程很重要。反復的過程中,看似在做重複的事情,但是每次我都會意外地迸發出新的靈感。最後對於設計這一塊,我們有一個特別強大的設計工具 Origami,可以很方便做互動設計,並且支援直接生成特效的code。

Image title

二、Facebook 的 News Feed(動態消息)是怎麼做的?

徐萬鴻:神州專車 CTO,前 Facebook 工程師

News Feed 是 Facebook 最重要的產品,有 10 億用戶,平均每個用戶每天會收到他關注的朋友/專頁所推送的 2000 個以上 stories。

  • 即時發佈,不漏掉重要的 story

從發出 story 到其他人接受 story 的時間在1秒之內,其中排序所花的時間在200毫秒之內。Data loss 要小於1E-6,實現這一點的關鍵在於系統架構。

  • 把最好的內容放在前面

使用者更傾向於與頁面前面的內容互動,所以把更好的內容放在前面會帶來用戶在 Facebook 上更大的參與度。實現這一點的關鍵在於 Ranking 部分。

  • 系統架構部分

Push model 和 Pull model 這兩種模型都是可行的。

Push model 寫入多次,讀取一次。如果有一萬粉絲,發佈一條消息,會存儲在每個粉絲那裡,存儲一萬次。這個模型速度比較快,但是需要存儲比較多。Pull model 寫入一次,讀取多次。發佈的都寫在一個資料庫裡,然後每個使用者都來讀這個資料。

Facebook 內部更傾向於 Pull model,因為 Push model 需要太多的存儲空間。

  • Ranking 部分

如何確定哪些是更好的 stories?我們需要給每一個 story 打分數。我們賦予不同類型的行為不同的權重。比如 click, like, comment。這幾種行為中,comment 需要更多的代價。click 的代價很小,而 comment 意味著用付出更多的時間來互動,所以我們會給 comment 更高的權值。

對於每一個 story,我們需要預測這個 story 被推送給用戶後點擊、按讚、評論的概率。這裡會用到機器學習(machine learning)的演算法。先要即時地生成 features,然後要利用資料來 train models,最後 publish models,得到每個用戶對每個 story 的每種行為的概率。

關於個性化的部分,採用的是通用的模型和個性化的資訊。如果能針對每個用戶做不同的 model,效果會更好。但是使用者數目太多,這部分的工作量過大。

同時這也是一個即時回饋的系統。用戶對每個 story 的行為會即時回饋到這個模型裡面,重新訓練模型,讓效果越來越好。

文章授權轉載自:36 氪

@@ACTIVITYID:481@@

延伸閱讀:
1. 曾幫Facebook把用戶做到7億的那個人,告訴你如何實現用戶增長
2. 中國如果開放Facebook會如何?先留言「灌爆」蔡英文臉書再說!
3. 蔡英文和朱立倫的Facebook粉絲團分析

每日精選科技圈重要消息