前段时间在国内各大互联网公司转了一圈。与各位 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亿做为单位来衡量业绩的存在。可是不能否认,因为政策和文化的巨大差别,致使两国的开发环境有巨大的差异。本文抛砖引用,疏漏之处在所不免,我衷心但愿国内外可以取长补短,由于互联网终将拉平整个世界。