Android 告急!
作者 | Steve Yegge
译者 | 苏本如
责编 | 仲培艺
出品 | CSDN(ID:CSDNNews)
以下为译文:
前言:从离开 Google 到糟糕的 Android
我至今仍然不能百分之百地确定为什么我发表的那篇叫做《我为什么要离开谷歌》(https://medium.com/@steve.yegge/why-i-left-google-to-join-grab-86dfffc0be84)的博文会受到如此多的关注。在那篇博文里,我只是唠叨了些诸如“我换工作比较随性”之类的废话,却不知为何会被逐字逐句地翻译成 80 种语言来传播,直到后来某一天才被娜塔莉·波特曼的一篇专栏文章超越。公平地说,那个专栏要有趣得多。
我猜其中一个原因是因为那一周没有什么劲爆新闻吧?另一个原因可能是 Medium 网站拥有了大量的用户?Medium 网站是一个很好的平台,回想起写博客的日子,我曾经希望谷歌也能创造出一个像 Medium 这样有新意的产品,但正如你所知,事实上并没有……
无论原因是哪一个,我的博文收到的回复还是很有趣的。巴基斯坦的某个家伙说如果我碰巧和他在同一个城市的话,就要请我喝杯啤酒。伦敦的某人愿意出一千刀,让我在电话里花一个小时和他聊聊语音搜索市场或关于 Garbo 的话题,我礼貌地拒绝了,因为我实际上对这些一无所知。一个俄罗斯人甚至在一次聚会上走过来对我说:“你树立了不少敌人啊”。哈哈,多么有趣的时光。
网上也有很多评论对我想在那篇博文中表达的关键信息有不少误解,有人甚至问“这不就是个专车服务吗?” 我曾尝试描绘一张更大的“画”,但似乎搞砸了。有时间我会回过头再重新看看那篇博文,看能否让大家更明白些。
但今天我想要讨论的重点是 Android——站在一个外行者以及业余爱好 Android/iOS 的开发人员的立场,分享下我的个人观点。
我一直关注 Android 是因为我们正在尝试招聘一些移动开发人员,你会认为这件事情很简单。但事实证明移动开发人员是当今市场上的“抢手货”,很多公司都有需要,而且市场上懂得移动开发的人并不多。招聘他们就像想抓独角兽一样不容易。
为什么每个公司都需要移动开发人员?因为桌面网页开发正在慢慢消失。我在谷歌的各个开发团队都有些朋友——好吧,或许现在只能算是前朋友吧——他们曾经在背地里指责我。但不管他们如何批评我,随着整个世界向移动端倾斜,桌面网页开发会渐渐减少。你可能还记得 Facebook 从“Web First”到“Mobile First”的转变吧,那差不多是在 8、9 年前的事了,Facebook 当时差点就完蛋了。我并不是说这种转变会在一夜之间发生。但这家公司在意识到他们要么成为一个移动互联网公司要么被市场抛弃的时候,确实经历了一场生存危机。
他们成功了,但这确实不容易,因为 Android 的 Dev Stack(开发堆栈)是世界上最大的一坨 poo sandwich。
Google 内部工程师的鄙视链造成的 Android 窘境
在谷歌,大多数工程师都很傲慢而不愿做移动或网页开发工作。他们非常傲慢地宣称“我不做前端开发”。那里有一种现象,我喜欢称之为“鄙视 DAG 链”,这里的 DAG 是指有向无环图,有点像流程图。在鄙视 DAG 链的顶端坐着的是用 C++ 写搜索引擎的工程师,他们比 Java 工程师酷,Java 又比 Python 酷,Python 又比 JavaScript 酷。同样,写搜索的比写广告系统的酷,写广告的比写 App 的酷,写 App 的比工具酷,工具又比做前端的更酷。诸如此类。程序员喜欢互相看不起对方。如果你不幸成为谷歌的移动开发工程师,那么你将被困在几个鄙视链的底部,每个人都在俯视你。
但是,当我一个又一个地从事了所有这些开发工作之后,从系统编程到大规模数据工程,从编译器设计到服务框架开发,从游戏开发到 Web 开发,再到移动开发,我可以向你保证,前端编程即使不会更难,也至少和其他开发工作一样困难。后端中的一切看上去都是美观、整洁、有序、分布式并且是可并行的——与 25 年后仍然一团糟的前端网页开发相比,这简直是天堂。如果再和包括 iOS 在内的移动编程那种“便便三明治”相比,哪怕前端网页编程也会犹如巴厘岛的一次美妙之旅。
Android 怎么样呢?没错。这是他们中最大的“poo sandwich”。如果不介意我说句俏皮话的话,Android 开发人员都是英雄。如果用 Android 来开发巨型应用,如谷歌地图、Facebook 或 Snapchat……如果我告诉你,你都不会相信——改完一行代码,坐在那里要等上 20 分钟才会看到发生了什么。你所做的每一个更改,无论多么细微,在第一次尝试时都有 80% 的机率不会有效果,因为 Android 的特征互操作性矩阵异常简单。你可以用 X,也可以用 Y,但是因为某个该死的原因你就是不能同时用 X 和 Y。
设备兼容性这事更是让我火大。我在 Google Play 商店里有一堆一星评论,因为我的 Wyvern 游戏 App 随机地不能在 LG 设备上工作,所以我不得不去 eBay 上买一个 60 美元的廉价 LG 设备(而不是那种劣质的 600 美元的 LG 设备)来重现这个 Bug,结果发现 Android 有两个在滚动列表上获取鼠标点击事件的 API,但是有一个 API 在 LG 上不起作用。
我想说,有没有搞错!
正因为 Android 总有这样的莫名其妙的事情发生,现在许许多多的竞争对手,无论大小,都推出了自己的 Android 替代框架。他们想替代的不仅仅是缺失功能的支持库(尽管很多这样做了),他们更想要做的是全面替代谷歌 Android 的全面的开发堆栈。现在已经面世的替代框架有微软的 Xamarin、Adobe 的 Cordova、Facebook 的 React Native。除此以外,再仔细看看,还有 Framework7、Appcelerator Titanium、Onsen、Sencha、Kendo、XDK、Ionic、Mobile Angular、Unity——天呐,这到底是要整哪一出!
就像所有曾经尝试过 Android 开发的人放弃后都会说:“Android 太糟糕了,我要自己去做一个更好的。”
而谷歌,不甘于被竞争对手超越,回应说,“哦,是吗?你无法和我们竞争,因为我们的竞争对手是我们自己!”。然后他们推出了 Flutter,这是一个 100% 严肃的 Android 开发堆栈,与原生 Android 竞争,而 Android 开发团队甚至拒绝承认它的存在。
Android 的对手
这些开发框架的问题在于它们使 Google 容易受到攻击。大多数此类框架都是跨平台的,这意味着你只需编写一个应用就可以在 iOS 和 Android 上运行。不管你是大公司还是小作坊,没有人愿意付双份薪水请两个开发团队在不同的平台上编写完全相同的应用。因此,巨大的经济压力驱使公司迁移到跨平台框架。唯一拖后腿的地方在于,目前这些框架还不如“原生”开发框架那么棒。
但其中一些框架(尤其是 Facebook 的 React Native)距离这个目标已经非常非常近了。如果它们中的一个成功抢占了足够大的市场份额,那么 Android 基本上就成了开发者生态系统的一部分,并且这个系统已经不再由谷歌控制了。
这似乎不是什么大问题,因为谷歌仍然拥有 Play Store、OEM 和许可授权等。对大多数人来说,他们似乎很舒服地坐在驾驶座上。但是考虑一下:如果所有移动开发者都开始使用一个特定的跨平台框架 X,那么从字面上来看任何其他的硬件/操作系统制造商或联盟都可以和他们自己的竞争硬件/操作系统平台(比如 Windows)一起直接支持该框架 X,并且所有的应用程序都可以在其上运行(可能更快,更容易启动)。这将完全把谷歌切割出来。相信我,很多公司都想这样做。对不起,我说错了,不是很多,而是全部。谁不想呢?
谷歌对这种情况的反应是绝不让步。他们加倍投入到自己的“原生”(传统)Android 编程,为 Kotlin 语言提供官方支持,这对于原生 Android 程序员来说是一个很大的进步。我喜欢 Kotlin,它代表 Java 的未来。但让我们面对现实:这已经不是移动开发的发展方向了。人们编写跨平台框架的原因有两个:第一,因为他们希望公司的应用程序在两个平台上工作,而不需要做两倍的工作。第二,因为 Android 原生开发仍然如此痛苦,即使有了 Kotlin,许多公司也感觉他们应该扔掉它,并从一个更容易的技术上从头再来。
如果你是一个 Android 或 iOS 开发者,并且你花了一些时间尝试 React Native(Facebook 创建它是为了帮助解决这些问题),不到 30 秒你就会意识到这是更好的方法,不过前提是你开发的不是游戏,否则你可能更愿意使用 Unity。对于业务和产品类的应用,React Native 提供了合理的性能、跨平台兼容性和极为方便的工具(最好的来自 Microsoft),极大提高了发展速度。还记得我前面说过一行代码的改变效果在常规 Android 堆栈中要花 20 分钟才能看到吗?这可能发生在像 Nest 或 Facebook 这样的大型应用程序中,但即使是中型应用程序,也可能需要 2-3 分钟。而 React Native 则即时的,你一旦改变了代码,就能即刻看到效果。
这意味着产品功能的发布速度可以提高 10 倍;这意味着更快的上市时间;这意味着先发制人的优势;这意味着你们在竞争中不断取胜。放弃原生编程框架,转而使用像 React Native 这种快节奏的跨平台框架,将会让你立于不败之地。
我怀疑,在没有证据的情况下,谷歌的 Android 团队并不能确定跨平台对他们是好是坏,但他们倾向于“坏”,否则他们会为跨平台的 Flutter 提供更多支持。我个人认为这对他们有好处,但我说了不算。
不管怎样,谷歌目前正致力于通过改善原生体验,来保持自己的领先地位。而且,由于原生体验对于像 Snapchat 和 Instagram 这样的大型应用程序来说是最糟糕的,它们主要是试图解决大型应用程序开发体验问题,而这主要又是由构建时间来决定的。
为了解决这一问题,谷歌在改善“官方”的 Android 应用程序构建系统上做了大量工作,而这个系统自身是基于本来就已经非常复杂的 Gradle 系统,谷歌随后又在其上加入了大量乱七八糟的 Android 特有的东西。日复一日,这个系统变得越来越复杂,甚至构建工程师都不再能理解其中的某些部分。如果你想试着搞清楚构建类型(Build type)、产品风格(Product flavor)和风格维度(Flavor dimension)之间到底有什么区别,那只能说祝你好运了。因为谷歌一直在增加这个系统的复杂性,他们认为增加的这些东西对于拥有大型应用的大型公司很重要。
讽刺的是,大多数大型公司都在积极地将其弃之不用,转而支持 Facebook 的 Android 构建系统——Buck,看起来谷歌正在走向一个死胡同。
因此,似乎谷歌已经明白这是一个问题,但是他们却在加倍致力于一个没有人喜欢的解决方案——一个拥有极其复杂的 Gradle 构建系统的原生堆栈——开发人员正在远离,而第三方开发堆栈正在不断获得市场份额。
互联网巨头们针对 Android 发起“攻击”
更糟的是,开发堆栈并不是安卓系统受到的唯一攻击。还有其他一些方法可以将 Android 从谷歌窃走。一种方法是创建一个更成功的商店:Play Store 是谷歌对 Android 最主要的控制手段,它在公司和政府层面引起了很多争议。因为 Android 据称是一个开放系统,但 Play Store 却 100% 由谷歌控制。而微软和 Twitter 支持下的 Cyanogen 曾是打破这种局面的重大尝试。虽然由于内部权力争斗而最终失败,但这是第一次认真尝试对于 Play Store 进行“割喉”打击。
另外猜猜还有谁和竞争对手正在联手对谷歌大打出手呢?你猜对了,正是 Jeff Bezos(Amazon 的 CEO)。因为如果不从谷歌偷取 Android 系统,他就不能成为全球首个万亿富翁。亚马逊的应用商店已经做得相当不错了,而我看到的亚马逊和谷歌之间的几乎每一场面对面的竞争中,亚马逊的表现都会随着时间的推移而越来越好。当心了,谷歌!
如果这些还不足以让谷歌担心,那么针对 Android 系统还有第三场袭击,而这场袭击正中谷歌的要害——在线广告。如今,Facebook 的 Android 应用变得相当庞大(多年来有数百名工程师致力于此),已然发展成为一个真正的平台,现在企业可以直接将广告投放到 Facebook 的应用中。例如,《纽约时报》可以在那里购买广告投放,所有的钱都直接从纽约时报转到 Facebook,而不必匀一分钱到谷歌,可以想象这让谷歌有何感受。
正如微信在中国一样——微信应用已经成为一个蓬勃发展的平台,可以在其上构建和部署其他应用(和广告)。就像把一个完整的市场嵌入到应用内部,Facebook 和微信移动应用已经成为独立的广告发布渠道。
让我们澄清一下:谷歌创建 Android 的唯一原因在于 Android 是一个广告频道(Channel)。谷歌是一家广告公司,世界上最大的广告公司,因而总是受到诸多公司无休止的攻击,这些公司想把用户眼球转移到他们自己的频道而不是谷歌频道。归根结底,这和针对网络中立性的攻击几乎如出一辙。电信运营商和 ISP 希望为你提供所有你想看到的广告,或者至少从谷歌和 Facebook 的广告中分得一杯羹。
每当你看到像 Facebook、谷歌、亚马逊或微软这样的公司神秘地进入一个陌生的新业务,你可以确信新的广告频道争夺开始了。谷歌的 Chrome 是一个控制 Web 访问的广告频道;微软的 Xbox 是一个针对 PlayStation 的广告频道,它威胁要将 PC 作为在家上网的频道;YouTube 是一个广告频道;Instagram 和 WhatsApp 也是类似产物;HBO/Amazon/Netflix内容战是一个直白的广告频道;亚马逊 Echo 是一个广告频道,而你的家已经变成今天最大的广告频道之一;即使是谷歌地图,也是本地广告的一个广告频道……一旦你开始观察,就会发现广告频道无处不在。
最重要的是,企业希望你通过他们的频道而不是其他人的频道观看你最喜欢的内容(书籍、电影、游戏等),这样他们就可以获得广告收入,或者至少是订阅收入。
Android 可能是谷歌最重要的频道——即使今天不是,在未来的十年肯定是。他们不能失去对它的控制。但我们已经看到,至少有三个不同维度的协同攻击正在发生:开发者生态系统(React Native 和它的朋友们)、商店应用(Amazon 的 App Store 和 传言中的Cyanogen 继承者)以及轻量级的应用内市场(Facebook 和微信等)。到目前为止,谷歌对每一个威胁的反应都是……好吧,不得不承认他们仍然处在领先地位,至少现在是。
言归正传——
所有这些看起来像是一堆无用的高谈阔论(原本就是),但它实际上对 Crab 这样的公司产生了实质的影响,因为我们必须对我们开发移动应用要使用哪些技术堆栈做出重大决策,这些应用对于我们的乘客、司机、商人、代理等而言,是通向外部世界的窗口(也即频道)。
如果你认为谷歌确实有可能失去对 Android 的控制,那么你最好的选择是使用跨平台框架,因为它将通过改进的可移植性来对冲你的赌注。如果你陷入了激烈的竞争中而需要更快的产品发布速度,你可能应该选择原生 Android 以外的产品。Android 仍在追逐着“Gradle”列车,但这条路绝不会走得太快,而这很大程度上是因为 Android 设计的遗留问题很难解决。
在跨平台选项中,React Native 看起来像是一个赢家。它吸引了许多 Web 开发人员,这可能是全球最大的开发人员受众,很难与之竞争。Grab 最近开始投资 React Native,看看它能否实现自己的承诺,到目前为止,看起来相当不错。当然,要把我们的原生 Android 和 iOS 应用退下来,还有很长一段路要走,因为移植确实需要时间。
总结一下这篇博文背后的主要观点:移动开发人员市场紧缺,很难雇佣得到,因为除了谷歌以外,所有人都知道 Android 编程很艰难。所以现在整个生态圈正在迅速发展,很多竞争对手正在努力让自己的方式成为移动开发的唯一真正方式……这使得招聘移动开发人员更加困难,因为整个生态圈是如此的分散。
但是如果不考虑你的风格,现在正是成为移动开发人员的好时机。如果你是一个非移动开发者,你应该考虑切换到移动开发一段时间。从后端体验和学习移动开发开始,您将成为一个“全栈开发人员”,这样的开发人员在市场上更加罕见,是更具市场价值的独角兽。
如果你对此有兴趣,是时候参与这样的竞争中来,以获得对 Android 的控制,很多公司都在这样做,甚至谷歌的其他团队也在这样做。现在有很多大鲨鱼绕着 Android 这条船在打转,谷歌需要提高警惕。
免责声明:以上是我的个人观点,其中可能有很多有失偏颇之处。同时我也不代表我的雇主(Crab 公司)说话,你大可不必尽信。事实上,我自己甚至都没回过头再读一遍。原文:https://medium.com/@steve.yegge/who-will-steal-android-from-google-af3622b6252e本文为 CSDN 翻译,如需转载,请注明来源出处。作者独立观点,不代表 CSDN 立场。