@liuhui0803
2018-03-14T13:21:40.000000Z
字数 7668
阅读 1663
Android
ReactNative
Grab
移动
移动应用开发
摘要:
本文简要剖析了Android生态系统在开发栈方面的现状,以及不同竞争对手围绕Android,从开发体验、应用商店、广告渠道三大领域与Google展开的战争。
正文:
声明:本文纯属个人观点,其中很多可能并不正确,所有言论与我的雇主(Grab)无关。请用批判的思维阅读本文,或者干脆不要读也无所谓的。
我来了,又一次,正在飞往雅加达的航班上撰写这篇文章。这似乎已经成了我的习惯。
至今我依然不能完全肯定,当初那篇“我为何从Google离职”博客文章怎么就引起了那么大的关注。基本上我只是表达了“我就是一个喜欢频繁换工作的普通人……”之类的观点,差不多就这意思。可就这么一篇文章被翻译成了大概80种语言,甚至变得比Natalie Portman的两性专栏更火,老实说,她的专栏内容可有趣多了。
也许可能那一周没有其他更劲爆的新闻了吧,或者只是因为Medium的用户数又再攀新高?Medium是个很棒的平台,回首以前写博客的日子,我还曾期待着Google能提供一种类似的创新式产品呢,不过……后来,你懂的。
任何时候,我的文章总能收获一些有趣的回复。有位来自巴基斯坦的伙计提出,如果我凑巧路过他的地盘,他要请我喝啤酒。伦敦有人说愿意花一千美元跟我煲一小时电话粥,想跟我聊聊搜索市场之类的话题,不过我很礼貌地拒绝了,因为其实我根本啥都不懂。还有一位俄罗斯童鞋甚至在一场派对中找到了我,并跟我说:“你正在到处树敌”。太有趣了。
此外还有很多人对我的观点有很多误解,不断有人问我:“嘿,你的新东家不就是做网约车的吗?”我曾试图绘制一张更宏伟的蓝图,不过似乎并没有太多人完全理解,所以我猜自己可能在这方面并不太擅长吧。下次如果有机会的话,我想试试能不能讲得更透彻一些。
但今天还是说点别的吧。今天,我想谈谈Android:作为局外人兼业余Android/iOS开发者,我自己对Android的看法。考虑到“麦芒落进针尖里”这种事不可能连着发生两次,我也可以放心假设本文不会像上次那样突然就火到不行,今天,这件事,我只说给你听。
最近我们要招募移动开发者,所以又开始考虑Android的各种事宜。你也许觉得招聘开发者是个再简单不过的事,但实际上开发者是目前市面上最抢手的资源。Grab需要开发者,每个人都需要开发者,可开发者的数量严重不足。看谁运气好能抢到吧。
为什么每个人都需要移动开发者?因为Web正在慢慢死去。我的一些友人(也许是“前友人”)就职于Google的几乎每个部门,他们经常向我展示一些结果很悲观的图表,无论怎么切片查看,随着整个世界愈加移动化,Web都在稳步衰退中。见鬼,你也许还记得Facebook从Web为先向移动为先的转换过程,这事是什么时候开始的?八年还是九年前?Facebook可是差点就挂了。我是说,虽然并没有一夜之间突然完蛋,但当这家公司意识到自己必须转型成移动公司,否则必然被历史遗忘时,他们就开始面临严重的生存焦虑。
他们设法做到了,但毫无疑问这个过程异常困难,因为Android开发栈是全世界最大的“便便三明治”。
Google的大部分工程师在移动或Web编程方面实在是太自大了。“我不做前端”,他们用自傲的声音高声宣告着。这其中甚至存在一种我称之为“DAG蔑视(DAG of Disdain)”的现象,DAG是指有向无环图(Directed Acyclic Graph),有点类似于流程图的东西。在这个鄙视链中,使用C++写代码的,崇高的搜索工程师位居最顶部,人们认为C++比Java酷,而Java又比Python酷,Python则比JavaScript酷。而搜索无疑要比广告酷,广告要比应用酷,应用则比工具酷,工具比前端酷。以此类推。程序员们喜欢互相鄙视。如果你倒了八辈子霉成为Google的移动工程师,就只能跌落鄙视链的最底端,其他所有人都位居你的上位,大家都在俯视你。
但当我一个人亲自逐一完成所有这些工作,从系统编程到大规模数据工程,再从编译器设计到服务框架开发,从游戏开发到Web开发再到移动开发,我可以向你保证前端编程哪怕不会更难,至少也和其他工作一样难。后端的一切都显得那么美观、简洁、有序、分布式、可并行;尽管已经过了25年,但相比乱七八糟的Web开发,后端开发依然美好如天堂。如果再和包括iOS在内的移动编程那种“便便三明治”相比,哪怕Web编程也会显得犹如巴厘岛度假那般美好。
Android呢?没错,Android就是最大的“便便三明治”。如果你不介意的话,完全可以说Android开发者都是英雄。为Android开发诸如Google Maps、Facebook或Snapchat这样的大型应用……说起来……你绝不会相信我的看法。哪怕只修改了一行代码,也要坐等20分钟才能知道结果。你的每次改动,无论多么微不足道,都有80%的可能首次尝试就无法生效,因为Android的特征互操作性矩阵简陋到让人吃惊。你当然可以使用X,也可以使用Y,但你就是不能同时使用X和Y,反正就是不行。
设备兼容性这事更是没法说。我的作品在Google Play Store有很多愤怒的一颗星评论,因为我开发的Wyvern游戏就是会随机地无法在LG的设备上运行,为了重现Bug,不得已的我只能去eBay买了个售价60美元的低端LG设备(而不是600美元的高端货),然后发现,嘿,获取鼠标点击事件的Android API有两个,而其中一个就是不能在LG的设备上使用。
拜托……
事情实际是这样的:很多厂商,无论规模大小,都会用自己的框架替换Android框架。这种做法不光发生在缺少的功能对应的支持库上,而是普遍存在的情况。甚至有些厂商会全面替换Google的整个Android开发栈。微软有Xamarin,Adobe有Cordova,Facebook有React Native,这简直是疯了。再仔细看看,还有Framework7、Appcelerator Titanium、Onsen、Sencha、Kendo、XDK、Ionic、Mobile Angular、Unity……讲真,这到底是要闹哪样?
就好像每个尝试过Android开发的人都会在放弃之后说一句:“局面太糟糕了,我要自己成立一家创业公司,创造更美好的明天。”
而Google呢,也没比他的竞争对手好多少,对此问题只是说:“是吗?但你是没法战胜我们的,因为我们自己都在左右互搏!”,然后Google就发布了Flutter,这是一种专为与原生Android竞争而生的Android开发栈(这说法可不是我编造的),而Android团队甚至拒绝承认它的存在。
能活着真好。
这些开发框架的问题在于,会让Google变得非常脆弱。大部分此类框架都是跨平台的,这意味着写一个应用就可以同时在iOS和Android上运行。无论大公司或小作坊,没人愿意支付两份薪水,组建两个开发团队,只为了针对不同平台开发完全相同的应用。巨大的经济压力迫使很多公司转为使用跨平台框架。唯一拖后腿的地方在于,目前这些框架不如“原生”开发框架那么棒。
但很多此类框架(尤其是Facebook的React Native)距离这个目标已经非常非常近了。如果其中某个框架有幸占据了足够大的市场份额,那么基本上Android就等于变成了开发者生态系统中的一环,并且是不再被Google控制的一环。
这似乎并不是什么大不了的事情,因为Google依然控制着Play Store、OEM厂商以及技术授权之类的东西。对大部分人来说,他们也许很舒适地坐在驾驶位上,不过别忘了:如果所有移动开发者都开始使用某一个特定的跨平台框架X,那么基本上任何其他硬件/操作系统厂商或联盟都会开始提出自己能直接兼容框架X的竞争性硬件/操作系统平台(例如,假设就说Windows吧),而所有应用都将能在这个平台上运行(也许启动速度还能更快),这会将Google彻底淘汰。相信我,想做这种事的公司有很多。好吧,不该这样说,并非所有公司都想。其实不管哪个公司,谁会不想呢?
面对这种情况,Google的回应是继续坚持自己的立场。他们开始加倍下注自己的“原生”(传统)Android编程,为Kotlin语言提供官方支持,对于原生Android程序员来说,这已经是一步很大的举措了。我喜欢Kotlin,它代表着Java的未来,但必须承认:它已经不是移动市场的未来方向了。人们使用跨平台框架开发程序,主要出于两大原因:首先,他们希望工作量不翻倍的情况下,就能让自己的应用在两个平台上运行;其次,由于Android原生编程至今依然让人感觉痛苦,虽然有了Kotlin,很多公司依然(无可非议地)认为应该彻底推翻原有的一切,换一种更简单的方式从零开始。
如果你是Android或iOS开发者,并且花了一些时间尝试过React Native(Facebook正是为了解决上述问题而发明了它),不到30秒你就会意识到,这果然是一种更好的方法,不过前提是你开发的不是游戏,否则你可能更愿意使用Unity。对于业务应用和生产力应用,React Native提供了合理的性能、跨平台兼容性、极为方便的工具(最棒的工具来自微软!上文刚提过他家的产品不是),以及大幅提高的开发速度。还记得上文说过的吗,常规Android栈中,哪怕修改一行代码,也要等20分钟才能看到效果。诸如Nest或Facebook等最大型的应用中,这种问题已经司空见惯,对于中等规模的应用,通常等待2-3分钟就够了。但如果使用React Native,立刻就能看到结果。更改代码,改动立即生效。
伙计们,这就意味着产品发布速度可以提高10倍,产品上市速度可以变得更快,意味着你可以更好地发挥先行者优势,意味着你会不断地赢得竞争。放弃原生编程框架,转为使用诸如React Native这种节奏更快地跨平台框架,这才是制胜之道。
我怀疑,在没有证据的情况下,Google的Android团队并不能明确跨平台对他们而言是好是坏,但他们正倾向于认为是“坏”,否则他们就会为跨平台的Flutter提供更多支持。个人而言我觉得这对他们是有好处的,但我又懂啥呢。
无论如何,Google目前正在努力改善原生体验,试图借此维持自己的统治地位。原生体验对诸如Snapchat以及Instagram这样的大型应用而言显得最不友好,而Google的主要目标恰恰是改善大型应用的开发体验,而这主要是由构建所需的时间决定的。
为此,Google正在通过大量努力改善“官方”的Android应用程序构建系统,而这套系统自身是基于本就非常复杂的Gradle系统实现的,Google只不过是在这基础上塞入了一堆乱糟糟的Android规范。导致这个系统变得越来越复杂,以至于甚至构建工程师都无法完全理解其中的组件。构建类型(Build type)、产品风格(Product flavor)以及风格维度(Flavor dimension)之间有什么区别?你猜!而Google还在不断让水变得更浑浊,因为他们觉得这些特征对开发大型应用的大型公司很重要。
讽刺之处在于,大部分大型公司正在积极转为使用Facebook的Android构建系统:Buck,Google在这方面似乎已经陷入了死胡同。
尽管Google已经意识到问题所在,但他们下重注提出的解决方案却没人喜欢:原生栈,以及复杂程度进一步暴增的Gradle构建系统。开发者正在远离,第三方栈正在攻城略地。
更糟的是,围绕Android的袭击不光发生在开发栈方面,他人还可以通过其他方式将Android从Google手中“盗走”。例如创建一个更成功的应用商店。Play Store是Google对Android加以控制的主要方式之一,但在这方面已经产生了大量争议(企业层面以及管控层面),因为Android据称是一个开放的系统,但Play Store完全由Google控制。由微软和Twitter支持的Cyanogen曾被视作推翻这一现状的重大举措,虽然由于内部权力争斗最终失败,但也曾首次给予Play Store一记重拳。
另外也请猜猜看还有谁在应用商店方面下狠手了?没错:Jeff Bezos(译注:Amazon的CEO),因为如果无法把Android从Google手中盗走,你是不可能成为全球首个万亿富翁的。嗯……反正我愿意相信这是原因之一。Amazon的应用商店已经发展得很好了,而Amazon与Google的每次面对面竞争中,长期来看Amazon的成绩都很棒。当心啦!
如果这些还不足以让Google开始担心,那么围绕Android还有第三场袭击,这场袭击无异于在Google的伤口上撒盐:在线广告。Facebook的Android应用已经变得无比庞大(数以百计的工程师多年辛苦工作的结果),以至于这个应用本身已经发展成为一个真正的平台,现在,企业可以直接将自己的广告投放到Facebook应用中。例如纽约时报可以购买广告位,而他们支付的费用将全部直接进入Facebook的口袋,一分钱都不会给Google。你觉得Google对此会有何感受。
在中国,微信也在做着完全相同的事情。微信应用也已成为一个繁荣的平台,我们可以在此基础上开发并部署其他应用(以及广告),就好像这个应用内部就直接嵌入了一个完整的生态一样。Facebook和微信的移动应用已经成为了独立的广告发布渠道。
需要明确的是:Google创造Android的唯一原因在于,对它而言Android是个广告渠道。Google是一家广告公司,全球最大的广告公司,而他们始终会面临其他希望借助Google之外的其他渠道,将广告投放到用户面前的企业无休止的攻击。从财务角度来看,这与围绕网络中立性的很多争议几乎如出一辙。电信运营商和ISP希望由他们提供你所看到的广告,或者希望至少能从Google和Facebook的口中分一杯羹。
不管什么时候,当你看到诸如Facebook、Google、Amazon或微软这样的公司突然很莫名其妙地开始涉足某个全新的、奇怪的业务领域,那么你就可以确定:渠道争夺战又开动了。Google Chrome是控制Web访问的渠道战产物;微软的Xbox曾是对抗PlayStation的渠道战产物,然而却又威胁到了PC在家庭在线娱乐渠道中的地位;YouTube曾是渠道战的产物;Instagram和WhatsApp也是类似产物;HBO/Amazon/Netflix的内容战争实际上也都是渠道战的产物。Amazon Echo也是如此,每个人的家庭已成为当今渠道争夺战最大的战场。对地方性的广告公司来说,就算Google Maps也是渠道战的产物。仔细看看,渠道无处不在。
底线在于,很多公司希望你能通过他们,而非别人的渠道欣赏自己喜欢的内容(书籍、电影、游戏、Natalie Portman的两性专栏),这样他们才能通过广告获得收益,或者最起码也能通过你为所订阅服务支付的费用获益。
Android可能是Google最重要的渠道,就算目前还不是,未来十年内肯定也会是。Google无法承担失去这个渠道的后果。但我们目前已知的,围绕这个渠道已经在三个不同领域产生了至少三场多方配合的攻击:开发者生态体系(以React Native为首的团伙)、应用商店(Amazon的应用商店以及传说中Cyanogen即将上线的商店),以及轻量级的应用内市场(目前以Facebook和微信为主攻)。截止目前,Google对这三处攻击的应对措施……额,姑且算是小有成果吧。但这只是暂时的。
所有这一切看起来都像是一系列没什么用处的夸张猜测(其实原本就是),但最终却对Grab这样的公司产生了切实影响,因为对于为自己的移动应用使用哪种技术栈,我们需要做出重要的决策,毕竟应用(具体来说其实是渠道)才是我们通向世界的窗口,对乘客、司机、商家、代理人员等无外乎于此。
如果你认为Google确实有可能失去对Android的控制权,哪怕只有一丢丢的风险,那么最好选择使用跨平台的框架,因为可移植性能够为你提供必要的保护。而如果你(像Grab一样)陷入了激烈的竞争态势中并且需要加快产品的发布速度,那么你可能至少要放弃Android Native方法。Android依然在Gradle的道上闷头朝前走,这条路怎么走都不会快的,而这主要是因为Android在设计方面有很多严重,并且难以解决的遗留问题。
在众多跨平台技术中,React Native似乎将成为最后的赢家。它还吸引着广大Web开发者,而他们可能是全世界最大的开发者群体,这一点毋庸置疑。Grab最近也开始评估React Native,我们想知道它能否实现自己的全部承诺,现阶段我们的结论很乐观。
距离Grab彻底放弃原生Android和iOS应用的那一天还很远,因为移植工作需要花费不少时间。这也意味着,如果你是任何类型的移动开发者,对你来说这都是一则好消息,因为我们需要你。我们有React Native的工作,有Android Kotlin的工作,还有iOS Swift的工作,其实全球各地对这些工作岗位都还有着巨大的需求。如果你得不到老东家的赏识,不妨打量一下周围的其他机会。过去三年来,这个领域发生的变动实在是太多了。
本文的中心思想可总结如下:和每个人一样,Grab也需要移动开发者,但很难招到理想的人员,因为Android编程实在是太烦人了,而且除了Google每个人都有类似的感受。因此目前整个生态中开始出现越来越多的竞争对手,他们都希望自己提出的方法最终将成为移动编程的唯一方法……而这也导致移动开发者更难招了,因为整个生态是如此的碎片化!
无论你倾向于哪种技术,现在都是成为移动开发者的最好时机。如果你还不是移动开发者,那么应该考虑一下涉足这个领域体验看看。你可以从后端体验着手,随后学习移动开发,进而让自己成为“全栈开发者”,这可是一种更稀缺,也更有市场的独角兽。
当然,现在也是通过竞争夺取Android控制权的好时机,如果你真想这样做的话。正在做这事的公司可不少呢,鬼知道为什么,就连Google内部的其他团队也正在这样做。不过这并不包括Grab,不过我们会从中受到非常巨大的影响。越来越多的鲨鱼正在登上Android这艘船,Google需要小心了。
对Grab来说,目前同样是一个好时机。无论什么派别,只要你是专业的程序员,尤其是位于西雅图或曼哈顿东区的程序员,并且我上次提到有关GDP以及新兴网络技术的想法和机会能够引起你的共鸣,那么我们认真说:你真应该考虑尽快过来跟我们一起干。
别犹豫,打开Lyft叫辆车麻溜地来。