两个程序员的神奇友谊:帮助谷歌度过重大危机

新闻 前端
美国《纽约客》近日发表文章,描述了谷歌公司内部两个程序员间的友情故事。桑杰·格玛沃特(Sanjay Ghemawat)和杰夫·迪恩(Jeff Dean)是谷歌的高级研究员,他们共同合作,帮助谷歌在早期解决一场前所未有的危机,后来还在很多项目上有合作。

 

  导语:美国《纽约客》近日发表文章,描述了谷歌公司内部两个程序员间的友情故事。桑杰·格玛沃特(Sanjay Ghemawat)和杰夫·迪恩(Jeff Dean)是谷歌的高级研究员,他们共同合作,帮助谷歌在早期解决一场前所未有的危机,后来还在很多项目上有合作。虽然目前他们职责不同,但他们仍然保持着深厚的友谊。

  以下为文章全文:

  2000年三月里的某一天,谷歌内最优秀的六位工程师聚集在一间临时“作战室”内。公司正面临一场前所未有的危机。十月,谷歌的核心系统停止运行。虽然用户依然可以在谷歌网页上输入问题进行搜索,但他们获得的结果其实是五个月之前的了。实际上,该问题的严重程度还不止如此。谷歌的联合创始人拉里·佩奇(Larry Page)以及谢尔盖·布林(Sergey Brin)当时正在与雅虎协商谈判,计划为其提供搜索引擎支持,他们承诺提供比其拥有的搜索引擎强大十倍的索引。这样的索引需要跟上万维网的发展速度,而后者在之前一年时间内规模增加了一倍。如果他们失败了,那么与雅虎的谈判有可能功亏一篑,谷歌也将烧掉所有资金,淡出大众视野。

  在楼梯旁的会议室里,工程师们把门放在锯木架上,然后摆好了电脑。二十七岁的克雷格·西尔弗斯坦(Craig Silverstein)体型瘦削,但嗓门洪亮。他就坐在远处的墙边。西尔弗斯坦是谷歌的第一位员工:在他加入谷歌时,谷歌的办公室还设在布林的起居室里,大部分编程他都是自己重写的。在接连四天四夜的奋战之后,他和罗马尼亚的系统工程师博格丹·科考塞尔(Bogdan Cocosel)依然毫无头绪。“我们所做的分析毫无价值。”西尔弗斯坦回忆道,“所有东西都出问题了,而我们找不到原因。”

  西尔弗斯坦几乎没有注意到自己左肩上方桑杰·格玛沃特(Sanjay Ghemawat)的存在。桑杰是一个沉默寡言的麻省理工毕业生。他眉毛浓密,有着一头乌黑的头发。几个月之前,桑杰才刚刚加入公司。他是和在Digital Equipment Corporation的同事——31岁的杰夫·迪恩(Jeff Dean)一起跳槽到谷歌的。杰夫是个精力充沛的人。他比桑杰早十个月离开了D.E.C.。两人之间非常要好,愿意一起写代码。在作战室里,杰夫把他的椅子挪到了桑杰的桌子旁边。桑杰敲代码的时候,杰夫就靠在他的背上,像是新闻主持人耳畔叮嘱的制片人一样,纠正桑杰的代码。

  杰夫和桑杰开始探究索引方面的问题。他们发现有一些词汇消失了——搜索“邮箱”的话,网页不会显示任何结果——而其他一些词汇则是以乱序出现。几天内,他们一直忙于寻找代码中的错误,沉浸在逻辑的世界里。他们核查了所有代码,但并未找到程序错误的根源。

  有些时候,程序员会将他们的软件概念化成一个多层级结构,从顶端的用户界面往下延伸到基础层级。为了探究该架构的底部(这也是软件和硬件的交汇之处),这就需要关注代码存在所依靠的电以及硅的元素宇宙。在第五天的作战室里,杰夫和桑杰开始怀疑他们寻找的问题根源并非是出在逻辑上,而是物理层面。他们将乱成一团的索引文件转变为原始形式:二进制码。他们希望能看到机器发现的蛛丝马迹。

  在桑杰的显示器上,出现了由1和0组成的纵列,每一排都代表着索引词。桑杰指出:一个本应该是0的数字却是1。当杰夫和桑杰将所有误分类的词集中在一起之后,他们发现了一个规律——每个词汇都出现了一种相同的小差错。机器的内存芯片不知怎么回事似乎被破坏了。

  桑杰看了看杰夫。数月以来,谷歌内硬件故障的情况越来越多。随着谷歌规模的扩大,计算基础设施也在不断发展。计算机硬件鲜少会出现故障,除非使用了过长时间——之后便会一直失灵。电线会老化、硬盘会散架、电脑主板过热等。许多机器在一开始并非就有用,有一些机器也会莫名其妙得处理速度变缓。陌生环境因素可能也会起到一定影响。当一颗超新星爆炸的时候,冲击波会带来高能量粒子,朝着各个方向散射。科学家们认为有一种微弱的可能,部分粒子可能会击中地球上的计算机芯片,将0变为1。全球最稳固的计算机系统,例如NASA、金融公司等会采用特殊的硬件来预防这种情况。但是谷歌在当时,运营模式依旧像是一个初创企业,它所购买的计算机缺乏这种特性。这家公司已经到达了一个拐点。其计算集群已经发展到了一个很大的规模,即便是不太可能会发生的硬件故障也是无可避免的。

  杰夫和桑杰联手写代码来弥补机器出现的问题。很快,他们完成了新的索引。作战室也就此解散了。西尔弗斯坦感到些许困惑。他很善于找到程序问题,而这一步骤的关键在于弄清问题的真正原因。

  直到三月代码出现问题之前,谷歌系统采用的还是其创始人在斯坦福大学就读研究生时所写的代码。佩奇和布林并非是专业的软件工程师。他们是在搜索技术领域进行试验的学者。当他们的网络爬虫崩溃时,没有出现任何诊断信息,只是一句——“Whoa, horsey!”早先的员工查阅了佩奇和布林撰写的软件BigFiles。所有重要的索引代码都需要数天时间才能完成,如果出现问题,那就需要从头开始。用硅谷的话来说,谷歌无法“升级”。

  我们会说自己“搜索网页”,但其实并非如此。我们的搜索引擎来回穿梭在互联网的索引中——一张地图。当谷歌在1996年还被叫作BackRub时,这张地图小到足以适配佩奇寝室内安装的计算机。2000年3月还没有出现庞大的超级计算机来进行处理。谷歌能做的唯一一点就是购买消费者机器,然后将其连接为一个舰队。由于谷歌认为这些计算机的零件都是破烂品,所以他们会去订购原装主板和硬盘并将其进行组装。在加州圣克拉拉的一栋建筑物里,谷歌拥有1500个这种设备,堆起来有六英尺高。由于硬件故障,只有1200个还能用。随机发生的故障正在不断破坏系统。为了存活下去,谷歌必须将其计算机整合成一个无缝连接、有适应能力的整体。

  杰夫和桑杰一同负责这一任务。曾在苹果负责过Macintosh前身的韦恩·罗辛(Wayne Rosing)在2000年11月加入了谷歌,管理一个数百人的工程团队。“他们都非常优秀。”他这样说道。他们能连着每周工作90个小时写代码,就为了单个硬盘的故障不会破坏整个系统。他们还在爬虫过程中增设了检查站。通过制定新的编码以及压缩体系,他们能够高效增加系统的功率。他们是不知疲倦的优化者。当车辆转弯时,外面的车轮必须接触到更多地面。与之类似,旋转硬盘的外沿也必须比内沿的移动速度要快。谷歌将频繁被访问的数据移到外部,而保持内部空白。杰夫以及桑杰利用此空间来存储相同搜索询问中被预先处理过的数据。在2001年的四天内,他们证明了谷歌的索引可以采用快速随机存取存储器,而不必使用相对缓慢的硬盘。这一发现改变了公司的经济情况。佩奇和布林知道用户会争相来使用能立即提供答案的服务。问题在于速度就意味着计算力,而计算力需要资金。杰夫和桑杰用软件克服了这一困难。

  罗辛在2005年离开之后,艾伦·尤斯塔斯(Alan Eustace)成为了工程团队的负责人。“矛盾的是,为了解决一定规模的问题,你需要掌握最细微的细节。”尤斯塔斯说道。杰夫和桑杰能够非常确切得掌握计算机的细节信息。杰夫曾经发布了一份清单,讲的是“每一位程序员都应该知道的延迟值”。实际上,几乎没有一个程序员知道这些值意味着什么。这项数字已经深深嵌入在了杰夫和桑杰的大脑中。他们带头重新编写谷歌核心软件时,系统的功率成量级增长。即便零件有的老旧或失灵,系统也依然存活了下来。

  两个高级研究员

  如今,谷歌的工程师会被分为很多级。第一级就是IT支持人员。第二级是刚出大学的应届生。第三级则是有硕士学位的毕业生。达到第四级需要几年时间,或是需要拥有博士学位。大多数人止步于第五级。第六级的工程师——最顶尖的10%——非常厉害,他们可以说是一个项目成功的原因。第七级和第六级的工程师资历都非常老了。首席工程师也就是第八级,他们通常会负责一个主要产品或基础架构。杰出工程师为第九级,他们在业内备受尊崇。如果成为了谷歌研究员,那么你就是第十级工程师,这是一种终身荣誉。谷歌研究员在其各自领域都是全球的顶尖专家。杰夫和桑杰就是谷歌的高级研究员——公司内绝无仅有的两个第十一级工程师。

  谷歌的园区就坐落在距离里山景城市中心几分钟车程的公路旁。园区内有一排低矮的建筑物。去年夏天的一个周一,在早晨完成编程之后,杰夫和桑杰一起去园区内名为“Big Table”的自助餐厅就餐。该餐厅的名字是以他俩在2015年参与开发的系统来命名的,该系统可以将无数台计算机当作是一个数据库进行处理。瘦瘦高高的桑杰穿着褐红色的亨利衫、灰色的裤子,戴着一副线框眼镜。他看到外边的一个桌子,很快走过去,用曲柄打开伞,然后坐在阴凉处。他又将太阳下的另一把椅子搬过来。杰夫几分钟之后走了过来。

  两人就像是一对夫妻,各自讲述一点过去的事情,就这么拼凑出了过往的回忆。他们开始回忆起自己早期的项目。

  “我们当时还是手打代码。”桑杰说道。他的眼镜在阳光下萌生了一丝阴影。“我们会重新写代码,然后就感觉——‘哦,这好像是我们上个月写过的那个。’”

  “或是和索引数据略微不同。”杰夫补充道。

  “略微不同。这就是我们发现问题的方式。”桑杰说道。

  “这是关键。”杰夫说道。

  “这是共有的模式。”桑杰说。

  杰夫咬了一口他买的披萨,他的手指像水手的手指,骨节突出且有些粗糙。而桑杰的手指相比而言更显纤细。桑杰在想他们是怎么成为搭档的。“我有点记不太清楚为什么我俩做搭档更好了。”

  “我们在谷歌之前就一起合作。”杰夫说。

  “但我记不清为什么我们要在一台电脑上编程,而不是在两台电脑上工作。”桑杰说。

  “在数字设备公司工作的时候,我经常从我的实验室走两个街区到他的实验室。两个实验室中间有一个冰淇淋店。”

  “是冰淇淋店!”桑杰笑道。

  桑杰一直未婚,他会在假期同杰夫、杰夫的妻子海蒂以及他的两个女儿一起度假。杰夫的女儿们叫他桑杰叔叔,他们五个人经常在周五共进晚餐。桑杰和杰夫的大女儿会一起做烘焙。“我算是见证了他两个女儿的成长。”桑杰自豪地说道。在谷歌2004年首次公开募股之后,他们搬到了仅隔四英里的房子里。桑杰住在山景城一个三居室房子里,而杰夫则自己设计了房屋,在地下室里装了一个蹦床。在设计房屋时,他发现自己虽然喜欢设计空间,但并没有耐心去完成建筑方面“适合桑杰的部分”:横梁的细节、螺栓以及供电量等等。

  “我不知道为什么没有更多的人像我们这样合作。”桑杰在提及与搭档一同编程时说道。

  “你需要找到一个搭档,他的思维方式与你相符,这样你们两个人就能够优势互补。”杰夫说道。

  他俩将桌子往后移,在餐厅和谷歌员工中四处溜达,寻找软质冰淇淋。杰夫更急于解释,在他们走动的过程中,他分享了自己软质冰淇淋的策略。“我负责压扁。我想挤压的方法能够增加稳定性。”他说道。桑杰则为他的甜筒选了巧克力和香草味的混合冰淇淋。

  在社会学家迈克尔·法瑞尔(Michael P. Farrell)于2011年出版的《协作圈:友谊动机和创造性工作》(Collaborative Circles:Friendship Dynamics and Creative work)一书中,作者对比了两组创作型人群——法国印象派、西格蒙德·弗洛伊德(Sigmund Freud)及其同时代人——之间的的区别。“构成新愿景的想法并非是在整个团队齐心协力时出现的,也不是在成员单独工作时出现的,而是在双方合作并组队回应另外一队人时出现的。”他这样写道。莫奈和雷诺阿曾在1869年一同合作,开创了印象派画法。毕加索和乔治·布拉克合作的六年时间内,催生出了立体主义,因为双方通常会在油画背面签名,以掩盖究竟是谁完成了作品。(“一幅油画完成与否,得由我们双方都觉得它完成了才行。”毕加索之后回忆道。)

  在新科学或艺术的“理论构建”阶段,进行大范围的探索非常重要,而不能绕进死胡同。François Jacob以及Jacques Monod一同开创了基因调控。他指出到二十世纪中期,分子生物学新兴领域的大多数研究都是两人合作的结果。“相比一个人,两个人能更好地想出理论并且建构模型。”雅各布写道,“当两个人一同解决问题时,创意会更加‘茂密’、更快出现。它们会在合作伙伴之间来回反射。两者会结合得更加紧密,就像是树上的枝杈一样。而在此过程中,假象就会很快被扼杀在萌芽中。”在过去三十五年来,大约有一半的诺贝尔奖生理学或医学奖被授予给了科学合作伙伴。

  在分享工作生活多年之后,两个人会形成一种私密的语言,就像是双胞胎一样。他们会模仿彼此的穿着、习惯。幽默感会在潜移默化中传递。分配信任是一件不可能的事情。但是这种强度的合作关系在软件开发中是非比寻常的。尽管一些开发者有时候会谈论“组队编程”——两个程序员共用一台电脑,一个人“驾驶”、另一个人“导航”——他们通常会认为这样的合作关系显得很多余,这就好像同一架飞机上安排了两个副驾驶员。相比之下,杰夫和桑杰有时候就像是一个大脑的两个部分。一些知名论文通常有许多第二作者。不过,他们的经理比尔·库格兰(Bill Coughran)回忆道:“他们两个人搭档时效率很高,以至于我们经常围绕他们来组建团队。”

  1966年,系统开发公司的研究人员发现最出色的程序员是糟糕程序员效率的十倍以上。所谓的“10倍程序员”说法自此开始引发争议。这一想法推崇个体,但软件项目规模庞大,通常需要多人参与。在编程中,极少数人能依靠单打独斗取得成功。即便如此——或是颇具讽刺意味的是——许多程序员都认为杰夫和桑杰合作的成果是10倍程序员存在的证据。

  杰夫于1968年7月出生在夏威夷。他的父亲安迪是一名热带疾病研究人员,他的母亲弗吉尼亚·李是一位会说六国语言的医学人类学家。有趣的是,父子两人设计了一台IMSAI 8080工具包电脑。他们在机器上进行焊补更新,掌握了机器的每个零件。

  杰夫和他的父母经常搬家。十三岁那年,他在八年级最后三个月时间里翘课,去西部索马里的难民营帮助其父母。之后,在高中,他开始为流行病学家编写了一个叫作Epi Info的数据收集程序。之后,该程序成为了流行病学家野外工作的标配工具,最终,它以十多种语言被复制发行了数十万份。

  杰夫的博士学位专业是编译器,该软件可以将人们写的代码转化针对计算机优化的机器语言指导。“就有趣程度来说,编译软件变得愈加无趣。”Alan Eustace说道,但另一方面它又能让你“非常接近机器”。桑杰在描述杰夫时,将其食指转动了一下,“当你在编写代码时,他的脑海里就能有一个模型。”他说道,“这些代码的结果是什么?他会半自动得思考所有极端情况。”

  桑杰是17岁去康奈尔念书时才第一次接触电脑。他于1966年出生在印第安纳州西拉斐特,但在一个位于印度北部的工业城市长大。他的父亲Mahipal是一位植物学教授,他的母亲Shanta则在家照顾桑杰以及另外两个兄妹。他们一家人都喜爱读书:他的叔叔Ashok Mehta记得自己买过一本破旧的《The Day of the Jackal》,一家人一同看完才会翻页。桑杰的弟弟成为了哈佛商学院有史以来最年轻的教职人员,现在则是纽约大学斯特恩分校的教授。

  在麻省理工就读研究生期间,桑杰认识了一群关系亲密的朋友。尽管如此,他却从不去约会,现在约会的次数也是“屈指可数”。他说自己并不想结婚——他就是这么想的。朋友在知悉之后决定不再就此事去打扰他,他的父母很早之前就接受自己的儿子将会一直是单身汉的事实。也许他喜欢清静,在谷歌时,他就散发着一种神秘的气息。他虽然沉默寡言,但思想深邃——他是一个能进行深入思考,但思路依旧清晰的人。近二十年来,他一直在自己的桌上放着一堆Mead笔记本,上面满是干净的清单以及示意图。他喜欢用钢笔写草体字。他很少翻阅之前的笔记本,书写只是为了思考。在麻省理工,他的毕业导师是一位颇具影响力的计算机科学家Barbara Liskov。在她看来,最好的代码就像是写作。它需要认真思考结构,每个词都能物尽其用。编程也需要获得读者的共鸣。这就意味着代码不仅仅只是一种实现目的的手段,而它本身就是一项人工制品。“我觉得桑杰最擅长的就是设计系统。”克雷格·西尔弗斯坦说道,“如果你看过桑杰写的代码,你会发现它就和比例完美的雕塑一样漂亮。”

  在谷歌,杰夫的知名度要更高一些。员工间会流传杰夫的表情包等。但在那些了解杰夫和桑杰的人看来,桑杰也同样是一位杰出的人才。“杰夫擅长于想出新电子然后设计原型。”与之共事很久的同事威尔逊·谢(Wilson Hsieh)说道,“桑杰擅长打造一个持久的产品。”在生活中,杰夫性格更外向一些,桑杰则是偏内向。而在编程的世界里,恰恰相反。杰夫的编程令人头晕目眩——他能很快列出惊人的想法——但是,正因为想法之快,它会将阅读代码的人抛在身后。而桑杰的代码则易于理解。

  西尔弗斯坦表示:“一些人的代码松松垮垮。整个屏幕上的信息寥寥无几。你需要来回翻阅才能弄清楚。”还有一些人写的代码非常密集:“你仔细阅读之后,就会心想——我并不想阅读这样的内容。桑杰却能够在两者之间取得更好的平衡。看他的代码,你的感觉就是——‘好的,我可以明白’,但你依然能发现这一页上有很多内容。每当我想要在桑杰的代码上添加新功能时,似乎这些功能早就设计好了。我感觉自己像是Salieri,我能理解它的伟大,但我不明白这究竟是怎样做到的。”

  职责不同,但友谊长存

  今年春天,某个周一的早晨,杰夫和桑杰站在谷歌人工智能部门的小厨房内。在他们身后,一块白板上写满了矩阵代数。桌上的纸上都是一些无人监管的对抗网络。杰夫穿着一件褪色的T恤和牛仔裤,看上去像是一个在海滩消遣的人,而桑杰则穿着毛衣和灰色裤子。明亮的窗户外是一颗高高矗立的松树,再往外则是一块田地。不论何时,杰夫在谷歌工作的地方总有制作卡布奇诺的咖啡机。“我们快迟到了。”桑杰在咖啡机旁说道。已经是八点三十二分了。

  在喝完咖啡之后,他们就走向自己的电脑。杰夫从他的桌子那边将椅子移到桑杰的桌子旁。杰夫的桌子上一团乱,反观桑杰的桌子却是整洁无暇。杰夫将一只脚搭在文件柜上,背靠椅子,而桑杰则在看着面前的屏幕。他们面前共有四个窗口,左边是一个网页浏览器和一个终端,主要用于运行分析工具。右边,文本编辑器Emacs中有两个文档,一个是待办事项和笔记,另一个文档则是五颜六色的代码。桑杰的笔记本就放在计算机旁边。

  “好了,我们做些什么?”桑杰问道。

  “我想我们应该看看TensorFlow Lite的代码规模。”杰夫说道。

  这是一个关于机器学习的新型软件项目,杰夫和桑杰担心项目有些“臃肿”。就像是书本编辑一样,他们在寻找可以削减的地方。针对这项任务他们开发了一个新的工具可以自行进行优化。

  “我想的是弄清楚速度有多慢。”桑杰说道。

  “已经非常慢了。”杰夫说道,他往后靠了靠,神态轻松。

  “这个是120个千字节。”桑杰说道,“大概是八秒左右吧。”

  “12000个函数调用堆栈。”杰夫说道,“而不是千字节。”

  “额,文本千字节。”桑杰说道。

  “好吧,我的错。”杰夫说。

  “我不太清楚我们应该挑选什么样的单元大小。”桑杰说,“一半兆位?”

  “看上去不错。”杰夫说。桑杰开始输入代码,杰夫的目光则放在了屏幕上。“你刚才是说,如果这比我们抽样的结果要大……”剩下一半话他还没说完,桑杰就用代码回答了他的问题。

  当桑杰工作的时候,他会聚精会神。他会将双脚岔开到肩宽,似乎这就是他工作的姿势。他的手指在键盘上轻微移动。几位年轻的程序员走了进来。

  很快,他们达到了一个小的里程碑。桑杰输入了一个命令来测试进度。他似乎有些疲惫,在测试运行过程中他查看了自己的电子邮件。测试完成之后,他也并没有在意。

  “嘿,”杰夫说。他打了一个响指,然后指向屏幕。虽然谈话中充满了玩笑和俏皮话,但当他和桑杰坐在电脑前时,他还是会变得固执、粗鲁,意见也是经常不合。而桑杰则淡然处之,当他认为杰夫速度太快时,他会把手从键盘上拿开,摊开手指,好像在说,“停下来”(通常来说,杰夫是加速器,桑杰就是刹车)。这就像他们开始争论一样:在一起20年了,他们已经不记得要提高嗓门了。

  桑杰滚动着屏幕,让一段新代码进入视线。杰夫说:“比如,所有这些都可以变成例行公事,不是吗?”

  桑杰表示同意,“嗯”。

  杰夫按压着指关节,啪啪作响。“似乎可行,我们应该那样做吗?”

  桑杰显得很谨慎。“不,我……”

  杰夫有些不高兴的说:“这样我们将会忽视一个问题?”

  “不,我的意思是,我们只想弄清楚正在发生的事情的类型。然后,我们可以做笔记,对吧?”

  杰夫高兴地回答说:“好吧。”他的情绪很快变得轻松了,然后他们开始一起做笔记了。

  午餐时间快到了。他们工作了两个小时,中间只休息了10分钟,大部分时间都在讨论。

  让另一名程序员检查你的代码,已成为一种标准的开发惯例。但杰夫和桑杰则跳了过这一步,只是敷衍地在他们的日志中输入了“LGTM”(looks good to me),即“看起来还不错”。表面上看,他们的工作都是一些微小的事情。但事实上,他们的代码被用于谷歌整个公司范围内。有时,杰夫回到家里会告诉自己的女儿:“今天,桑杰和我把谷歌搜索的速度提升了10%。”

  2003年,通过MapReduce这款软件,杰夫和桑杰曾赋予谷歌一次最大规模的升级。这是他们第三次有了重写谷歌爬虫和索引器的想法。每一次,他们都解决了一个重要的问题:在分布于许多不同地区的、个别不可靠的计算机上协调工作。推广他们的解决方案意味着,他们可以避免一次又一次地重温这个问题。但同时,它也将创造出一种工具,任何谷歌的程序员都可以用它来操纵数据中心里的机器,就好像它们是一台单一的、行星大小的计算机一样。

  杰夫和桑杰开发的MapReduce对可能非常复杂的程序强加了顺序。在MapReduce之前,每个程序员都必须弄清楚如何划分和分发数据、分配工作,并自己解决硬件故障。而MapReduce则赋予程序员一种结构化的思考这些问题的方式。正如厨师的开工前准备一样,在组合各种配料之前,要准备好这些配料。

  MapReduce要求程序员将他们的任务分成两个阶段。首先,一名编程人员告诉每台机器如何执行任务的“映射”阶段(例如,计算一个单词在网页上出现的次数);其次,编写指令“减少”所有机器的结果(例如,将它们加起来)。MapReduce通过这样做,隐藏它们,来处理分发的细节。

  第二年,杰夫和桑杰根据MapReduce任务重写了谷歌的爬虫和索引系统。不久,当其他工程师意识到它的强大时,他们开始使用MapReduce来处理视频,并在谷歌地图上渲染内容。MapReduce如此简洁,以至于新的任务一直不断地自我提示。谷歌拥有所谓的“日使用曲线”——白天的流量比晚上多——MapReduce任务开始吸收空闲容量。

  早期曾有迹象表明,谷歌是一家人工智能内(AI)公司,假扮成一家搜索公司。2001年,与杰夫和桑杰在同一办公室的诺姆·沙泽(Noam Shazeer),对谷歌从另一家公司授权获得的拼写检查器感到沮丧:因为它总是犯一些令人尴尬的错误。例如,用户明明想输入“TurboTax”,它总是认为用户想输入“turbot ax.”。

  拼写检查器应该和字典一样好,沙泽意识到,在互联网上,谷歌已经访问到了有史以来最大的字典。于是,他编写了一个程序,利用网络上文本的统计特性来确定哪些单词可能拼错了。该软件能分清,“pritany spears”和“brinsley spears”都是指小甜甜布兰妮(Britney Spears)。

  当沙泽在谷歌每周一次的T.G.I.F.大会上演示这个程序时,员工们试图从中找出一些毛病,但大多数都失败了。通过与杰夫和另一位工程师乔治·哈里克(Georges Harik)合作,桑杰后来又在网页广告中使用了类似的技术。

  随着越来越多的编码人员使用MapReduce从谷歌的数据中提取各种规律和结论,使得转录用户的语音邮件、回答他们的问题、自动完成他们的查询,并在一百多种语言之间进行翻译成为可能。这样的系统就是使用相对简单的机器学习算法开发的,但杰夫说,“虽然技术简单,但只有当你有了大量的数据,才能做得更好。”

  随着“数据、数据和数据“——通过BigTable、MapReduce和后续产品来存储和处理——变成一项重要的任务之后,谷歌在全球范围内的基础设施才变得越来越无缝和灵活。如今,分布式计算已经成为陈旧的概念了,云计算和大数据正在推动谷歌的崛起。

  但是,通过让普通的程序员在编写分布式程序时更加智能、易于管理,杰夫和桑杰让谷歌对这类技术的掌握达到了一个新水平。事实上,用户可能已经感觉到事情已经发生了变化:谷歌云变得越来越智能。

  2004年,杰夫和桑杰意识到,大量的数据处理会给天文学家、遗传学家和其他需要处理大量数据的科学家们带来大量裨益,他们撰写了一篇论文《MapReduce:大型集群上的简化数据处理》,并公开发表。

  硬件价格日益低廉、Web服务的普及,以及联网设备的增加,导致了大量数据的出现,但是没有几家公司有相应的软件来处理这些信息。为此,两名工程师迈克·卡弗雷拉(Mike Cafarella)和道格·卡亭(Doug Cuting)在意识到了MapReduce的重要性之后,决定从头开始,对这套系统进行“克隆”。

  后来,他们把该项目命名为“Hadoop”,名字的来源就是卡亭儿子的一个棕黄色大象玩具的名字。随着Hadoop的成熟,如今它已被“财富50强”的一半企业采用,它甚至成为了“大数据”的代名词。目前,Facebook正在使用“Hadoop MapReduce”来存储和处理用户的元数据,包括用户点击了什么、喜欢什么,以及观看了哪些广告等。

  它还一度拥有世界上最大的Hadoop集群,LinkedIn和Netflix也在使用Hadoop MapReduce。此外,美国国家安全局(NSA)前技术总监兰迪·加勒特(Randy Garrett)还曾向NSA局长基思·亚历山大(Keith Alexander)演示过该技术。与之前的系统相比,Hadoop在执行分析任务时的速度要快出一万八千倍。如今,它已成为情报搜集新方式的基础,一些观察家将其称之为“收集一切”。

  杰夫天性不安:一旦看到了解决问题的雏形,他对这个问题的兴趣就变得不那么浓厚了。2011年,当世界开始拥抱云计算的时候,他开始与斯坦福大学的计算机科学教授吴恩达(Andrew Ng)合作。当时,吴恩达在谷歌领导一个秘密的项目,在一个神经网络上进行研究。

  杰夫在大学时代接触过神经网络,但那时候,人们还不能解决一些现实中的问题。吴恩达告诉杰夫,如今这种情况正在发生改变。在斯坦福大学,由于神经网络能够访问到大量数据时,研究人员已经取得了一些令人兴奋的结果。考虑到谷歌的规模,吴恩达认为,神经网络不仅有用,而且是非常强大的。

  神经网络与传统的计算机程序有着很大的不同。神经网络的行为不是由编码人员以通常的方式指定的,相反,它可以利用输入和反馈来“学习”。自大学毕业后,杰夫的神经网络知识就没有多大进步。但随后,妻子海蒂(Heidi)就发现,他们的浴室中堆满了相关书籍。

  后来,杰夫开始每周花一天的时间来做这个名为“谷歌大脑”(Google Brain)的项目。许多谷歌员工对这项技术表示怀疑,他当时的经理艾伦·尤斯塔斯(Alan Eustace)回忆说:“太浪费人才了。”当时,桑杰也不理解杰夫的举动,他在心里想:你从事基础架构工作,跑到那边干什么?

  在接下来7年的时间里,“谷歌大脑”团队开发了神经网络,该神经网络在机器翻译、语音和图像识别方面超越了当前技术。最终,他们还取代了谷歌最重要的搜索结果排名和精准广告算法,“谷歌大脑”也成为公司发展最快的团队之一。2001年就已入职的谷歌工程师克莱尔·崔(Claire Cui)称,杰夫的参与代表着谷歌在人工智能领域的一个转折点:有些人相信它,有些人不相信,而杰夫给出了答案,它是可行的。

  人工智能在很大程度上依赖于规模,为此,杰夫又领导开发了TensorFlow,相当于人工智能时代的MapReduce。TensorFlow简化了在一组计算机上分布神经网络的任务,将其变成一个大脑。2015年,当TensorFlow面向公众发布时,就成了人工智能的通用语言。近期,谷歌CEO桑达尔·皮查伊(Sundar Pichai)宣布谷歌是一家“人工智能为先”的公司,并任命杰夫为人工智能战略负责人。

  如今,杰夫每周花4天时间来运营“谷歌大脑”,指挥着3000人的工作。他出差发表演讲,每周召开一次会议来研究一种新型计算机芯片(Tensor处理单元,专门为神经网络设计),并帮助开发AutoML,后者是一套使用神经网络设计其他神经网络的系统。除此之外,他每周只能与桑杰沟通一次。

  工程业绩往往会抹杀自己。如今,我们还记得18世纪伟大的探险家詹姆斯·库克(James Cook)和乔治·温哥华(George Vancouve),但已不记得约翰·哈里森(John Harrison)。哈里是一名钟表匠,发明了航海精密计时器,解决了海上精确定位的问题。

  近期,杰夫和桑杰曾在他们经常光顾的一家墨西哥餐厅“Palo Alto Sol”享受美食。杰夫拿出手机问:“Gmail何时诞生?”手机回答说:“2004年4月1日。”对于杰夫不专心享受美食,桑杰似乎并不欣赏,但杰夫本人却很得意。如今,通过一系列程序的无缝整合,谷歌可以通过说、听和回答的方式,让用户通过手机连接到全球的数据中心。

  当前,他们在谷歌的职责各有不同。桑杰目前是一位“个人贡献者”,一名编程人员,不管理任何人。对此,他感到很满足。他说:“我不想要杰夫的工作。”目前,他正在开发一款软件,允许工程师轻松整合和管理十几款应用程序。如果把谷歌比作一所房子,杰夫是在建造一个附加产品,而桑杰则在支撑结构,加固房梁,拧紧螺丝。

  同时,在周一的编程大会上,他们已经启动了新项目。这是一个人工智能项目,据杰夫称,要培训一个巨大的机器学习模型,能够处理上千、甚至上百个不同的任务。对于该想法,杰夫已经考虑好多年。近期,他认为时机已成熟。他和桑杰想先建立一个原型,然后整个团队再基于此进一步开发。

  杰夫的妻子海蒂说:“我认为他们还是想念着对方。”当合作放缓时,他们就会在星期五一起吃晚餐。

  3月份的一个星期日,杰夫和桑杰在库比蒂诺(Cupertino)郊外有一次会面。当时,天气晴朗,在阳光的照射下也显得很热。杰夫开着一辆蓝色的特斯拉Roadster跑车,桑杰开着红色的Model S。整个早上,桑杰在阅读,杰夫在踢足球。小腿上的一个设备告诉他,他已经跑了7.1英里。在建立“3月指数”20年后,杰夫像一名退休的耐力运动员,他的皮肤被太阳晒坏了。而桑杰看起来并不显老。

  他们走在一条6英里的环线道路上,穿过一片茂密的森林。杰夫带路,他们在森林里回忆起谷歌的成长。桑杰会议说,在公司第一次发展壮大的时候,一个水管工在男厕所的一个空间位置上安装了两个坐便器。他说:“我记得杰夫当时的评价,两个总比一个好!“说完就笑了。

  杰夫说:“这山要比我想象的陡。”

  而桑杰说:“我还想有人会说这是一个很平缓的徒步旅行。”

  杰夫接着说:“这可能就是为什么那边没有自行车道的原因。”

  他们又重新爬回了树林。在转弯处,杰夫向树林之外一瞥,说:“在某个时候,我们要好好看看。”

  这条路延伸到山顶上,又高又宽,没有树木遮挡,景色尽收眼底。尽管地平线上有一片雾霭,但他们向南仍可以看到圣克鲁斯山,向东可以看到Mission Peak公园。杰夫说:“桑杰,那里就是你的办公室!”他们站在一起,眺望山谷。

责任编辑:张燕妮 来源: 新浪科技
相关推荐

2013-07-05 10:52:07

程序员结对编程

2015-02-05 09:54:13

程序员

2013-05-10 09:31:06

程序员

2018-06-29 16:04:40

2019-08-22 10:07:33

程序员开发危机

2013-11-06 09:54:22

程序Windows

2015-07-20 09:21:19

程序员非程序员技能

2021-12-20 14:42:39

程序员职业技术

2020-11-05 10:59:05

程序员技术设计

2018-03-07 10:47:54

程序员技能中年危机

2014-10-20 12:24:59

程序员

2023-04-21 18:48:18

谷歌人工智能开源

2019-10-15 11:42:23

程序员好好学习算法

2020-11-06 15:03:03

程序员技术设计

2021-07-05 07:28:14

程序员菜鸟技术

2009-04-07 11:05:59

经济危机程序员职场

2018-09-06 13:06:46

程序员焦虑谷歌

2019-11-28 10:53:19

程序员技能开发者

2020-02-22 21:51:43

程序员Microsoft SServerSQL

2018-05-09 00:04:50

程序员技能沟通
点赞
收藏

51CTO技术栈公众号