谷歌公司最重要的两位程序员不为人知的友情故事

电子说

1.2w人已加入

描述

《纽约客》杂志近日发表长文,描写了谷歌公司最重要的两位程序员不为人知的友情故事:Jeff Dean和Sanjay Ghemawat。两人的友谊已经持续20年,他们都是天才的程序员,工作上是最默契的搭档,生活上情同手足。

2000年3月的一天,谷歌最优秀的六位工程师聚在一个临时作战室。

谷歌公司正处于空前的紧急状态。上一年10月,谷歌的核心系统停止了工作,这些系统通过在网络上“爬行”来构建“索引”(index)。尽管用户仍然可以在google.com上输入查询,但他们收到的结果已经过时5个月。

更多的危险工程师们还未意识到。谷歌创始人拉里·佩奇(Larry Page)和谢尔盖·布林(Sergey Brin)当时正在与雅虎进行谈判,为雅虎开发搜索引擎,并且他们承诺提供的索引比他们当时拥有的索引还要大10倍。如果失败了,google.com就仍然只是一个时间胶囊,与雅虎的交易也可能会告吹,谷歌公司将面临资金耗尽的风险。

在比特级别理解计算机

在一间靠楼梯的会议室里,工程师们在锯木架上铺上门板,安装了电脑。二十七岁的克雷格·西尔弗斯坦(Craig Silverstein)坐在远处靠墙处。Silverstein是谷歌的第一名员工:他加入公司时,公司的办公室就在布林的客厅里,他自己重写了公司的大部分代码。经过四天四夜,他和一位罗马尼亚的系统工程师Bogdan Cocosel一无所获。“我们所做的分析没有任何意义,”Silverstein回忆说:“所有东西都坏掉了,而我们不知道为什么。”

Silverstein几乎没有注意到他左边一个人的存在——Sanjay Ghemawat。Sanjay是几个月前,也就是1999年12月加入公司的。他跟另一位同事——一位身材瘦高、精力充沛的31岁男子,名叫Jeff Dean,同样来自Digital Equipment Corporation。

Jeff比Sanjay早10个月离开D.E.C。他们两人非常亲密,而且都更喜欢共同写代码。在作战室里,Jeff把椅子转到Sanjay的桌前,让自己的桌子空着。Sanjay敲代码,Jeff在一旁纠正他,就像新闻主播身边的制作人。

Jeff Dean和Sanjay Ghemawat

Jeff和Sanjay开始仔细研究索引停滞不前的原因。他们发现有些单词丢失了——他们搜索了“mailbox”,但没有得到任何结果;还有一些单词的顺序被打乱。几天来,他们一直在寻找代码中的bug,沉浸在代码逻辑中。一段一段地,终于全部检查完毕。但他们没有找到bug。

程序员有时将软件概念化为层次结构,从顶层的用户界面,再到越来越基础的层。要深入到这种结构的底部,即软件与硬件相结合的地方,就必须抛弃柏拉图式的代码顺序,转向它所依赖的电和硅的元素世界。在作战室的第五天, Jeff和Sanjay开始怀疑他们正在寻找的问题不是逻辑上的,而是物理上的。他们将混乱的索引文件转换成最原始的表示形式:二进制代码。他们想看看机器所看到的是什么。

在Sanjay的显示器上,出现了由1和0组成的长列,每一行代表一个索引词。Sanjay指出:一个本该是0的数字变成了1。当Jeff和Sanjay把所有错误排序的单词放在一起时,他们发现了一个模式——每个单词都出现了同样的小毛病。他们的机器的存储芯片不知怎么坏掉了。

几个月来,谷歌发生的硬件故障越来越多。问题的根源是,随着谷歌的发展,它的计算基础设施也在不断扩大。计算机硬件很少出故障,但到了硬件非常多的时候,故障就会经常出现。电线磨损、硬盘崩溃,主板过热。许多机器一开始就不能工作;有些机器会莫名其妙地变慢。环境因素会造成影响。超新星爆炸时,冲击波会产生高能量粒子,分散在各个方向;科学家们认为,有一种被称为宇宙射线的偏离轨道的粒子极有可能击中地球上的计算机芯片,使其从0变成1。

