說一下谷歌的開發流程

首先,某 大部分產品線都不區分前端工程師和後端工程師,一我的須要用從前到後都負責開發,儘管這幾年彷佛有變化,能看到專門的Front End 職位了,但應該是不多數產品線的作法。html

 

年前有人去 面試過,和他閒聊後瞭解到某 要求應聘者必須至少要會 C++ 和 Java 中的一種,只會 Python/PHP 是不夠的,要是隻懂 JS 就更不行了。這個信息很關鍵,能用來解釋一些內部現象,後面我會提到。前端

 

我我的認爲前端工程師確實應該瞭解基本的後端知識,某 公司之前不少前端工程師都只負責模板(好比 Smarty)開發,這致使一個很嚴重的問題,那就是前端工程師每每不知道如何搭建環境,開發時須要依賴後端工程師提供環境和數據,嚴重影響了開發效率,這也是爲何 FIS 還內嵌了本地服務功能。node

 

另外國內有公司還對前端工程師作進一步細分,按照職能分爲寫 HTML/CSS 和 JS 的,對於我所屬的團隊,我我的並不贊同這種作法,由於 HTML 和 JS 是密切相關的,這樣分工將不利於代碼管理與優化,尤爲是交互複雜的頁面,由於 JS 很依賴 HTML,拆分反而增長溝通成本,但或許在重運營的網站這麼作會更好。面試

 

代碼管理方法npm

如下是一些零碎瞭解到的幾點:後端

 

內部全部人都能看到代碼瀏覽器

 

聽說在 09 年時某國家的 office 有例外(來自『In The Plex』第 章,內容比較不和諧,這裏就不展開了)性能優化

 

提交代碼須要相關人員的 review前端工程師

 

這使得某 內部工程師能夠很方便地切換項目,不多一我的只負責一個項目框架

 

代碼只有最新版(trunk),沒有 release 版本,沒有版本號

 

通常你們喜歡新增接口

若是要修改原有的接口,就必須通知全部使用方,不過由於全部人都能看到全部代碼,因此很容易找到有誰使用

 

據瞭解某 也是這樣的

有個代碼的搜索引擎

 

我認爲這種方式比讓工程師寫文檔靠譜多了,由於絕大部分調用這個庫的代碼都是類似的,因此直接給出例子能讓別人更容易上手

 

估計和下線的 Code Search 比較像(好像仍是某高管寫的,不過我忘記在哪看到的了)

 

若是想使用某個基礎庫,最好的方法是搜索使用到這個庫的相關代碼,抄過來

 

代碼依賴是經過全局的方式統一管理的

 

我猜應該很相似 Chromium 中的 GYP,熟悉 node 的同窗能夠理解爲 npm,不過是支持多語言的

 

以前在某 工做過的 iOS 工程師也在某篇後來刪除的文章中透露代碼中不放 Xcode 項目文件,而是由工具生成出來(話說這篇文章挺有價值的,惋惜老外不喜歡轉帖,致使如今找不到了)

 

這種依賴管理方式讓人想起某 公司(賣書那個,不是賣水果的)內部完善的 SOA 機制,不過某 喜歡基於 service 來重用,而某 看起來喜歡代碼級別的重用

 

不多使用第三方庫

 

只能選用內部維護的版本,好比相似這個 MySQL

 

會將第三方庫的編譯工具改爲內部的,好比 Chromium 中都改爲 GYP 方便管理

 

聽說想申請用某個新第三方庫須要審覈,週期比較長

 

代碼管理軟件用的 Perforce

 

某 直接將這個公司買下了(未確認,但下面那篇論文是在某 網站上的,因此我感受消息可靠),Perforce 的員工爲某 內部定製了一套代碼管理工具

 

另外我找到一篇 Perforce 的性能優化的論文,這裏面透露了不少 公司內部的代碼狀況(發表時間是 2011 年 月),如下信息取自這篇論文:

 

這個程序用了 17 年,有 千萬次 changelist(能夠理解就是 ci 數量)

 

最大的 client 有 百萬個文件(應該絕大部分是數據吧,要知道 chromium 項目也就不到 30 萬個文件)

 

