矽谷和國內的 iOS 開發到底有何不同?
前段時間在國內各大互聯網公司轉了一圈。與各位 iOS 業界大佬交流了之後,深感國內變化之大,敬佩諸位國內開發者的實力和韌勁。除此之外,我還發現矽谷和國內的 iOS 開發還是差別很大,且聽我慢慢道來。
國內使用 SDK 和 矽谷大為不同
首先是最本質的三個不同:國內的支付使用的是支付寶和微信,地圖使用的高德和百度導航,國內的第三方登錄主要是微博,微信,和 QQ。而矽谷的在線支付方式是信用卡,地圖使用的是蘋果自帶亦或是谷歌地圖,第三方登錄就是 Facebook 和 Twitter。
這三點不同意味著開發引入的 SDK 完全不同。在 Uber 被滴滴收購前,其美國的 App 和 中國的 App 完全是兩個不同的 App -- 因為大量 SDK 不同導致架構和介面需要重新設計。再加上國內對於數據的嚴格掌控,很多 App 後台 API 的設計需要單獨處理,流量需要導入到中國境內的數據中心,App 的界面亦要根據中國的網速針對優化。
另外,國內開發經常大量的調用第三方的庫。而矽谷的大廠開發基本都是自己開發內部的工具和庫。可能調用開源庫確實比較方便快捷,但是矽谷的大廠考慮更多的是版權和代碼質量的問題,所以在開源或是使用第三方庫方面格外謹慎。
國內注重 HotPatch,矽谷注重原生態
據我所知,國內開發對於熱補丁情有獨鍾。滴滴就做出了 DynamicCocoa,通過轉化 Objective-C 到 Javascript 進行熱修復;餓了么大量使用 Weex 進行移動開發;美團也已經在主 App 里嘗試了 React Native。
相比矽谷,也只有少量小公司開始嘗試 React Native。其主要原因也是 App 需求相對簡單,跨平台開發相對輕鬆。大公司幾乎很少使用,就連 RN 的母公司 Facebook 也只是在1到2個小 App 上使用了 React Native。
我個人推測這其中的主要原因在,國內開發需求量又多又急,加上前些年 App Store 的審核非常之慢,所以國人在開發上才對 HotPatch 趨之若騖。
國內要求快速迭代,矽谷要求測試覆蓋
與百度的開發者交流中,他們經常提到「業務太多,根本來不及做」。所以基本上會有一個單獨的 QA 團隊負責測試,而開發者則是不停的寫新的代碼。
這一點與矽谷在對測試的態度上大相徑庭。Google 對於代碼的測試覆蓋率有嚴格的要求和審核標準,Yahoo! 甚至在開發中要求採用 TDD (Test-Driven Development),Facebook 所有的代碼也都用持續集成測試來保證其質量。在 《The Clean Coder》一書中,作者也多次強調代碼質量的測試的重要性。我之前在工作中,有時候甚至出現寫的測試代碼數量超過開發代碼的時候。
造成這一差異的本質在於兩國競爭模式的不同。中國人口巨大,競爭對手太多,所以資本的打法就是快速迭代,小步快跑,擠垮對手。面對這樣的模式,中國的工程師也只能暫時放棄完善測試代碼,將有限的精力集中在開發上。
Swift 與 Objective-C 的爭論一直不絕於耳
國內和矽谷對於 Swift 的看法大同小異
前段時間唐巧老師發表了他對 Swift 的看法,他認為 Swift 是未來,但是現在不太完善,要「再等等」。無獨有偶,卓同學發文則認為,Swift 已經開始流行起來,應該「快上車」。
我在這半個月杭州、北京、上海之行中發現,幾乎大廠開發都用 Objective-C,他們對 Swift 依然心存芥蒂;而小公司和獨立開發者,則是對 Swift 充滿期待。原因很簡單,大廠需要的是穩定的產品來維持口碑,對於 Swift 這樣重寫並不能帶來巨大好處的冒險之舉自然是諱莫如深。而這個原因對於小公司或者個人來說並不成立。
其實國外對此也一樣。唯一不同的是,可能矽谷要略微激進一點 -- 大廠已經開始部分嘗試 Swift 了。Google 在某些新產品和新功能上已經開始用 Swift,Facebook 和 Twitter 都放出了自己的 Swift iOS SDK;LinkedIn 開源了 LayoutKit,Lyft 開源了 mapper,而這些都是用 Swift 寫成。
就連矽谷的獵頭都開始急著尋找擁有 Swift 開發技能的工程師了,而就在去年,Swift 在職場上還是被作為一項可有可無的加分技能來對待。
雖然矽谷在 Swift 上走在了前面,但是不得不說開創性的嘗試總是要付出代價的。當年 Uber 在開發新 App 時採用了全 Swift 模式,結果因為 Swift 編譯速度不佳和語言功能不全,開發效率大打折扣,內部工程師在采坑過程中無比頭疼。所以 Swift 雖好,可不要貪快哦。
國內 iOS 職場與矽谷有很大差別
這個話題有點大,我從四個方面來說。
兩者對於 iOS 工程師的需求量不同
國內現在處於一個 iOS 工程師飽和的狀態,水平一般的 iOS 開發者多如牛毛,而高手卻屈指可數。這就造成了一個情況,公司招不到素質過硬的工程師,而很多新手找不到工作。
作為生活在美帝多年的土包子,我對這個問題百思不得其解。因為矽谷一直是程序員的天堂,一個美帝計算機專業的畢業生,可以隨便就找到一個年薪10萬刀的工作。在這之中,iOS 工程師更是奇貨可居。按照道理來講,美國這麼多年大量輸出計算機本科生,矽谷居然還缺工程師,而且連剛畢業的新手都搶手。為什麼國內反而卻飽和了呢?
這個問題直到我遇到了滴滴的 Sunny 才想明白。
他告訴我,國內有 iOS 培訓班這種東西。這樣,工程師可以流水線快速訓練出來,他們會帶你刷面試題,教你如何拿 Offer,甚至幫你把 Github 和 博客都弄好。再加上前段時間中國處於全民創業的狂潮之中,各種初創企業對 iOS 工程師需求巨大,導致這種培訓班居然大行其道。而現在市場回歸理性,對於程序員的需求量減少,於是很多剛剛流水線出來的 iOS 菜鳥自然無處可去。
產品經理 (PM/PD)素質的差異
之前老聽說國內程序員追著產品經理砍的故事,我只當成是個事故,一笑置之。因為矽谷的產品經理大多和程序員和睦相處,至少在我印象中,工程師和產品經理的矛盾要遠遠小於上下級的矛盾。
後來發現,在國內,我以為的並不是我以為的。
國內產品經理基本上就是剛畢業的新人,沒有什麼實戰經驗,有些都不懂技術。而最重要的開發需求和任務往往是他們提出和分配。這就造成了一個奇怪的現象:一群經驗豐富的 iOS 專家,團結在一個不怎麼懂技術的產品經理周圍,做開發。
矽谷則對產品經理要求頗為嚴格:口才和技術是兩個必備的技能,很多產品經理甚至是資深程序員轉型。一般產品經理也是作為部門經理的接班人來培養的。
面試流程不一樣
我說實話,國內大廠考得要比矽谷難。我回國之前就發現騰訊筆試好幾張卷子真不好做,面試考得也異常全面。百度甚至考出了紅黑樹這種變態的玩意,還有公司問 autorelease pool 是用什麼數據結構寫的。
矽谷每個公司的面試流程則不盡相同。谷歌是比較極端的考 4 到 5 輪演算法,亞馬遜與此類似,這種標準化流程讓這兩家損失掉很多優秀的工程師 -- Homebrew 的作者 Max Howell 因為不會在白板上翻轉二叉樹而被谷歌拒絕的事情現在還被大家拿來吐槽。相比 Facebook 的面試還比較靠譜,一輪交流,問問簡歷和文化;一輪系統設計;兩輪演算法。我個人面過最實際的還是 Uber 的 iOS 面試:一輪交流,一輪系統設計,一輪上機實戰寫 App,一輪演算法。
總體來講,國內面試偏向考試,難度大,要求全面。矽谷的面試側重演算法和基本功,有時候脫離實際。
職業走向
據我所知,國內很少有幹了10年以上的開發者,很多程序員幹了幾年就做管理了。這可能是因為國內程序員確實很辛苦,阿里這樣的大廠996都是常態,在這種情況下碼農、搬磚這類熱詞應用而生。但同時中國很多優秀的開發者,可能是前端、後端、移動端都有幾年經驗,技能十分全面紮實。
而矽谷有很多寫了10年以上經驗的極客程序員,他們熱衷寫代碼卻不喜歡管理工作。我在美帝待得這幾年,幾乎沒有聽到國外程序員抱怨自己辛苦,像Google,Facebook 這樣成熟的美國互聯網公司很少出現加班情況。矽谷的開發者可能一輩子只鑽研一塊,比如只會前端或者後端。但這並不妨礙他們在喜歡的領域成為超級專家,這也十分受人敬仰。
總結
雖然中國的網民數量在 2008 年就超過了美國,儘管中國的互聯網公司是唯一同美國一樣使用10億作為單位來衡量業績的存在。但是不可否認,由於政策和文化的巨大差異,導致兩國的開發環境有巨大的差別。本文拋磚引用,疏漏之處在所難免,我衷心希望國內外能夠取長補短,因為互聯網終將拉平整個世界。
閱讀原文
推薦閱讀:
※「流量融合SDK平台」作為手游渠道,是便捷還是坑?
※如何創建有效的推送
※手游第三方服務商興衰史:建立核心競爭壁壘方能始終
※廣告sdk竊取用戶隱私:你家的App被下架了嗎?
※張明雲的Live——安卓 SDK 開發實戰經驗分享