世界上最强大的计算机系统,如安装在美国国家航空航天局、金融公司等的,它们使用了特殊的硬件,可以承受单比特翻转。但当时仍像一家初创公司的谷歌使用的是更便宜的计算机,没有这样的能力。谷歌已经到了一个转折点。它的计算集群已经发展到如此之大,以至于即使是不太可能的硬件故障也成了不可避免的。

Jeff和Sanjay一起编写代码,试图修复这些问题机器。不久,新的索引就完成了,作战室解散了。Silverstein是困惑的。他是一名优秀的调试人员,他知道发现错误的关键是找到问题的根源。但Jeff和Sanjay找得更深。

在3月份索引崩溃之前,谷歌的系统一直根植于其创始人在斯坦福大学研究生院编写的代码。佩奇和布林都不是专业的软件工程师。他们是进行搜索技术实验的学者。当他们的网络爬虫崩溃时,并没有出现任何有用诊断信息——只有一句“Whoa, horsey!”早期员工把佩奇和布林编写的一个名为BigFiles的软件称为BugFiles。修复所有重要的索引代码需要几天才能完成,如果遇到问题,又必须从头开始。用硅谷的话说,谷歌不具备“可扩展性”。

我们说“search the Web”,但实际上并不是;搜索引擎只是遍历web的索引——一个映射。1996年,当Google还是BackRub时,它的地图小到可以装在佩奇宿舍里的电脑上。2000年3月,还没有足够大的超级计算机能够处理它。谷歌能做的唯一方式就是购买消费者机器,然后将它们连接成一个机群。

因为这些电脑一半的成本都在谷歌认为是垃圾的部件上——软盘驱动器、金属机箱——因此公司会订购原装主板和硬盘驱动器,然后将它们装在一起。在加州圣克拉拉的一栋大楼里,谷歌有1500台这样的设备,堆放在6英尺高的塔楼里;由于硬件故障,只有1200台机器工作。看似随机发生的故障不断地破坏系统。为了生存,谷歌必须把它的计算机整合成一个无缝的、能迅速恢复的整体。

Jeff和Sanjay一同负责这项任务。曾在苹果公司负责Macintosh前身的韦恩•罗辛(Wayne Rosing)在2000年11月加入了谷歌,管理大约100人的工程团队。

“他们都非常优秀,”罗辛说。为了保障单个硬盘驱动器发生故障时不破坏整个系统,他们能连着每周工作90个小时写代码。他们在爬虫过程中增加了检查点,以便可以在中途重新启动。通过开发新的编码和压缩方案,他们有效地使系统的容量增加了一倍。他们是不屈不挠的优化者。当汽车转弯时,外轮必须覆盖更多的地面;同样,旋转硬盘的外沿必须比内沿转动得更快。谷歌将最常访问的数据移到外部,以便在读头下比特可以更快地流动,但内部的一半是空的;Jeff和Sanjay使用该空间存储用于常用搜索查询的预处理数据。

2001年,他们花了四天时间,证明了谷歌的索引可以使用快速随机存取存储器(RAM)来存储,而不是使用相对缓慢的硬盘来存储;这一发现重塑了该公司的经济状况。佩奇和布林知道,用户会涌向一项能即时提供答案的服务。问题是,速度需要计算能力,而计算能力需要钱。Jeff和Sanjay用软件解决了这个问题。

2005年,罗辛离开谷歌后,艾伦·尤斯塔斯(Alan Eustace)成为工程团队的负责人。“矛盾的是,要解决大规模的问题,你必须知道最小的细节,”尤斯塔斯说。Jeff和Sanjay是在比特的级别上理解计算机的。

Jeff曾经分发过一份“每个程序员都应该知道的延迟时间”的列表。实际上这是一份几乎没有哪位程序员知道的数字列表:L1缓存引用通常需要0.5纳秒,或者从内存中连续读取1兆字节需要250微秒。这些数字根植在Jeff和Sanjay的大脑里。他们帮助推动了对谷歌核心软件的几次重写,系统的容量升了几个数量级。与此同时,在谷歌庞大的数据中心里,技术人员按照软件生成的指令更换硬盘、电源和记忆棒。即使部分部件损坏或崩溃,系统仍能正常运行。

