前段時間在國內各大互聯網公司轉了一圈。與各位 iOS 業界大佬交流了以後,深感國內變化之大,敬佩諸位國內開發者的實力和韌勁。除此以外,我還發現硅谷和國內的 iOS 開發仍是差異很大,且聽我慢慢道來。html
國內使用 SDK 和 硅谷大爲不一樣前端
首先是最本質的三個不一樣:國內的支付使用的是支付寶和微信,地圖使用的高德和百度導航,國內的第三方登陸主要是微博,微信,和 QQ。而硅谷的在線支付方式是信用卡,地圖使用的是蘋果自帶亦或是谷歌地圖,第三方登陸就是 Facebook 和 Twitter。程序員
這三點不一樣意味着開發引入的 SDK 徹底不一樣。在 Uber 被滴滴收購前,其美國的 App 和 中國的 App 徹底是兩個不一樣的 App -- 由於大量 SDK 不一樣致使架構和接口須要從新設計。再加上國內對於數據的嚴格掌控,不少 App 後臺 API 的設計須要單獨處理,流量須要導入到中國境內的數據中心,App 的界面亦要根據中國的網速針對優化。面試
另外,國內開發常常大量的調用第三方的庫。而硅谷的大廠開發基本都是本身開發內部的工具和庫。可能調用開源庫確實比較方便快捷,可是硅谷的大廠考慮更多的是版權和代碼質量的問題,因此在開源或是使用第三方庫方面格外謹慎。算法
國內注重 HotPatch,硅谷注重原生態後端
據我所知,國內開發對於熱補丁情有獨鍾。滴滴就作出了 DynamicCocoa,經過轉化 Objective-C 到 Java 進行熱修復;餓了麼大量使用 Weex 進行移動開發;美團也已經在主 App 裏嘗試了 React Native。微信
相比硅谷,也只有少許小公司開始嘗試 React Native。其主要緣由也是 App 需求相對簡單,跨平臺開發相對輕鬆。大公司幾乎不多使用,就連 RN 的母公司 Facebook 也只是在1到2個小 App 上使用了 React Native。數據結構
我我的推測這其中的主要緣由在,國內開發需求量又多又急,加上前些年 App Store 的審覈很是之慢,因此國人在開發上纔對 HotPatch 趨之若騖。架構
國內要求快速迭代,硅谷要求測試覆蓋app
與百度的開發者交流中,他們常常提到「業務太多,根原本不及作」。因此基本上會有一個單獨的 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億做爲單位來衡量業績的存在。可是不能否認,因爲政策和文化的巨大差別,致使兩國的開發環境有巨大的差異。本文拋磚引用,疏漏之處在所不免,我衷心但願國內外可以取長補短,由於互聯網終將拉平整個世界。