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