今天,谷歌的工程师存在于一条巨大的链中,从1级开始。最底层是IT支持人员。2级是刚从大学毕业的学生;3级通常拥有硕士学位。达到4级需要几年时间,或者一个博士学位。6级工程师(前10%)的能力非常强,通常是项目主管;从6级升到7级需要很长时间的贡献记录。首席工程师,即8级,是主要产品或基础设施的负责人。杰出工程师,即9级,是备受尊敬之人。最后,成为Google Fellow,10级,就是赢得了一项荣誉,这项荣誉将伴随你一生。Google Fellow通常是他们所在领域的世界领先专家。Jeff和Sanjay是谷歌的高级Fellow(Senior Fellow),他们是谷歌公司最初的、也是仅有的2位11级工程师。

谷歌园区位于一条高速公路旁,距离山景城市中心只有几分钟的路程。园区里有一群低矮的建筑,没有什么吸引力,窗户都是彩色的。去年夏天的一个星期一,在一起编程了一个上午之后,Jeff和Sanjay一起去园区食堂吃午饭。食堂名叫“Big Table,得名于他们在2005年帮助开发的一个系统。

Sanjay又高又瘦,穿着一件老派的褐色亨利衫,灰色裤子,戴着一副小框眼镜。他看到外面有张桌子,就轻快地走过去,摇开遮阳伞,在阴凉处坐了下来。他为Jeff把另一把椅子挪到阳光下。Jeff一分钟后到了,他穿着短袖衬衫,脚上穿着时髦的运动鞋。

两人就像一对夫妇。他们各自讲起过去的事情,就这么拼凑出过往的回忆——两人早期的项目。

“我们当时还是手写代码,”Sanjay说。他的眼镜在阳光下变暗了。“我们把代码重写了一遍,结果怎么说,就感觉——‘哦,这似乎和我们上个月写的差不多。’”

“或是和索引的数据略有不同,”Jeff补充说。

“略有不同,”Sanjay说:“我们就是这样发现问题的。”

“这是关键,”Jeff说。

“这是很常见的模式,”Sanjay说完,结束了他们的回忆。

Jeff吃了一口披萨。他的手指像水手一般,骨节突出且有些粗糙;相比之下,Sanjay就更加纤细了。他们是怎么成为一对的呢?

Sanjay说:“我记不太清楚了,我们是怎么成为搭档的呢?”

“我们从进谷歌之前就已经是搭档了,”Jeff说。

“但我不知道为什么我们决定在一台电脑前工作,而不是用两台电脑,”Sanjay说。

“在D.E.C.的时候,我会从两个街区外我的实验室走到他的实验室,”Jeff说:“中间有一家冰淇淋店。”

“原来是冰淇淋店!”Sanjay笑道。

Sanjay是单身,Jeff有妻子和两个女儿,他们曾一起度假。Jeff的女儿们管他叫Sanjay叔叔,他们五人经常在星期五一起吃晚饭。Sanjay和Jeff的大女儿维多利亚都喜欢烘焙。“我看着他的女儿们长大的,”Sanjay自豪地说。

在2004年谷歌IPO之后,他们搬进了相隔四英里的房子。Sanjay住在老山景城一套不起眼的三居室里;Jeff在帕洛阿尔托市中心附近设计了自己的房子,在地下室安装了蹦床。在设计这栋房子的过程中,他发现虽然自己喜欢设计空间,但并没有耐心去完成建筑中所谓“适合Sanjay的部分”:横梁的细节、螺栓、支撑建筑的梁柱等。

“我不知道为什么越来越多人不这样做了,”Sanjay说,他指的是与搭档一起编程。

“你需要找到一个能与你的思维方式兼容的人来做搭档,这样你们俩就能形成互补。”Jeff说。

最棒的搭档:10x程序员

社会学家Michael P. Farrell在2001年初版的《协作圈:友谊动机和创造性工作》(Collaborative Circles: Friendship Dynamics and Creative Work)一书中,对法国印象派画家、弗洛伊德及其支持派等创作型群体进行了研究。

他写道:“大多数后来成为新理论基础的见解,不是在整个团队一起的时候出现的,也不是在成员们单独工作的时候出现的,而是在两个人相互合作、相互回应的时候出现的。”1869年夏天,莫奈和雷诺阿并肩工作,形成了后来称为印象派的风格;在催生立体主义的六年合作中,巴勃罗•毕加索和乔治•布拉克经常只在画布背面签名,不明确说每幅画是两人中谁完成的。(毕加索后来回忆说,“直到我们俩都觉得完成了,画作才算完成。”)

