安卓传奇:Android缔造团队回忆录
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

背景介绍

2010年5月中旬的一天,我走进谷歌园区44号大楼,这是我加入Android团队的第一天。离我办公桌不远的地方摆着至少六台用来烹煮各种咖啡的咖啡机。这里的人对咖啡因如此讲究,让我感到十分惊讶,但这种惊讶并没有持续太久。

这个团队正在准备交付一个Android版本[1],同时开始着手下一个版本[2]的开发工作。这两件事情都很难,很耗时,也很关键,因为他们希望Android能够在拥挤的智能手机市场占有一席之地。他们总给人一种朝着一个目标狂奔的感觉,竭尽所能去做,但又不知道是否能做到。工作节奏很疯狂,但工作内容令人兴奋——不仅仅是因为咖啡因。这种兴奋来自团队无论付出多大努力都要实现目标的专注。

开发Android与我以往的职业生涯截然不同。

最初,我在明尼苏达州的一家老公司开始了朝九晚五的工作。这家公司的员工把整个职业生涯都奉献给了公司,每年感恩节,退休人员都会从公司那里领到一只免费的火鸡。我似乎一眼就能望到头,每周工作40小时,然后慢慢等待晋升,直到退休领火鸡。

不到一年,我就觉得无聊透顶了。第二年,我离开这家公司去攻读研究生,重启我的技能,找回我真正喜欢的东西:计算机图形编程。研究生毕业后,我去了硅谷,这是一个充满机遇的地方。[3]我加入了Sun公司,在那里待了几年,直到另一份有趣的工作向我招手。

在接下来的几年里,我在不同的公司之间跳来跳去,做过不同的技术工作,认识了各种各样的人。我工作过的公司有Sun公司(先后几次)、Anyware Fast(一家由几个朋友创办的外包公司)、DimensionX(一家互联网初创公司,后来被微软收购)、英特尔、Rendition(一家3D芯片初创公司,后来被美光收购)和Adobe。

我父亲退休前在美国海军服役了21年,他一直对我频繁换工作感到不满意。养老金怎么办?有工作保障吗?家庭能稳定吗?

他不知道的是,在硅谷以及越来越多的高科技领域,不管是过去还是现在都是这样的。每做一份新工作都为我未来的发展贡献了新技能。对于所有辗转于科技公司之间的工程师们来说事实都是如此。我们不断培养新技能,并在创造各种产品的过程中不断吸取经验。正是这些不同的经验背景为开发新项目提供了必要的技能,让我们能够解决未知的问题,并提供创新的解决方案。

2010年,另一个机会出现了。我共事过(并一起写过一本书[4])的一位朋友Romain Guy(2005年的时候他是Sun公司的一名实习生)遇到了一个问题。他在2007年加入Android团队,因为太忙没有时间开发动画系统,但他知道这应该是我喜欢的项目。经过了几轮面试,5个月后,我加入了位于山景城谷歌园区44号大楼的Android UI工具包团队,开始了比以往任何时候都更加努力的工作。

我开始创建新的动画系统,优化底层性能,开发图形组件,为即将发布的版本努力工作。我在这个团队工作了很多年,开发与图形、用户界面和性能相关的代码,并成为团队负责人。

我在Android之前的大部分项目都非常有趣,但缺乏“可见度”。如果我的家人问我是做什么的,我会告诉他们我在开发软件。然后我会用一种轻描淡写的方式描述哪些应用程序可能会用到我开发的东西,事实上他们永远都没有机会看到,因为我开发的都不是人们能够在现实世界中直接接触到的东西。

后来,我加入了Android团队,开发了全人类每天都会使用的软件[5](只要Android能够生存下就能这样说)。

挑战

“我们不知道它会失败还是会成功。但当它成功时,我想人们会既惊讶又兴奋。”

——Evan Millar

早期的Android团队由很多经验丰富、观点鲜明的人组成。他们对自己构建的东西很有信心,但发布最初的1.0版本对他们来说也是一场殊死之战。

这个团队的目标是,创建Android操作系统,包括所有的底层内核、硬件驱动和平台软件,除此之外,还需要提供应用程序API、应用程序开发工具、与平台捆绑在一起的应用和应用程序后端服务。另外,他们还想让这些东西与一款新手机一起发布。

这些东西将免费提供给手机厂商。厂商负责制造硬件,Android团队负责提供软件。有了这个操作系统,手机厂商就可以专注于硬件产品,将日趋复杂的软件问题留给Android团队。与此同时,Android团队为应用开发者提供了一个统一的平台,他们只需要开发一个能够在所有设备上运行的版本,不需要为不同的设备开发不同的版本。

Android团队的背后有谷歌在提供资金支持,内部有一批擅长开发大规模软件的工程师和一个专门的产品团队,外部则是一个快速增长的智能手机市场,他们怎么可能会失败?事后看来,Android的成功似乎是必然的。

但在早期,这个团队的生存环境非常不一样,Android的持续发展如履薄冰。

