InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

谁会将 Android 从 Google 身边偷走?

  • 2018-03-21
  • 本文字数:6957 字

    阅读完需:约 23 分钟

声明:本文纯属个人观点,其中很多可能并不正确,所有言论与我的雇主(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 团队甚至拒绝承认它的存在。

能活着真好。

袭击 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 叫辆车麻溜地来。

作者 Steve Yegge 阅读英文原文 Who will steal Android from Google?

感谢覃云对本文的审校。

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2018-03-21 17:591864
用户头像

发布了 283 篇内容, 共 98.8 次阅读, 收获喜欢 58 次。

关注

评论

发布
暂无评论
发现更多内容

拨云开雾!阿里面试官力荐Java开发必看的操作系统底层原理PDF

Java架构追梦

Java 阿里巴巴 架构 面试 操作系统

如何实现支持百亿级文件的分布式文件存储

焱融科技

云计算 云原生 高性能 分布式存储 海量存储

手写基数排序算法

实力程序员

程序员 C语言 排序算法

聊聊百度搜索背后的故事

程序员鱼皮

Java 搜索引擎 数据结构 算法 后端

架构实战营模块四作业

老猎人

架构实战营

根据译文片段预测翻译作者

毛显新

tensorflow

机器学习- 吴恩达Andrew Ng Coursera学习总结合集 John 易筋 ARTS 打卡 Week 57

John(易筋)

ARTS 打卡计划

带你了解弯曲文本检测算法的两种思路:区域重组和像素分割

华为云开发者联盟

文字 目标检测算法 文本检测 区域重组 像素分割

从源码角度详解Java的Callable接口

华为云开发者联盟

Java ide jdk Callable Callable接口

LeetCode题解:456. 132 模式,n平方暴力,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

面试题:JVM在Java堆中对对象的创建、内存结构、访问方式

java小李

java 14 sping

对象存储手把手教三 | 数据分段上传

QingStor分布式存储

对象存储 分布式存储 数据传输

架构实战营-模块三

Cingk

Go语言:RESTful API 服务,急速入门

微客鸟窝

Go 语言

架构实战营模块 3 课后作业

hello

架构师实战营

云图说|云上应用监控神器——应用性能监控APM2.0

华为云开发者联盟

APM 华为云 云图说 应用性能管理 应用监控

takin(全链路压测)快速安装-mac图文版

国隆

大数据 性能压测 生产环境全链路压测 takin 探针

Recommending movies: retrieval

毛显新

tensorflow 推荐系统

汽车燃料效率预测

毛显新

tensorflow

stack overflow 问题分类

毛显新

tensorflow

第三届WICC圆满结束 融云打造技术与生态平台推动产业发展

融云 RongCloud

Java实战:教你如何进行数据库分库分表

华为云开发者联盟

Java 数据库 分布式 分库 分表

怎么在Guitar Pro乐谱中加入哇音

懒得勤快

TensorFlow 2 quickstart for experts

毛显新

tensorflow

淘宝一面:说一下 Spring Boot 自动装配原理呗?

java小李

面试 java 14 sping

DAPP智能合约开发|智能合约搭建

Geek_23f0c3

区块链 智能合约 DAPP智能合约交易系统开发 DAPP系统开发

行云创新完成B轮融资,阿里云独家投资

行云创新

阿里云 云原生 投资

Vue进阶(九十四):自定义组件

No Silver Bullet

Vue 自定义组件 7月日更

4问教你搞定java中的ThreadLocal

华为云开发者联盟

Java 线程 多线程 ThreadLocal 变量

没怎么写过 Java 的遗憾

escray

学习 极客时间 朱赟的技术管理课 7月日更

我花了 24 天使用 C++ 从零实现了一个解释器

lmymirror

interpreter compiler

  • 扫码添加小助手
    领取最新资料包
谁会将Android从Google身边偷走?_Android/iOS_Steve Yegge_InfoQ精选文章