在新科学或新艺术的“理论建设”阶段,广泛探索而不陷入死胡同是很重要的。弗朗索瓦•雅各布(Francois Jacob)和雅克•莫诺(Jacques Monod)共同开创了基因调控研究,他指出,到20世纪中叶,分子生物学领域的大多数研究都离不开这两位的研究结果。

“在构思理论和构建模型方面,两人总比一人好。”雅各布写道:“因为只有当两个人一起解决问题时,思维才能飞得更快、更深。它们从一个人脑袋里跳到另一个人脑袋里。它们相互嫁接,就像树上的树枝一样。在这个过程中,假象很快就会被扼杀在萌芽状态。”在过去的35年里,大约一半的诺贝尔生理学或医学奖颁给了科学合作。

经过多年分享工作和生活,二人有时会发展出一种私人语言,就像双胞胎那样。他们模仿彼此的衣着和习惯。幽默感也会在潜移默化中渗透。在他们之间分配信任是不可能的事。

但这种紧密的合作在软件开发中并不常见。虽然开发人员有时会谈到“组队编程”——两个程序员共用一台计算机,一人“驾驶”,另一人“导航”——但他们也认为这样的合作关系有点多余,就好像同一架航班上安排了两名副驾驶员。

相比之下,Jeff和Sanjay有时更像是一个大脑的两个半球。他们的一些著名论文有十几位共同作者。尽管如此,谷歌的一位经理Bill Coughran回忆道,“他们是如此多产、高效的合作伙伴,我们经常是围绕他们建立团队。”

这两位天才程序员就像一个大脑的两个半球

1966年,系统开发公司(System Development Corporation)的研究人员发现,最优秀的程序员的效率是最糟糕的程序员的十倍以上。从那时起,所谓的“10x(十倍效率)程序员”就一直存在争议。这一说法推崇个人,但软件项目通常规模庞大,需要多人参与。在编程世界中,很少有人能靠单打独斗取得成功。即便如此,许多程序员仍然将Jeff和Sanjay共同完成的工作视为10x程序员存在的证据。

在同一台电脑上编程的天才程序员

Jeff Dean于1968年7月出生于夏威夷。他的父亲Andy是一名热带疾病研究员;他的母亲Virginia Lee是一位医学人类学家,会说六种语言。为了好玩,父子俩设计了一台IMSAI 8080工具包电脑。他们在机器上进行焊补更新,掌握了机器的每个零件。

Jeff和他的父母经常搬家。13岁时,他跳过了8年级最后三个月的课程,去索马里西部的一个难民营做义工。后来,在高中时,他开始为流行病学家编写了一个名为Epi Info的数据收集程序;这个工具后来成为野外工作的一个标准工具,最终以十几种语言分发了几十万份。(美国疾病控制与预防中心运营的一个网站“the Epi Info Story”上有一张Jeff Dean高中毕业时的照片。)

Jeff的博士期间主要研究编译器,这是一种将人类编写的代码转换成针对计算机优化的机器语言指令的软件。Alan Eustace说:“就性感程度而言,编译器相当无趣。”但是另一方面,它会让你“非常接近机器”。Sanjay描述Jeff:“在编写代码时,他会有一个模型。‘这段代码的性能如何?’他几乎可以半自动化地考虑所有细微的情况。”

Sanjay直到17岁去康奈尔大学后才接触到电脑。1966年,他在印第安纳州的西拉法叶出生,但在印度北部的工业城市哥打长大。他的父亲Mahipal是一位植物学教授;母亲Shanta照顾Sanjay和他的两个兄妹。这是一个爱读书的家庭:他的叔叔阿Ashok Mehta记得曾买过一本弗雷德里克·福赛斯的《豺狼之日》,装订已经很破旧了,他看着Ghemawat家的孩子们一起读那本破损的书,读完后一页一页地传下去。Sanjay的哥哥Pankaj后来成为哈佛商学院有史以来最年轻的教员。(他现在是纽约大学斯特恩商学院的教授。)

在麻省理工学院的研究生院期间,Sanjay认识了一群关系亲密的朋友。尽管如此,他从未约会过,直到现在约会的次数也是“屈指可数”。他说他并非是决定不结婚——事情只是自然而然地变成了这样。他的好朋友们已经知道不去打扰他,他的父母很久以前也接受了他们的儿子将会一直单身的事实。