一方面,这个团队确实有谷歌在提供资金支持,但Android只是谷歌投入的众多项目之一。谷歌在Android上的投入并不是缘于想要全力支持它,他们只是想通过赞助的方式看看它是否可行。[6]

另一方面,Android要加入的赛道已经有很多根深蒂固的竞争对手,对于新玩家来说并没有非常明确的机会。在低端市场,诺基亚手机遍布世界各地。Danger、黑莓和Palm都为它们富有激情和忠诚度的用户推出了有趣的智能手机产品。[7]除此之外,还有各种各样的微软手机可供选择。在软件行业工作过的人都知道,如果你要与微软竞争[8],一定要小心谨慎。

2007年,苹果公司也进入了这个市场,本已拥挤不堪的领域又多了一个竞争者。在手机领域,苹果可能是一个新手,但它已经在操作系统、消费数字设备和iPod方面取得了良好的成绩。

这些公司早在Android正式发布第一个版本(更不用说发布硬件产品了)之前就已经站稳了脚跟。

为了在这个残酷的市场中生存下来,早期的Android团队将精力放在了1.0版本上。每个人都专注于这个目标,大多数人在这个疯狂的时期马不停蹄地工作。

不过,虽然每个人都知道他们想要开发一个操作系统,但对该如何开发、是否会取得成功,甚至正在开发的东西对不对,并没有达成一致。工程师Andy McFadden说:“很多人有着非常执着的立场,如果出现不一致的意见,局面就会变得非常有趣。”

尽管Android随着第一款手机发布了1.0版本,团队成员也仍然不清楚这个项目是否会取得成功或继续存在。技术经理Ryan Gibson说:“在最初的几年里,Android内部弥漫着一种身处劣势的氛围,徘徊在失败边缘的我们,必须通过努力工作来守护已经取得的每一点进步。成功远非定局。我们落后了别人一年,如果再晚一点,我们可能会成为一个历史的脚注,而不是一个可行的替代品”。

在我加入团队的那几年,我听说了Android早期艰辛的发展历程——每个人都非常努力地在充满竞争的平台中争得一席之地。然后,在我工作期间,我看到Android取得了一定程度的成功,那么问题来了:这是如何做到的?也就是说,在Android的发展过程中,是什么让它在早期的脆弱阶段取得了惊人的增长?

之所以想写这本书,是因为我意识到Android的故事最终会消失,因为开发它的人转去了其他项目[9],曾经发生过的事情也将被淡忘。2017年,我开始与早期的团队成员交谈,并把谈话内容记录下来,这一切都为了让这些故事得以保留。

实现细节[10]

这是一个很长的故事(这本书最终的内容比我刚开始时设想的要多得多,尽管比初稿少了很多)。这里有一些技巧,可以帮你把内容组织得更清晰一些。

首先是关于Android这个词。最令本书的编辑抓狂的一件事情是,我经常用Android指代所有的东西,从初创公司到被谷歌收购后的团队,再到软件平台、手机产品、开源代码和某些人的昵称。

问题是Android团队就是这么用这个词的:它指的就是原来的初创公司,也指被谷歌收购后的部门,还指软件、手机、生态系统和团队。

动画片《瑞克和莫蒂》中有一集[11],不同星球的居民以各种看似无关的方式使用squanch(英语字典里没有的一个词)这个词。最后,瑞克解释说:“squanch的文化更偏向于语境而非字面。你只要说出你的squanch,人们自然会明白。”

Android就是这样。你只需说出“Android”,人们自然会理解。

其次,故事是按照时间的顺序来讲述的。也就是说,我按照时间流向的方式描述发生的事情以及与这些事情相关的人,因为以时间为序是一种组织复杂事件的有效方式。当然,我们不可能严格按照时间顺序来讲述这些故事,因为很多事情是同时发生的。所以你会发现,我可能会先讲述某些人开发1.0版本的故事,然后再倒回去讲述其他人的故事。

说到时间,这本书的故事从Android诞生开始讲起,一直到2009年年底。其中大部分都发生在2008年年末1.0版本[12]发布之前。到了1.0版本,支撑Android未来发展的大部分东西都已就位。时间线又向后延长了一年,到2009年年底,摩托罗拉在美国推出Droid,Android未来的成功初露端倪。

最后,我希望所有人都能读懂这本书,而不仅仅是那些了解(可能还会真正关心)技术细节的软件工程师和硬件工程师。我尽量避免讲解过于技术性的东西,这样就不会让读者感到乏味。但是,如果不使用“操作系统”这样的术语,就很难描述一个操作系统是如何开发出来的。对于那些不以写代码为生的人来说,“操作系统”可能是个陌生的词汇。我试着按照我的方式给术语下定义[13],但如果你在某个章节卡住了,想知道API是什么,或者想知道我说的CL是什么意思,请查看附录的“术语”部分。

就这样开始了

