关于程序员:开发者吐槽Android开发就像大便三明治

10次阅读

共计 7025 个字符,预计需要花费 18 分钟才能阅读完成。

作者|Steve Yegge
策动|覃云

本文简要分析 Android 生态系统在开发栈方面的现状,通知你原生 Android 开发是如许的恶心,以及不同竞争对手围绕 Android,从开发体验、利用商店、广告渠道三大畛域与 Google 开展的和平。

作者申明:本文纯属个人观点,其中很多可能并不正确,所有舆论与前端之巅无关,请用批评的思维浏览本文。

我来了,又一次,正在飞往雅加达的航班上撰写这篇文章,这仿佛曾经成了我的习惯。

至今我仍然不能齐全必定,当初那篇“我为何从 Google 到职”博客文章怎么就引起了那么大的关注。基本上我只是表白了“我就是一个喜爱频繁换工作的普通人”之类的观点。可就这么一篇文章被翻译成了大略 80 种语言,甚至变得比娜塔莉·波特曼的两性专栏更火,诚实说,她的专栏内容可乏味多了。

兴许可能那一周没有其余更劲爆的新闻了吧,或者只是因为 Medium 的用户数又再攀新高?Medium 是个很棒的平台,回首以前写博客的日子,我还曾期待着 Google 能提供一种相似的翻新式产品呢,不过……起初,你懂的。

明天,我想谈谈 Android,作为局外人兼业余 Android/iOS 开发者,我本人对 Android 的认识。思考到“麦芒落进针尖里”这种事不可能连着产生两次,我也能够释怀假如本文不会像上次那样忽然就火到不行,明天,这件事,我只说给你听。

最近咱们要招募挪动开发者,所以又开始思考 Android 的各种事宜。你兴许感觉招聘开发者是个再简略不过的事,但实际上开发者是目前市面上最热门的资源。Grab(我的公司)须要开发者,每个人都须要开发者,可开发者的数量严重不足。看谁运气好能抢到吧。

为什么每个人都须要挪动开发者?因为 Web 正在缓缓死去(编者注:这里指 PC 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 对 Android 的管制变得十分软弱。大部分此类框架都是跨平台的,这意味着写一个利用就能够同时在 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)。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 外部的其余团队也正在这样做。越来越多的鲨鱼正在登上 Android 这艘船,Google 须要小心了。

正文完
 0