也许因为他喜欢清静,在谷歌,他的周围也笼罩着神秘气氛。他沉默寡言,但思想深邃——他思考深刻,思路异常清晰。在他的桌子上,放着一堆Mead笔记本,这些笔记本可以追溯到20年前,里面写满了整齐的清单和示意图。他喜欢用钢笔和草书写字。他很少翻阅以前的笔记本,书写只是为了思考。

他的研究生导师、MIT教授Barbara Liskov是一位有影响力的计算机科学家,研究的领域包括复杂代码库的管理。在她看来,最好的代码就像一篇好文章。需要有一个精心设计的结构;每个字都应该有用。编程也需要与读者产生共鸣。这意味着不仅将代码视为达到目的的手段,而且将其本身视为一件艺术品。

“我认为Sanjay最擅长的是设计系统,”Craig Silverstein说,“如果你看过他写的代码文件,你会发现他的代码就像比例匀称的雕塑一样美丽。”

在谷歌,Jeff的名气要大得多。但对于熟悉他们两人的人来说,Sanjay是不输Jeff Dean的天才。

“Jeff非常善于提出大胆的新想法,并制作原型,”与他们共事很久的同事Wilson Hsieh说:“Sanjay是能够长期打造一个产品的人。”

在生活中,Jeff更外向,Sanjay更内向。在代码中,情况正好相反。Jeff的程序设计令人眼花缭乱——他能迅速勾勒出令人吃惊的想法——但由于编得很快,代码可能令读者费解。Sanjay的代码则易于理解。

“有些人的代码太松散了,”Silverstein说,“一段代码的信息量非常少。你总是要来回翻页才能弄清楚写的是什么。另一些人写的代码又太过密集,令人读不下去。Sanjay在两者之间。你看着他的代码,你会想,‘很好,我能看懂。’而且,你仍然能够在一页的篇幅中得到很多信息。”

今年春天一个周一的早晨,Jeff和Sanjay站在谷歌人工智能部门所在的40号楼的厨房里。在他们身后,一块白板上写满了矩阵代数;桌上放着一篇关于无监督对抗网络的论文。Jeff穿着一件褪了色的T恤和牛仔裤,看上去像一个改过自新的海滩流浪汉;Sanjay穿着毛衣和灰色裤子。明亮的窗户映出一排高大的松树,远处是一片田野。只要Jeff在谷歌工作,浓缩咖啡机就会出现。在小厨房的柜台上,La Marzocco咖啡机嗡嗡作响。“我们要迟到了,”Sanjay在咖啡研磨机旁说。已经是八点三十二分了。

喝完卡布奇诺后,他们走到电脑前。Jeff把一张椅子从自己凌乱的桌子边拉到Sanjay的桌子旁,Sanjay的桌子则一尘不染。他把一只脚搁在文件柜上,身子往后一靠,Sanjay在他们面前的屏幕上工作。他打开了四个窗口:左侧是一个Web浏览器和一个终端,用于运行分析工具;右侧是文本编辑器Emacs中的两个文档,一个是待办事项列表和笔记本的组合,另一个则满是各种颜色的代码。Sanjay的笔记本就放在电脑旁。

“好了,我们要做什么?”Sanjay问道。

“我想我们正要看TensorFlow Lite的代码大小,”Jeff说。

这是一个机器学习的新软件项目,Jeff和Sanjay担心它过于臃肿;像图书编辑一样,他们想要削减代码量。为此,他们构建了一个需要优化的新工具。

“我得看看它有多慢,”Sanjay说。

“超级慢,”Jeff说。他身体前倾,仍然很放松。

“120千字节,大概是8秒。”Sanjay说。

“12万个堆栈调用,”Jeff说,“不是千字节。”

“额, 千字节的文本,应该是。”Sanjay说。

“好吧,我的错。”Jeff说。

“我不太清楚应该为一个单元的大小选择什么门槛。”Sanjay说,“0.5兆字节?”

“看起来不错,”Jeff说。Sanjay开始敲代码,Jeff的目光放在了屏幕上。“所以你的意思是,如果它比那个大,我们就取样……”他没有说完;Sanjay用代码回答了他。