2017年8月[14],我开始采访早期的团队成员,从与Dianne Hackborn和Romain Guy的午餐聊天开始。[15]在接下来的几年里,我陆续采访了早期团队的大部分人(主要是面对面,有时也通过电子邮件)。

在进行面对面采访(现场或通过视频聊天)时,我带了一个录音麦克风,[16]因为我意识到仅有手写笔记是不行的。Dan Sandler和Dianne Hackborn说话的速度比我脑子转得都快,更不用说把内容写下来了。另外,把对话录下来,我就能够更多地参与到对话中,而不只是疯狂地记笔记。

我在这些采访上花了很多时间。由于书面文本比音频更容易查阅和搜索,我又花了更多时间将对话转录成文本。[17]我花了很多宝贵的时间来听、抄写和阅读这些对话内容,在这个过程中我意识到:这些对话不仅仅是为了写作本书而做的研究,它们本身就是一本书。我本来打算把采访作为背景资料来帮助我了解大局、时间顺序以及一些我不可能发现的细节,但我没有预料到的是,他们每个人都用自己的语言讲述着美好的故事。

我在这本书中引用了很多采访原话。事实上,我尽可能地引用原话,而不是从我的角度进行描述,因为好的故事应该从当事人的角度来讲述,他们每个人都用自己的语言表达他们对事件的独特看法。

请随我一起加入这个深入了解Android核心的旅程,透过当事人的声音,听听这个团队和操作系统的成长故事。


[1]Android 2.3 Gingerbread(姜饼)。

[2]Android 3.0 Honeycomb(蜂巢)。

[3] 或者至少是科技公司的领地,如果你希望在这个领域找到工作,可以来这里试试。

[4]书名是Filthy Rich Clients:Developing Graphical and Animated Effects for Desktop JavaTMApplications。但是我不推荐。本来如果你喜欢这本书,也可以看看我写的其他书。尽管我喜欢那本书,但必须坦白,它的内容可以追溯到2007年,有技术上的代沟,毕竟讲的至少是几十年前的东西了。

[5]同时也写Bug。唯一没有Bug的是那些还没有被写出来的代码。我们尽可能多地进行测试,但现代软件系统的复杂性意味着Bug是不可避免的。关键是我们要确保这些Bug不是致命的,而且一旦发现,就要将其修复,然后继续写更多的代码(和更多Bug)。

[6] 与此同时,谷歌也在Web技术领域进行了类似的战略投入,开始开发浏览器(Chrome),因为知道自己至少也需要在这些领域做一些探索,以防未来的市场可能被其他公司占领。

[7] 在这里,我对“智能手机”的定义非常宽泛。这个词刚开始是指手机加数据,基本上就是一个用户可以在上面通过电子邮件和即时消息等方式进行通信的更丰富的通信设备。如今,智能手机所涵盖的远不止这些,它还包括应用程序、游戏、触摸屏,以及在有了数据套餐之后出现的大量新技术。

[8]初代iPhone产品营销总监Bob Borchers说:“你永远不要忽略微软。他们会持续投入资金,直到推出真正的产品。”就像我的一位同事多年前说的:“当微软要进入你的市场时,请你赶紧离开。”

[9]正如上文中我频繁更换项目和公司的亲身经历,不管是在谷歌、Android团队,还是在其他技术公司,这样的事情都千真万确。工程师习惯迁徒。

[10]在进行工程性讨论时,当有人想要专注于大的想法,而不是陷入如何实现的繁文缛节时,就会使用“实现细节”这个词来反向限定范围。当然,软件项目的实现实际上是困难且耗时的,所以回避“实现细节”就像是在假定,即使没有水下那部分,冰山的一角也能很好地漂浮在水面上。

[11]第2季第10集:The Wedding Squanchers。

[12]1.0版本是第一个面向消费者的版本,也是第一个其他厂商可以用来推出Android设备的版本。1.0版本最初只运行在G1手机上。

[13]我使用了大量的脚注,你也应该这样做笔记。

[14]当我在2021年2月再次阅读这一章时,我意识到我写这些Android故事所花的时间比Android团队开发这个操作系统和发布1.0版本所花的时间还要长。

[15] 采访技巧:进行录音采访时,不要选择在午餐时间,否则你的大部分时间会浪费在重听咀嚼食物的声音上。

[16] 我也经常带上我的朋友兼同事Romain Guy,他是早期Android团队成员之一,帮我组织了多次采访。

[17] 另一个采访技巧:如果你必须这么做,那么就买一款能够让你以接近打字速度播放音频的软件。对我来说,打字速度大概是正常讲话速度的40%,具体取决于采访对象。这种方法唯一的缺点是,因为速度太慢,被采访的人听起来像喝醉了。更好的做法也只能是,等待技术推陈出新来帮你解决问题。2020年,当我正在录制最后几段对话时,谷歌发布了一款可以录制音频并自动转录成文本的Android应用。科技进步的步伐令人心生喜悦,只是有时候有用的技术来得太迟,难免令人叹息万分。