文檔及相關數據文件也放上面

 

Reivew 工具叫 Mondrian(確認就是 Rietveld 的前身)

 

總體來講某 的代碼管理方式有不少可取之處,尤爲是代碼開放,能最大程度地調動開發人員的主動性與協做意識,從而創造出更大的價值。不過沒有版本管理這點是個雙刃劍,我也沒想好是否這樣會更好。

 

feature flag

 

由於沒有分支,代碼只有一份,因此要實驗新功能就得經過 flag 來控制的,這個 flag 由線上 Borg 系統來管理,能作到針對某一部分的 Cookie 開啓不一樣的 feature,方便進行對比抽樣。

 

若是某個功能最終不上線,後續須要手工刪除相關代碼。

 

這個 flag 開關功能在某 也有,我認爲這是大型網站是必備功能,但須要注意,這個系統自己會成爲關鍵節點,以前某 的相似系統掛過,直接致使整個網站大部分功能都關閉了,因此一旦出問題後果很嚴重。

 

嚴格的代碼檢查

 

聽說某 工程師大部分時間在寫單元測試,單元測試能夠保證 UI 無關代碼的質量,但對於頁面測試就很難了,雖然可使用 selenium,但某 內部你們都不肯意寫,我我的認爲這個問題確實無解,頁面隨便一改就致使大量測試失效,我還沒見任何一家公司解決(某 說他們用的是 Watir,但主要用於保證登陸等基本功能可用),目前看來惟一可行的就是自動頁面截圖 diff,某 在 Consumer Surveys 這個產品中也在嘗試。

 

聽說某 的項目大多沒有嚴格的上線時間點,因此不能以項目緊急爲藉口來不寫單元測試,這點和天朝不太同樣,你們更傾向犧牲質量來追求速度。

 

另外國外公司通常對瀏覽器兼容性問題都不怎麼關注,由於現代瀏覽器中的兼容性問題比之前好得多,這點某 和某 公司同樣,只支持高版本的 IE

 

由於只有主幹,因此提交代碼很謹慎,須要通過 個主要階段:

 

代碼風格檢查

 

應該主要參考這個文檔

 

很是嚴格,聽說還會檢查命名什麼的

 

有段子說 Python 做者 Guido van Rossum 寫的 Python 代碼沒法經過檢查,因此一直沒提交。。。我認爲這是假的,由於他老人家寫的 rietveld 仍是挺符合某 規範的

 

單元測試檢查

 

代碼 owner 的 Review

 

提交一旦出錯可能會致使影響其它人的工做(由於每一個人都依賴主幹啊),甚至遭到其它國家 office 工程師的指責,因此你們對於代碼提交都很是謹慎,再三確認,壓力不小。

 

在單元測試、代碼風格和 review 的執行上,某 作得很完全,這點值得學習,國內你們彷佛更喜歡開發效率而不是質量。

 

前端如何開發

 

除了 GmailMapsPlus 這樣的特例,基本上都是由後端模板生成頁面,不多項目使用 JS 來寫界面,更少使用 MVC 框架,這點其實在不少公司都差很少,好比某 也是同樣的,除了地圖及廣告管家等產品,其它產品基本上都是經過模板生成的。

某 的頁面是一般是由 Java 或 C++ 語言所寫的模版引擎生成的,並且開源出來了,分別是 Closure,Templates 和 CTemplate,話說某 在幾年前也本身寫了個 C++ 的模板引擎,但目前基本被淘汰了。

對某 來講,「前端」工程師要寫 Java 和 JavaScript,而「後端」服務主要是 C++(某些地方開始使用 Go 了,好比這個)。

前面說到招人時都要會 Java這帶來的結果是大多數團隊成員更瞭解 Java 而不是 JavaScript,因而在這種背景下很天然地誕生了 GWT 這個神奇的東西,它在內部不少地方使用,按照內部人士的說法,主要的考慮是:

 

能自動生成跨瀏覽器瀏覽器代碼

 

結構規範,經過編譯器就能提早發現不少問題

 

能使用強大的 IDE 來提升效率(重構、自動完成、方便跳轉到定義等)

相關文章
相關標籤/搜索