Sanjay开车时,他会把双手放在10点和2点的位置,专注地盯着前方。他在键盘前也是这样的。他的双脚与肩同宽,似乎这就是他工作的姿势。他细长的手指在键盘上轻快地移动。

很快他们到达了一个小小的里程碑,Sanjay输入一个命令来测试进展。他看起来疲惫不堪,在程序运行时他check了一下邮件。测试结束了,他也没有注意到。

“嘿,”Jeff说。他打了个响指,然后指向屏幕。虽然平常谈话时他经常讲笑话和双关语,但在电脑前,他就变得固执、粗鲁,意见也经常合不来。Sanjay对此泰然处之。当他觉得Jeff动作太快时,他会把双手从键盘上抬起来,摊开手,好像在说:“停一下。”(如果打个比方,Jeff是油门,Sanjay就是刹车。)这是他们最接近争论的时候:在一起20年了,他们都没有互相提高过嗓门。

接近午餐时间。他们一起工作了两个小时,中间休息了十分钟,大部分时间都在交谈。(普通程序员看到他们可能会印象深刻,因为他们从未被卡住或陷入困境。)让另一位程序员检查代码,已经成为标准的工程实践,但是Jeff和Sanjay跳过了这一步,在他们的日志中输入“lgtm”(looks good to me),即“在我看来很好”。

表面上看,他们的工作都是细枝末节。然而,他们的代码在整个谷歌公司范围运行。他们所担心的千字节或是微秒的问题会在世界各地的数据中心被放大无数倍。有时,Jeff回到家会告诉他的女儿们,“Sanjay和我今天把谷歌搜索速度提高了10%。”

拯救谷歌的MapReduce

2003年,Jeff和Sanjay对Google进行了可以说是4个月来最大的一次升级。他们用一个叫做MapReduce的软件完成了这项工作。这个想法是他们第三次重写谷歌的爬虫和索引器时产生的。他们意识到,每次他们都解决了一个重要问题:在地理上广泛分布、个别不可靠的计算机中协调工作。将他们的解决方案普及化(generalize),就可以避免一遍又一遍地重复遇到这个问题。但这需要创造一种工具,让任何谷歌的程序员都可以用它来操纵数据中心的机器。

MapReduce是Jeff和Sanjay在一间可以俯瞰鸭塘的角落办公室里写的,程序对可能极其复杂的过程强加了顺序。在MapReduce之前,每位程序员都必须自己解决如何划分和分发数据、分配工作和解释硬件故障的问题。MapReduce为程序员提供了一种结构化的方式来思考这些问题。

MapReduce要求程序员将他们的任务分为两个阶段。首先,编码器告诉每台机器如何完成任务的“映射”阶段(例如,计算单词在Web页面上出现的次数);接下来,编写指令来“减少”所有机器的结果(例如,将它们加起来)。MapReduce处理分布的细节,并且通过这样做,可以隐藏细节。

第二年,Jeff和Sanjay根据MapReduce任务重写了谷歌的爬虫和索引系统。很快,其他工程师意识到它有多么强大,他们开始使用MapReduce处理视频并在谷歌地图上渲染图块。MapReduce是如此简单,甚至新任务一直是自我提示的。谷歌有所谓的“日使用曲线”——白天的流量大于晚上的流量——MapReduce任务开始吸收空闲容量。

很早就有迹象显示,谷歌是一家伪装成搜索公司的人工智能公司。2001年,曾与Jeff和Sanjay共用一间办公室的Noam Shazeer,对谷歌从另一家公司获得授权的拼写检查程序感到沮丧:它不断地犯令人尴尬的错误,比如告诉输入“TurboTax”的用户,他们可能是在说“turbot ax”。拼写检查器的好坏取决于它的字典,而Shazeer意识到,在Web上,谷歌可以访问有史以来最大的字典。他编写了一个程序,利用Web上文本的统计特性来确定哪些单词可能拼写错误。软件会知道“pritany spears”和“brinsley spears”都是指“Britney Spears”。当Shazeer在谷歌的每周T.G.I.F.聚会上演示这个程序时,员工们试图愚弄它,但大多数都失败了。

在Jeff和一位名叫Georges Harik的工程师的合作下,Shazeer应用了类似的技术将广告与网页关联起来。广告定位成为了该公司的一笔收入,谷歌将这笔收入重新投入到计算基础设施中。这是一个反馈循环的开始,更大的反馈循环将成为谷歌智能的源泉;智慧是财富的源泉;财富是公司增长的源泉;这将使公司异常令人不安地占据主导地位。

