2000年3月的一天,谷歌的六位较高级工程师聚在一间临时作战室。公司正处在前所未有的紧急状态。
去年10月,它的核心系统——通过爬梳网站建立索引——已经停止了工作。用户仍然能在google.com上输入查询信息,但得到的结果已经过期五个月了。风险远远超出了工程师的预计。
此时谷歌的联合创始人Larry Page和Sergey Brin正在洽谈强化雅虎搜索引擎的事宜,并承诺提供比自己现有大十倍的索引规模——这个体量可以媲美万维网,后者的规模在去年已翻了一番。
如果他们失败了,google.com将变成遗迹,和雅虎的生意很可能谈崩,公司将冒着烧光资金的风险,最后被人遗忘。
在这一间阶梯会议室里,工程师们给锯木架放上门板,然后装上电脑。Craig Silverstein靠墙坐得很远,他只有二十七岁,小身板,嗓子尖。Silverstein是Google的第一个员工:他刚加入公司的时候,还是在Brin的客厅办公,一个人重写了大部分代码。
这次他和罗马尼亚的系统工程师Bogdan Cocosel工作了四天四夜,毫无进展。“没有任何有意义的分析,” Silverstein回忆道,“一切都被破坏了,而我们一筹莫展。”
Silverstein几乎没觉察到,越过他的左肩,有一位三十三岁的Sanjay Ghemawat,浓眉黑发、两鬓稍灰,十分安静。他毕业于麻省理工。
Sanjay在几个月前加入了公司,那时是12月。他跟随了一位同事的脚步——三十一岁的Jeff Dean,他瘦瘦高高、精力充沛。他们都来自Digital Equipment Corporation,Jeff比Sanjay要早十个月离开。他们极其要好,而且喜欢一起写代码。
谷歌11级工程师:Sanjay Ghemawat
在作战室里,Jeff把椅子推到Sanjay的桌前,自己的桌子空着。Sanjay敲着键盘,Jeff就倚在一边,像个制作人对新来的主播那样唠唠叨叨。
Jeff和Sanjay开始研究熄火了的索引。他们发现有些词语不见了——他们搜索“邮箱”没得到任何结果——其它结果的顺序完全是乱的。这些天他们一直在寻找代码的漏洞,沉浸在编程逻辑里,上上下下都检查遍了。他们找不到错在哪里。
程序员有时会将软件想象成一种有层次的结构,从顶层的用户界面,下降到越来越基础的层次。冒险进入这种结构的底层,即软件与硬件的交汇之处,就背离了理想的代码秩序,而转向它所凭依的电与硅的元素世界。
在作战室的第五天,Jeff和Sanjay开始怀疑他们要找的问题不是出在逻辑上,而是在物质上。他们将混乱的索引文件转换为原初形式:二进制代码。他们想知道机器能观察出什么。
Sanjay的显示器上出现了一大串1和0的粗体,每行代表一个索引词。Sanjay发现:一个应该是0的数字是1。当Jeff和Sanjay将所有来源错误的词放到一起的时候,他们看出一个规律——每个词都有同样的问题。机器的内存芯片不知怎么被搞坏了。
Sanjay看着Jeff。谷歌在这几个月经历了越来越多的硬件故障。问题在于,随着谷歌的壮大,它的计算基础设施也在不断扩大。在你拥有足够的计算机硬件之前,它很少会出问题——但之后它会一直出问题。
谷歌11级工程师:Jeff Dean
电线磨损了,硬盘坏了,主板过热了。许多机器从未开始工作;有些会莫名奇妙地变慢。奇怪的环境因素也会产生影响。当超新星爆炸时,爆炸波会产生向各个方向散射的高能粒子;科学家认为,有一种微小的可能,让宇宙射线的一个出轨粒子能够击中地球上的计算机芯片,把一个0拨到1。
世界最强大的计算机系统,比如在NASA、金融公司,使用可以容忍单个字节变动的特殊硬件。但谷歌的运营像一家初创公司一样,买的是更便宜的缺少这项功能的电脑。公司已经到达了一个转折点。它的计算集群已经如此庞大,以至那些少见的硬件故障都会变得很普遍。
Jeff和Sanjay一起编写代码来给损坏的机器打补丁。 不久之后,新索引完成,作战室解散。Silverstein陷入了困境。他是一个很好的调试人员;找到漏洞的关键是追究事情的根源。Jeff和Sanjay在这方面走得更远。
在3月索引崩溃之前,谷歌的系统基于其创始人研究生时期在斯坦福写的代码。Page和Brin不是专业的软件工程师。他们是学术界进行搜索技术实验的人。
当他们的网络爬虫崩溃的时候,没有任何有内容的诊断信息——只是一句“Whoa, horsey!”老员工称之为BigFiles,这是Page和Brin编写的一个软件,就像BugFiles。 他们最重要的索引代码需要好几天才能完成,如果遇到问题就必须重新开始。按硅谷的说法,谷歌不可能“规模化”。
我们常说我们在“上网查询”,但我们真不是;我们的搜索引擎游览全部网页的索引——一张地图。 当谷歌在1996年仍被称作BackRub时,它的地图小得可以装在Page宿舍的电脑里。到了2000年3月,根本没有一台大得能够处理它超级计算机。
谷歌维持下去的方法就是购买客供服务器并将它们连接成一个机队。因为就算这些计算机的价格打对折,谷歌都觉得不值——软盘驱动器,金属机箱——公司就订购原厂的主板和硬盘然后将它们拼在一起。
谷歌把一千五百个这种设备堆叠成六英尺高的宝塔,放在加利福尼亚州Santa Clara市的一幢建筑物里。由于硬件故障,只有1200个能够工作。看起来随机发生的故障在不断地破坏系统。为了生存,谷歌必须将计算机联合成一个无懈可击、随机应变的整体。
Jeff和Sanjay并肩承担起这项任务。曾在Apple开发Macintosh前身的Wayne Rosing于2000年11月加入Google,负责管理百人工程团队。
他说,“他们才是领导者”。他们每周工作90个小时,编写的代码使单个硬盘驱动器出现故障也不会破坏整个系统。他们在爬梳的过程中添加了检查点,方便在中途重启。通过开发新的编码和压缩方案,他们使系统容量实际增加了一倍。他们是一往无前的优化者。
当汽车转弯时,外轮必须覆盖更多的地面;类似地,硬盘外缘比内缘旋转得更快。谷歌已经把要经常访问的数据移到外部,因此在读磁头下面,字节可以更快地流动,但内部的一半是空的;Jeff和Sanjay在这个空间里存储了常用搜索的预处理数据。
在2001年的四天时间里,他们证明了谷歌的索引可以使用快速随机存取存储器而不是相对较慢的硬盘存储;这一发现重振了公司经济。Page和Brin知道用户会涌向即时提供答案的服务。问题是速度需要计算能力,计算能力需要花钱。Jeff和Sanjay用软件解决了难题。
在2005年Rosing离开之后,Alan Eustace成为了工程团队的负责人。“看似矛盾的是,为了解决庞大的问题,你必须知道最小的细节,” Eustace说。Jeff和Sanjay对计算机的了解较精确到字节。
Jeff曾经传发过一份列表——“每个程序员都该知道的潜在数字”。说实话,它是一列几乎没有程序员知道的数字:L1的缓存引用一般需要0.5纳秒,或是从内存中依次读取1兆字节需要250微秒。
这些数字植入了Jeff和Sanjay的大脑。他们带头重写了几次谷歌的核心软件,让系统容量呈数量级增长。与此同时,谷歌庞大数据中心的技术人员们正走在崎岖的道路上,他们遵照软件生成的指令来更换硬盘驱动器、电源和记忆棒。即使有一部分磨损和失灵,系统仍可以向前运转。
如今,谷歌的工程师置身于一条伟大存在链当中:
始于1级,也就是底部的IT技术支持人员;
2级是大学应届生,3级通常拥有硕士学位,达到4级需要几年时间,或有博士学位,大多数晋升都停滞在第5级。
6级工程师——前10%——能力强到他们可以被归为项目成功的主因;7级是拥有相当成绩的6级。
8级的首席工程师与主要产品或一些基础设施相关联,9级杰出工程师令人景仰。
成为10级的谷歌院士就是赢得一种终身荣誉,谷歌院士通常是各自领域的世界领先专家。
Jeff和Sanjay是谷歌高级研究员——该公司有史以来也是的11级。
谷歌园区在距离Mountain View市中心几分钟的高速公路旁,那儿蹲踞着一群带有色窗户的乏味建筑。去年夏天的一个星期一,早上一起编程之后,Jeff和Sanjay到名为Big Table的园区自助餐厅吃午饭,该餐厅的名字源于2005年他们协助开发的一个系统,能够把无数计算机当作单个数据库来处理。
Sanjay又高又瘦,穿着旧栗色开襟短袖、灰色裤子,带金属框眼镜。他看了一眼外面的桌子,快步走过去,撑开伞,搬位子坐在阴处。他把另一张椅子搬到太阳下面给Jeff,一分钟后他到了,宽肩膀,穿着短袖衬衫和时髦的运动鞋。
像伴侣一样,Jeff和Sanjay你一言我一语地来讲完整个故事。他们开始回忆两人的早期项目。
“我们用手写下东西,”Sanjay说。他的眼镜在阳光下变暗了。“我们会重写它,有点像是 ‘哦,这看起来与我们上个月写的内容差不多。’”
“或者在我们的索引数据里有些微变动,”Jeff补充。
“要么略微不同,”Sanjay说。 “这就是我们弄清楚的方式——”
“这是本质,”Jeff说。
“——这是常见模式,”Sanjay说完了他们的想法。
Jeff咬了一口手中的披萨。他的指头跟水手一样,表皮粗糙、疙疙瘩瘩;相比之下,Sanjay看起来简直是精致。他思考着两人是怎样成为搭档的。 “我不太清楚我们如何决定会更好,”他说。
Jeff说:“我们就一直这样做了,早在谷歌之前。”
“但我不知道为什么我们决定在一台电脑而不是两台电脑前做它更好,”Sanjay说。
“我会从我离他两个路口远的D.E.C.研究室走到他的D.E.C.研究室,”Jeff说。“中间有一家冰淇淋店。”
“所以就是这家冰淇淋店!”Sanjay说,开心极了。
单身的Sanjay,和Jeff,还有Jeff的妻子Heidi以及他们的两个女儿一起度假。Jeff的女儿们叫他Sanjay叔叔,这五个人经常周五聚餐。Jeff的长女Victoria和Sanjay,已经开始学烘焙了。
“我看着他的女儿们长大的,”Sanjay自豪地说。在2004年谷歌首次公开募股之后,他们搬到相隔4英里的房子里。Sanjay住在Mountain View老市区的一间不起眼的三居室里;Jeff在Palo Alto市中心附近设计了自己的房子,还在地下室装了一个蹦床。
在家工作期间,他发现自己虽然喜欢空间设计,但他并没有耐心追求他所说的“Sanjay主义”的建筑:
房梁、螺栓和承重这些细节,让伟大的设计不被割裂。
“我不明白为什么大部分人不这么做,”Sanjay指的是与伙伴一起编程。
“你需要找到和你的思维方式兼容的人一起编程,你们两个人在一起将成为一股互补的力量。”Jeff说。
他们退出桌台,出来找些软冰淇淋吃,闲逛在Big Table和来来去去的谷歌员工之间。两人之中,Jeff更愿意阐释,逛的时候他分享了自己的“软服务”策略。
“我来挤压。我认为抬高的方法可以增加稳定性,” Sanjay开心而专注地将巧克力和香草的混合物旋进他的锥筒中。
社会学家Michael P. Farrell在2001年的《合作圈:友情驱动与创意工作》一书中,对亲密的创作伙伴——法国印象派,弗洛伊德及其同时代人——进行了研究。
“大多数能给全新视野打下基础的微弱洞见,不会诞生于整个团体在一起的时候,也不是人员单独工作的时候,而是当他们成对协作,互相沟通的时候。”他写道。
莫奈和雷诺阿在1869年夏天并肩工作,创造的风格成为了“印象派”;在生成立体主义的六年合作期间,毕加索和Georges Braque经常只在画布的背面签名,来混淆到底是他们之中的哪个人完成了这一幅画。
(“画布上是未完成的作品,除非我们都觉得作品完成了。”毕加索后来回忆道。)
在《两人之力:寻找创意伙伴的创新本质》中,作家Joshua Wolf Shenk引用了1971年的采访,其中约翰·列侬详细说到,他或者Paul McCartney会“写出点好东西,这方面很容易,就像‘我今天看过新闻了’或者任何东西。”
一个人会陷入僵局直到另一个人过来——然后,列侬说,“我会唱一半,他会受到启发,又写下一点,反之亦然。”每个人都容易陷入创意的坑里,但两人同时陷进去就很难。
在新科学或艺术的“理论建设”阶段,广泛探索而不陷入死胡同是非常重要的。François Jacob与Jacques Monod一起开创了基因调控研究。
他指出,到了二十世纪中叶,分子生物学有潜力的领域的大多数研究都是结对做出来的。 “在创想理论和构建模型方面,两个人比一个人更胜一筹。”
雅各布写道,“因为两人都在想同一个问题,想法就越来越多,越转越快。它们在两个伙伴之间弹来弹去。它们被嫁接在一起,就像树上的枝杈一样。
在这个过程中,幻想很快被扼杀在萌芽状态。“在过去的三十五年里,大约一半的诺贝尔生理学或医学奖都归于科学伙伴关系。
经过多年一起工作的时光,两人之间会生成一种私人语言,跟双胞胎一样。他们模仿彼此的衣着和习惯。幽默感从一个人传染到另一个人身上。分别计算两人的贡献程度简直不可能。 但这么紧密伙伴关系在软件开发中真是难得一见。
虽然开发人员有时谈论“结对编程” ——两个程序员共用一台计算机,一个“驾驶”而另一个“导航”——他们经常把伙伴关系当作一种浪费,就像两人是一架飞机上的合作驾驶员。
相比之下,Jeff和Sanjay有时像是一个大脑的两半。一些他们的著名论文有多达十几位的合著者。而且,他们的一位经理Bill Coughran回忆说:“他们两人特别多产,效率奇高,导致我们经常围着他们俩建立团队。”
1966年,系统开发公司的研究人员发现,较好的程序员的效率是最差的10倍以上。从那以后,所谓“10倍程序员”的说法一直争议不断。在软件项目通常是成规模和集体化的情况下,这个想法尊重了个体。
在编程中,很少有成就是孤立存在的。即便如此——也许有点讽刺的是——许多程序员将Jeff和Sanjay共同完成的工作看成是10倍程序员存在的证据。
Jeff于1968年7月出生在夏威夷。他的父亲Andy是一名热带病研究者。他的母亲Virginia Lee是一位医学人类学家,会说六种语言。出于好玩,父子俩给一个IMSAI 8080组装计算机编程,直接把升级程序焊接到机器上,从机械结构开始学习。
Jeff和他的父母经常搬家。十三岁时,他略过了八年级的最后三个月,到索马里西部的一个难民营帮助他们。接着,他在高中开始为流行病学家编写一个叫Epi Info的数据收集程序; 它成为了田野调查的标准工具,最终以十几种语言流传了数十万份的。(由疾病控制预防中心维护的一个网站,“Epi信息故事”,有一张Jeff在高中毕业典礼上的照片。)
Jeff在明尼苏达大学遇到Heidi,她仅仅在几年之后就了解到这个程序的重要性。
“他从不吹嘘任何这种事情,”她说。“你得把事情从他身上掏出来。”
他们第一次约会是在一场女子篮球比赛,Jeff穿着地鼠人偶服,做啦啦队。
Jeff博士期间专注于编译器,这种软件将人们编写的代码转换为适用于电脑的机器语言指令。
“就魅力而言,编译器无聊透顶,” Alan Eustace说。另一方面,他们让你“非常了解机器。”
描述Jeff的时候,Sanjay用食指揉着太阳穴。“当你在写代码的时候,他就会想出一个模型,”他说,“‘这段代码的性能如何?’他几乎可以半自动地考虑到所有的细支末节。”
Sanjay在去康奈尔大学之前根本没碰过电脑,那年他17岁。他于1966年出生于美国印第安纳州的West Lafayette,但是在Kota长大,一个印度北部的工业城市。他的父亲Mahipal是一名植物学教授;他的母亲Shanta照顾Sanjay和他的两个哥哥姐姐。
他们是个书香世家:他的叔叔Ashok Mehta记得他买了一本Frederick Forsyth写的《豺狼日》,装订磨损得很严重,他看着这家的孩子们一起读这本很旧的书,一页一页地彼此传看。Sanjay的兄弟Pankaj是哈佛商学院获得终身教职的最年轻的职工。(他现在是纽约大学Stern学院的教授。)
Pankaj和Sanjay上同一所学校,大家都知道他才华横溢。
“我有点活在我兄弟的阴影下,” Sanjay说。从成年人角度来说,他一贯谦逊。
2016年被美国艺术与科学学院聘用,他没跟父母说;邻居只好把这个消息告诉他父母。
在麻省理工的研究生院,Sanjay结识了一群亲密无间的朋友。而且,他从不约会,而到现在只是“非常非常少”。他说他并没有决定不成家——只是展现出来是这个样子。他的好友已经学会了不在这方面打扰他,他父母很早就接受了儿子会单身。
也许是因为他如此内向,在谷歌有关他的一切都充满了神秘色彩。他以安静而深刻著称——一个深思熟虑并异常犀利的人。
在他的桌子上,他保留了一堆Mead作文笔记本,最早的可以追溯到20年前,里面装满了工整的清单和图表。他用钢笔,写草书。他很少引用旧的笔记,但为了思考而写。在麻省理工,他的硕士导师是Barbara Liskov,一位权威的计算机专家,主要研究复杂代码库的管理。
在她看来,较好的代码就像是一篇好文章。它需要一个精心布局的结构;每个词都有意义。这种编程方式需要与读者共情。
它也意味着代码不是达到目的的手段,而它本身就是一件工艺品。
“我认为他最擅长的是设计系统,”Craig Silverstein说。 “如果你盯着Sanjay写的一份代码,它的美丽就像一尊比例匀称的雕塑那样无与伦比。”
在谷歌,Jeff更加出名。源自于Jeff Dean——模因,仿照Chuck Norris的那个。(“从Chuck Norris数到无限……然后再重复一遍”;“Jeff Dean的简历列出了他没有做过的事情——这样更短些。”)
但是,了解二者的人来说,Sanjay与他不分伯仲。“Jeff擅长提出大胆的新想法和一些雏形,”他们的老同事Wilson Hsieh说。
“Sanjay是能够让事情发展到最后的人。”在生活中,Jeff更外向,Sanjay更内敛。
在代码中,正好相反。Jeff的编程令人眼花缭乱——他可以迅速勾勒出令人吃惊的想法——但是,由于它是急就章,带着探索精神,它可能把受众抛诸脑后。反观Sanjay的代码非常“大众”。
“有些人,”Silverstein说,“他们的代码太松散了。一屏代码的信息非常少。你总是要来回滚动去搞清楚发生了什么。
“其他人写的代码太密集了:“你看着它,你觉得,‘呃,我不期待读这种东西。’Sanjay以某种方式侧身其中。你看看他的代码,你会说‘好吧,我可以弄明白’,而且,你仍然能在每页上学到很多。“Silverstein接着说,“每当我想为Sanjay的代码添加新功能时,好像挂钩已经在那了。我感觉像Salieri 。我能理解它的伟大。我不明白它怎么做到的。”
今年春天一个星期一的早晨,Jeff和Sanjay站在40号楼的小厨房里,那里是谷歌人工智能部门的所在地。在他们身后,白板上写满了矩阵代数; 一篇关于无人监督的对抗网络的论文摆在桌上。
Jeff,穿着褪色的T恤和牛仔裤,看起来像是个好点的海滩混混;Sanjay穿着毛衣和灰色裤子。明亮的窗户透出一片高大的松树和远处的田野。
无论Jeff在谷歌哪里工作,咖啡机都会跟在后头。在小厨房的柜台上,一个三英尺宽的La Marzocco嗡嗡响着。 “我们要迟了,” Sanjay在咖啡研磨机上说道。此时是8点32。
喝完卡布奇诺,他们走到他们的电脑前。Jeff从他自己的办公桌那推来一把椅子,那桌子一团乱,到了Sanjay这边,一尘不染。他把一只脚搁在文件柜上,仰躺着,Sanjay盯着他们眼前的屏幕。
一共打开了四个窗口:左侧是Web浏览器和终端,用于运行分析工具; 右边是文本编辑器Emacs中的两个文档,一个是组合待办事项列表和笔记本,另一个全是五颜六色的代码。Sanjay的一本作文笔记本放在电脑旁边。
“好了,我们要做什么?” Sanjay问道。
“我觉得我们正在了解TensorFlow Lite的代码大小,” Jeff说。
这是一个与机器学习相关的新软件的重要项目,Jeff和Sanjay担心它会冗赘;像图书编辑一样,他们力求精简。为此,他们构建了一个本身要被优化的新工具。
“所以我试图搞明白它有多慢,”Sanjay说。
“它很慢,”Jeff说。他向前倾,依旧很放松。
“所以那是120千字节,”Sanjay说,“大概,有,八秒钟。”
“12万个调用栈,”Jeff说,“不是千字节。”
“好吧,千字节的文档,嗯——大约是,”Sanjay说。
“哦,是,不好意思,”Jeff说。
“我不是很清楚我们该为单位大小选择怎样的阈值,”Sanjay说。 “半个兆?”
“还行吧,”Jeff说。Sanjay开始打字,Jeff被屏幕吸引了。 “所以你只是说,如果它比我们刚刚试过的大一些……“他没有把话说完; Sanjay用代码回答了他。
Sanjay开车的时候时,他把手放在十点钟和两点钟方向,专注地看向前方。他在键盘面前也是这样。他的双脚分开与肩同宽,他看起来好像一直在摆姿势。他修长的手指轻轻地穿过钥匙。一些年轻的程序员开始陆续到来。
不久,他们到达了一个小阶段,Sanjay键入了一个命令来测试他们的进展。他看起来很疲惫,在运行程序时检查了一下电子邮件。 测试结束了。他没注意到。
“嘿,”Jeff说。他打了个响指,指着屏幕。虽然在谈话中他特别喜欢讲过时的冷笑话和双关语,但和Sanjay一起坐在电脑前面,他会变得固执、坦率而且充满异见。Sanjay能从容应对。
当他认为Jeff动作太快的时候,他会把手从键盘上抬起来并伸开手指,好像在说,“停。”(通常,Jeff是油门,Sanjay是刹车。)
这几乎接近于他们开始争论:在一起的二十年间,他们不记得自己高声说过话。
Sanjay滚着椅子过来,把新模块的代码放入视图中。 “就像,这些东西都可以变成一种模式,是吗?”Jeff说。
“唔,”Sanjay同意了。
Jeff扳了下指关节。 “似乎可行。我们应该这样做吗?“
Sanjay很谨慎。“不,我—— ”
“所以我们会忽略一个问题?”Jeff不服气地说。
“不,我的意思是,我们只是试着对正在发生的事情类型所了解。 所以我们可以做些记录,对吧?“
“好啊,”Jeff愉快地说,他的心情转眼就变了。他们一起口述了笔记。
接近午餐了,他们已经工作两小时,中间休息了十分钟,大部分时间都在说话。(小程序员看他们工作肯定会大为惊叹,不为别的,就为他们从没停下或者卡住的事实。)
标准的工程操作是让你的代码由另一个程序员审查,但Jeff和Sanjay跳过这步,进入一个马马虎虎的“lgtm”阶段,写在日志中,意思是 “我觉得还不错。”(look good to me)
从某种意义上说,他们做的都是细枝末节。但他们的代码是在谷歌的规模上执行的。他们担心的千比特和微秒数在世界各地的数据中心中成倍增加,达到十亿倍。在又吵又热、仓库大小的建筑物中,一架架不停运转的处理器要用一桶桶水来冷却。
这段时间,Jeff因此出名——他回到家跟女儿们说,“Sanjay和我今天加快了谷歌搜索的百分之十。”
在2003年的四个月里,Jeff和Sanjay给谷歌带来了可以说是它较大的单一升级。他们用了一个叫做MapReduce的软件。
这个想法是他们第三次重写谷歌的抓取工具和索引器时蹦出来的。他们突然想到,每次他们都会解决一个重要问题:如何在不同地点分布的,单个不可靠的计算机上协调工作 。
泛化他们的解决方案意味着他们可以避免一次又一次地重审这个问题。而且这也会创建一个工具,让谷歌的任何程序员都可以使用它来运行数据中心的机器,就好像它们是一台孤立的、行星大小的计算机一样。
Jeff和Sanjay在一间可以俯瞰池塘鸭子的角落办公室里写下了MapReduce,对一种令人费解的过程进行了梳理。在MapReduce之前,每个程序员都必须清楚如何分离和分配数据,分配工作,以及独自搞定硬件故障。
MapReduce为程序员提供了一种思考这些问题的模式。就像一位厨师保留了食材准备环节——在搭配之前先准备——MapReduce要求程序员将他们的任务分成两个阶段。首先,一个程序员命令每台机器如何完成一项任务的“概览图”阶段(比如,计算一个单词出现在网页上的次数);
接下来,她编写了“减少”所有机器结果的指令(例如,通过计算他们的总和)。MapReduce处理分配的细节——通过这样做来隐藏它们。
第二年,Jeff和Sanjay在MapReduce任务方面重写了谷歌的抓取和索引系统。
不久,当其他工程师意识到它有多强大时,他们开始用MapReduce处理视频并在谷歌地图上渲染马赛克般的图像。
MapReduce简单到新任务可以一直自我导向,自我改进 。谷歌拥有知名的“昼夜使用曲线” ——白天的流量比夜间更多——而且MapReduce任务能够吸收闲置容量。一个做梦的大脑处理它白天的体验。现在谷歌处理了它的数据。
早年,有蛛丝马迹显露出谷歌是冒充搜索公司的人工智能公司。
2001年,Noam Shazeer,一位与Jeff和Sanjay共享办公室的人,对谷歌从另一家公司获批的拼写检查技术感到沮丧:它不断犯下令人尴尬的错误,例如告诉那些输入“TurboTax”的用户他们可能想找“大菱鲆斧头”(turbot ax)。(大菱鲆是一种生活在北大西洋的比目鱼。)
拼写检查软件最多只能跟它的字典一样好,Shazeer意识到,在网络上,谷歌触及到了前所未有的海量字典。他编写了一个程序,该程序使用网络上文本的统计属性来确定哪些单词可能是拼写错误。
这个软件学习到“pritany spears”和“brinsley spears”都意味着“Britney Spears”(小甜甜布兰妮)。当Shazeer在谷歌周刊T.G.I.F上演示该程序,员工们试着愚弄它,几乎都失败了。
他与Jeff和工程师Georges Harik合作,采用类似技术将广告与网页相关联。广告定位带来的资金源又汩汩流入公司的计算基础架构。这是良性循环的开始——海量将成为谷歌智能的源泉;智能是其财富的来源;而财富是其增长的源泉——这将使公司拥有不同寻常的、甚至令人不安的主导地位。
由于一些上进的程序员使用MapReduce从谷歌的数据中获取洞见,它可以听写用户的语音邮件,回答他们的问题,自动完成查询,以及翻译一百种以上的语言。
这种系统是使用相对简单的机器学习算法开发的。不过,“非常简单的技术,当你拥有大量数据时,工作出乎意料的精彩。”Jeff说。随着“数据,数据,数据”——用BigTable,MapReduce及其后续产品进行存储和处理之后——成为公司的主要指令,谷歌的全球基础架构变得更加无缝和灵活。
分布式计算的想法很古老;像“云计算”和“大数据”这样的概念早于谷歌的崛起。但是,通过让普通程序员能够智能地管理分布式程序,Jeff和Sanjay已经让谷歌对这些技术的掌握程度上升到一个新的水平。用户可能已经感觉到某些事情发生了变化:谷歌的云变得越来越聪明了。
2004年,因为Jeff和Sanjay认为这些对天文学家,遗传学家和其他需要处理大量数据的科学家有用,他们写了一篇论文“MapReduce:大型集群的简化数据处理”,把它公之于众。
MapReduce论文扭转了整个局面。廉价的硬件以及网络服务和连接设备的增长产生了大量数据,但很少有公司拥有处理信息的软件。
两名工程师Mike Cafarella和Doug Cutting一直在努力扩展一个名为Nutch的小型搜索引擎,他们确信MapReduce至关重要,于是决定从零开始构建一个免费的克隆系统。他们最终称把他们的项目叫做Hadoop,源于Cutting儿子钟爱的一头玩具大象。
随着Hadoop的成熟,它被财富50强中的一半公司采纳。它成为了“大数据”的代名词。Facebook使用“Hadoop MapReduce”,众所周知地,用于存储和处理用户元数据——点击的内容,给什么点赞,以及看了哪些广告之类的信息。
它一度拥有世界上较大的Hadoop集群。Hadoop MapReduce帮助推动了LinkedIn和Netflix的发展。国家安全局前技术总监Randy Garrett记得他向该机构的主管Keith Alexander将军展示这项技术。 Hadoop执行的分析任务比以前的系统快了一万八千倍。它是一种新的情报收集方法的基础,一些观察家称为“来者不拒”。
Jeff有种不安分的本质:一旦能看到解决方案的雏形,问题就变得不那么有趣了。
2011年,当世界拥抱了云计算,他开始与斯坦福大学的计算机科学教授Andrew Ng合作,在谷歌领导一个秘密项目,研究神经网络——由虚拟“神经元”组成的软件程序。在他的大学期间接触过神经网络;那个时候,它还无法解决现实世界的问题。
Ng告诉Jeff,这种情况正在改变。在斯坦福大学,当网络获得大量数据时,研究人员取得了一些令人兴奋的结果。Ng认为,依赖谷歌的规模,神经网络可能不仅有用而且功能强大。
神经网络与传统的计算机程序截然不同。程序员不用通常的方式指定他们的行为; 相反,它使用输入和反馈来“学习”。
自从大学毕业以来,Jeff对神经网络的了解并没有太多进展,Heidi看着他们的卫生间摆满了教科书。Jeff开始每周花一天的时间参与这个被称为“谷歌大脑”(Google Brain)的项目。
谷歌许多人对这项技术表示怀疑。“多浪费人才啊,”他当时的经理Alan Eustace回忆道。Sanjay无法理解Jeff的举动。 “你做的是基础设施的工作,”他想。 “那边你能干什么?”
在接下来的七年中,谷歌大脑团队开发了神经网络,在机器翻译,语音和图像识别方面打败了较先进的技术。最终,他们取代了俗歌最重要的搜索结果和定位广告的排名算法,谷歌大脑成为该公司发展最快的团队之一。
2001年创立的工程师Claire Cui表示,Jeff的参与标志着人工智能的转折点。在谷歌:“有人相信它,有些人不相信它。Jeff证明它能行。”
人工智能已经被证明依赖于规模,这是系统工程师Jeff的成果。作为努力的一环,他领导了一个名为TensorFlow的程序开发——尝试创建人工智能的MapReduce。
TensorFlow简化了在一组计算机上分配神经网络的任务,将它们变成一个大脑。2015年,当TensorFlow向公众发布时,它成为人工智能的通用语言。
最近,谷歌的CEO Sundar Pichai宣布它为“第一家人工智能”公司并让Jeff成为其人工智能首创部(A.I. initiatives)的负责人。
Jeff现在每周花四天时间运营谷歌大脑。他指导着三千人的工作。 他前去会谈,召开周会,研究新的计算机芯片(Tensor Processing Unit,专为神经网络设计),并帮助开发AutoML,这是一个使用神经网络设计其他神经网络的系统。他与Sanjay一起编程的时间只剩每周一次。
工程成就往往会抹杀自身。我们记得十八世纪伟大的探险家——James Cook, George Vancouver——但不是John Harrison,他是约克郡的木匠,经过几十年的努力让他的时钟足以计算出海上的经度。
最近, Jeff和Sanjay正在Palo Alto Sol(他们经常光顾的墨西哥餐厅)享用玛格丽塔和辣酱玉米馅饼。当Jeff拿出手机问,“Gmail什么时候问世?”手机回答,“2004年4月1日。”
对社交场合比较敏感的Sanjay似乎不喜欢在餐桌上分心,但Jeff洋洋自得。通过一系列程序,谷歌可以交谈、倾听和回答问题,这些程序完全整合并且大部分不可见,从他的手机延伸到世界各地的数据中心。
今天,他们的角色发生了转变。在谷歌,Sanjay作为“个人贡献者”而知名——一个独自工作并且不管理任何人的程序员。他因此感激不尽。
“我不想要Jeff的工作,”他说。
他目前正致力于开发软件,使工程师能够更轻松地组合和控制数十个程序——用于获取新闻,照片,价格——在谷歌的搜索框内,用户一输入文本就可以开始运行。
他每周要会见一次 “区域技术主管”小组——谷歌的工程绝地委员会——做出影响整个公司的技术决策。如果谷歌是一栋房子,Jeff是在建另外的屋子。而Sanjay正在支持架构,加固横梁,拧紧螺栓。
与此同时,在他们的周一编程会议上,两人做出了新尝试。这是一个人工智能项目:Jeff说,尝试培养一种“巨型”机器学习模型来完成数千或数百万种不同的任务。Jeff多年来一直在思考这个想法; 最近,他认为这是可能的。他和Sanjay计划建立初步模型能让一个团队围绕它发展。在软件领域,领先的较佳方式是使用代码。
“我觉得他们想念对方了,”Jeff的妻子海蒂说。这时候他们的合作渐渐放缓,两人每周五开始聚餐。
三月的一个星期天,Jeff和Sanjay约在Cupertino(苹果位于旧金山的总公司)门口去远足。天朗气清,但太阳下有点热。
Jeff开着保险杠上贴有2016年Bernie贴纸的蓝色特斯拉跑车,来到小道上。紧随其后的Sanjay有他自己的特斯拉,一个红色的Model S。Sanjay早上读了书。Jeff踢了足球。(与他的小腿相连的装置告诉他,他跑了7.1英里。)
从那年3月建立索引开始,时隔20年,Jeff就像一个退役的耐力运动员,他的皮肤被太阳晒老了。Sanjay似乎很难显老。
这是一条穿过茂密森林的6英里长的环路。Jeff一路领先。在树林里,他们回忆起谷歌的成长速度。Sanjay回忆说,在公司第一次爆发性增长的时候,一名水管工在男厕所的一个位子上装了两个厕具。 “我记得Jeff的评论,”他说。 “‘两个人比一个好!’”他笑道。
他们从树林里开下来,进入干燥、裸露的乡村。一只土耳其秃鹫飞过头顶。
“这坡比我想的要陡,”Jeff说。
“我记得有人说这里这里远足算平缓的,”Sanjay说。
“我想这就是那边没有自行车道的原因,”Jeff说。
他们爬坡回了树林里。迂回曲折之间,Jeff瞥见了树林外的风景。 “我们在某些方面会有很好的远见,”他说。
小径通向山顶,高而宽,树木渐少,能够俯瞰全景。地平线上笼着一片阴霾。然而,他们仍可以远眺南面的圣克鲁斯山脉和东面的使命峰。
“Sanjay,那是你的办公室!”Jeff说。他们站在一起,望着山谷。
声明:本文版权归原作者所有,文章收集于网络,为传播信息而发,如有侵权,请联系小编及时处理,谢谢!
文章来源:译指禅
《OpenCV计算机视觉产品实战》本课程关注怎样运用OpenCV编写程序,解决实际项目问题,课程注重运用而非理论,因此即使你不具备基础知识,但是在一步一步的讲解中,按图索骥,也能够快速入门,并且建立起知识框架;对于具备一定基础的开发者来说,学习本门课程能够加速对图像处理程序的理解,并且逐渐积累起自己的开发框架。点击下方二维码报名课程