随着更多的程序员使用MapReduce从谷歌的数据中获得见解,转录一百多种语言的用户语音邮件、回答他们的问题、自动完成他们的查询和翻译成为可能。这些系统是使用相对简单的机器学习算法开发的。

“非常简单的技术,当你拥有大量数据时,就能工作得非常好,”Jeff说。“数据、数据、数据”——用BigTable、MapReduce等来存储和处理,成为公司的首要指令,谷歌的全球基础设施变得更加无缝和灵活。分布式计算是一个古老的概念;“云计算”和“大数据”等概念出现在谷歌崛起之前。但是,通过让普通程序员能够方便地编写分布式程序,Jeff和Sanjay使谷歌对这类技术有了新的掌握。用户可能已经意识到有些事情正在改变:谷歌的云变得越来越聪明了。

2004年,因为Jeff和Sanjay认为MapReduce将对天文学家、遗传学家和其他需要处理大量数据的科学家有用,他们写了一篇论文《MapReduce:简化大型集群上的数据处理》,并公开发表。

MapReduce的论文就像一种扭转乾坤之力量。廉价的硬件、Web服务和连接设备的增长带来了海量数据,但很少有公司拥有处理这些信息的软件。

两位工程师,Mike Cafarella和Doug Cutting,他们一直在努力扩大一个叫做Nutch的小型搜索引擎,他们非常确信MapReduce的重要性,所以他们决定从头开始构建一个免费的系统克隆。他们最终将这个项目命名为Hadoop,名字来源于Cutting的儿子喜爱一个大象玩具。

如今Hadoop已经被财富50强中一半的企业采用。它成了“大数据”的同义词。Facebook使用Hadoop MapReduce来存储和处理用户元数据——包括用户点击了什么、喜欢了什么以及查看了哪些广告的信息。Facebook一度拥有世界上最大的Hadoop集群。Hadoop MapReduce也为LinkedIn和Netflix提供支持。Hadoop执行分析任务的速度比之前的系统快1.8万倍。它成为了情报收集新方法的基础。

拥抱人工智能

Jeff有一种不安定的天性:一旦他看到问题的解决方案,他就会对这个问题失去兴趣。2011年,当全世界都在拥抱云计算的时候,他开始与吴恩达(Andrew Ng)合作。

吴恩达是斯坦福大学的计算机科学教授,曾在谷歌领导一个秘密项目,研究由虚拟“神经元”组成的神经网络软件程序。Jeff在大学期间认识了神经网络;当时,神经网络还不能解决现实世界中的问题。吴恩达告诉Jeff,这种情况正在改变。在斯坦福大学,当网络获得了大量的数据时,研究人员已经取得了一些令人兴奋的结果。吴恩达认为,有了谷歌这样大规模的数据,神经网络不仅可以变得有用,而且可以变得非常强大。

神经网络与传统的计算机程序有很大的不同。它们的行为不是由程序员用通常的方式指定的;相反,它是通过输入和反馈“学习”的。Jeff的神经网络知识从他大学毕业后就没怎么进步,他在浴室里堆满了课本。

Jeff开始每周花一天的时间在这个叫做“Google Brain”的项目上。谷歌内部许多人对这项技术表示怀疑。“真是浪费人才,”他当时的经理Alan Eustace回忆说。Sanjay也无法理解Jeff的举动。“你从事基础设施建设的,”他想,“你在那边做什么呢?”

在接下来的7年里,谷歌大脑团队开发出了神经网络,在机器翻译、语音和图像识别方面超越了当前最先进的技术水平。最终,它们取代了谷歌最重要的搜索结果排名和定位广告算法,Google Brain成为公司发展最快的团队之一。

2001年开始加入谷歌的工程师Claire Cui说,Jeff Dean的参与标志着Google AI的一个转折点:“有人相信AI,也有人不相信,”Jeff证明了它是可行的。

AI很大程度上取决于规模。为此,Jeff Dean领导了一个名为TensorFlow的程序的开发——该程序试图创建一个类似于AI版的MapReduce程序,简化在大量计算机上分布神经网络的任务。2015年,TensorFlow终于发布,后来成为AI的通用框架。而近年,谷歌CEO Sundar Pichai已经公开宣称谷歌是“AI first”的公司,正是Pichai决定让Jeff Dean担任公司人工智能部门的负责人。

Jeff现在每周花四天时间在谷歌大脑工作。他带领着3000多名研究员。他经常去做演讲,每周开一次会,研究一种新型计算机芯片(专门为神经网络设计的张量处理单元TPU),并帮助开发AutoML,这是一个使用神经网络设计其他神经网络的系统。

他每周只有一天时间能和Sanjay一起编程。

角色不同,但从未走远

工程上的壮举往往会抹杀自己。我们会记得18世纪伟大的探险家詹姆斯·库克(James Cook)、乔治·温哥华(George Vancouver),但却不记得约翰·哈里森(John Harrison)了。哈里森是一名钟表匠,他花了几十年,发明了一种航海精密计时器,能够可靠地在海上定位经度。

最近,Jeff和Sanjay在他们经常光顾的一家墨西哥餐馆享用玛格丽塔和玉米馅饼时,Jeff拿出了手机。“Gmail是什么时候问世的?””他问道。“2004年4月1日,”手机回答道。Sanjay在社交场合很敏感,他似乎不喜欢用餐时被打扰,但Jeff很高兴。如今,谷歌可以说话、会倾听,也会回答问题了,这些功能通过一系列程序实现,这些程序无缝整合,基本上是看不见的,能将用户的手机连接到世界各地的数据中心。

今天,他们两人的角色已经截然不同。在谷歌,Sanjay被称为“个人贡献者”——他独自工作,不管理任何人。对此,他心存感激。“我不想要Jeff的工作,”他说。他目前正在开发一种软件,可以让工程师们更容易地组合和控制几十个程序——获取新闻、照片、价格——只要用户在Google的搜索框输入文本,这些程序就会开始运行。每周一次,他会见一群“区域技术领导”——谷歌的“工程绝地委员会”——他们做出的技术决定会影响整个公司。

如果将Google比喻成一座房子,那么Jeff是在建造房子的附加部分。Sanjay是在加固房子的结构,加固屋梁,拧紧螺栓。

与此同时,在周一的编程会议上,他们开始了一些新的工作。这是一个AI项目:Jeff说,这是一个尝试,训练一个“巨型的”机器学习模型来完成成千上万的不同任务。Jeff多年来一直在思考这个想法;最近,他认为这是可能的。他和Sanjay计划建立一个原型,让团队可以围绕这个原型开发。

“我想他们彼此思念,”Jeff的妻子Heidi说。他们在合作放缓时,会在每周五共进晚餐。

3月的一个周末,Jeff和Sanjay在库比蒂诺郊外徒步旅行。天气晴朗,阳光明媚。Jeff开着一辆蓝色的特斯拉跑车。Sanjay紧随其后,也是特斯拉,一辆红色Model S。Sanjay上午一直在看书。Jeff踢了场足球。(他小腿上的一个装置告诉他,他已经跑了7.1英里。)距离建立谷歌Index的那个三月已经过去20年了,Jeff就像一名退役的耐力运动员,皮肤被太阳晒坏了。而Sanjay看起来几乎没有变老。

这条路有六英里长,蜿蜒穿过茂密的森林。Jeff带路。在树林里,他们说起谷歌的成长速度有多快。 Sanjay 回忆说,在公司的第一次井喷式增长期间,一名水管工在男卫生间的一个隔间里安装了两个马桶。“我记得当时Jeff的评论,”他笑着说:“‘两个总比一个好!’”

他们从树林里出来,来到干燥、空旷的乡间。一只火鸡秃鹰从头顶飞过。

“这里的山比我想象的还要陡,”Jeff说。

“我记得有人说条路相当平坦,” Sanjay说。

“我想这就是那边没有自行车道的原因,”Jeff说。

他们开车回到树林。在一个急转弯中,Jeff向树林外瞥了一眼,他说:“我们在某些方面需要好好观察。”

小路一直通向山顶,又高又宽,没有树,全景尽收眼底。地平线上有一片薄雾。尽管如此,他们仍能看到南面的圣克鲁斯山脉和东面的米逊峰。

“Sanjay,那边是你的办公室!”Jeff说。他们站在一起,眺望着山谷的另一边。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分