【CSDN编者按】迄今为止,Google帝国已创立二十载。在这背后,离不开一众“开国元勋”的丰功伟绩,譬如声名远扬的MapReduce、TensorFlow、乃至于Hadoop——这些都和 Jeff Dean、Sanjay Ghemawat两个人有着千丝万缕的联系。 作为最早的一批程序员,Jeff Dean和Sanjay Ghemawat这对曾在同一台计算机上 编程的好兄弟,不仅是Google唯二登上11级的工程师,还极大地改变了Google和互联网的发展方向。“相比之下,Jeff和Sanjay就好像一个大脑的左脑和右脑。”正是如此完美契合的两个人,才书写了一段载入史册的伟大友情。
2000年3月,陷入僵局的Google索引
2000年3月的一天,Google最优秀的六位工程师齐聚在一个临时的作战室,该公司正处于前所未有的紧急状态。
10月份,公司的核心系统(负责爬取Web构建“索引”的系统)停止了工作。虽然用户仍然可以在google.com上输入查询,但他们只能拿到5个月前的搜索结果——其中的利害关系比工程师们想象的更严重。
Google的联合创始人拉里佩奇和谢尔盖布林正在与雅虎就搜索引擎进行谈判,而且他俩承诺可以提供十倍大小的索引。他们现有的索引就能够紧跟互联网的发展,而且在过去的一年中该索引的规模翻了一番。如果他们失败,那么google.com将仍然是一个时间胶囊,与雅虎的交易会化为泡影,而公司也将面临所有的努力都灰飞湮灭的危机。
工程师们在一段楼梯旁的会议室里支起了几个锯木架,然后把门板搭在上面当电脑桌在上面办公。27岁的Craig Silverstein坐在远处的墙边,他身材矮小,声音很高,他是Google的第一位员工:当Google的办公室还在布林的客厅时,他就加入了公司,并重写了大部分的代码。虽然他与一位名叫Bogdan Cocosel的罗马尼亚系统工程师奋战了四天四夜,但是毫无头绪。Silverstein回忆说,“我们所做的分析没有任何意义。一切都不正常,但我们不知道为什么。”
Silverstein没有注意到他左手边有一位安静的麻省理工毕业的高材生Sanjay Ghemawat,33岁,长着浓密的眉毛和黑色的头发,两鬓略显灰色。Sanjay在几个月前(具体说是12月)刚刚加入公司,他与另一位同事31岁的Jeff Dean是从Digital Equipment Corporation跳槽过来的。Jeff 是一个身材苗条精力充沛的人,在他跳槽十个月后,Sanjay也离开了那家公司。他们俩人关系非常亲密,而且他俩喜欢一起写代码。
在作战室的时候,Jeff搬着椅子去找Sanjay,Sanjay敲键盘的时候,Jeff就趴在他身边,就好像制作人在新闻主播耳边一边指导工作一边甜言蜜语。
Jeff和Sanjay开始研究陷入僵局的索引。他们发现有些词汇不见了,他们搜索“邮箱”却没有返回任何结果,而且其他词汇也不按顺序显示。几天以来,他们全身心地投入到代码逻辑中,一直在寻找代码中的问题。一段又一段的代码,慢慢筛查,但是他们始终找不到这个bug。
程序员经常会将他们的软件从概念上分成层次结构,从顶层的用户界面,逐步到越来越基础的层面。这个结构的最底层是软硬件交汇的地方,探寻这里就要抛弃柏拉图式的代码秩序,转而面向最基础的电子和芯片的世界。
在作战室奋战的第5天,Jeff和Sanjay开始怀疑他们所寻找的问题不在逻辑层面,而在物理层面。他们将混乱的索引文件转换成最底层的形式:二进制。他们想看看机器究竟看到了什么。
Sanjay的监视器上显示出了一大堆1和0,每行代表一个被索引的关键字。Sanjay发现,某个本该是0的数字现在却是1。当Jeff和Sanjay将所有出错的单词都放在一起后,他们发现了一种模式——每个单词都有相同的问题。不知怎地他们机器的内存芯片已遭到了破坏。
Sanjay看着Jeff。几个月以来,Google出现的硬件故障越来越多。问题在于,随着Google的发展,其计算机基础设施也在不断膨胀。计算机硬件很少出现问题,但是一旦你拥有足够多的计算机,那么就总会出问题:电线磨损、硬盘损坏、主板过热。许多机器从一开始就有问题,有些计算机则会逐渐变得缓慢,奇怪的环境因素开始发挥作用。当超新星爆炸时,爆炸波会产生向各个方向散射的高能粒子;科学家认为,这个世界上存在一种被称为宇宙射线的不定粒子可以击中地球上的计算机芯片,将其上的0改写成1。世界上最强大的计算机系统可能在美国宇航局、金融公司、以及其他使用了特殊硬件的公司,他们可以容忍单比特错误。但是当时Google的运营尚属创业公司,他们购买的都是没有这种功能的廉价计算机。而当时的Google正面临着一个转折点,它的计算集群如此之大,似乎硬件故障再所难免。
于是,Jeff和Sanjay一起编写了代码来弥补机器上的问题。
不久之后,新的索引完成了,临时作战室也解散了。Silverstein显得有点不知所措:他才是最优秀的调试人员,找到bug的关键是找到问题的根源。但是Jeff和Sanjay调查得更为深入。
唯二登上 Google 11 级工程师的 Jeff 和 Sanjay
在3月份索引崩溃之前,Google系统的核心代码都是其创始人在斯坦福大学读研究生时期写的。佩奇和布林不是专业的软件工程师,他们只是在进行学术上的搜索技术实验。当他们的网络爬虫崩溃时,没有提供任何有用的诊断消息,只有一些“啊哦!”之类的感叹。
早期的员工将“BigFiles”(佩奇和布林编写的一个软件)称为“BugFiles”(Bug文件)。他们最重要的索引代码需要花费数天才能运行完成,如果遇到问题则必须从头开始重新启动。
按照硅谷的说法,Google不具备“可扩展性”。
我们所谓的“搜索网络”,实际上没有搜索真正的网络;我们的搜索引擎只是遍历了一个Web的索引,或者说一张地图。
1996年,当Google还叫BackRub时,它的地图非常小,佩奇宿舍的电脑就足够了。2000年3月的时候,该映射大到没有任何超级计算机能够单独处理。Google唯一的解决办法就是购买多台面向消费者的计算机,然后将它们连接成一个机组。由于Google认为这些计算机中一半的成本是垃圾(软盘驱动器,金属机箱),所以他们订购了多个主板和硬盘,然后将它们拼凑在一起。当时在加利福尼亚州圣克拉拉市的一幢建筑物中,Google的1500多台这样的设备堆叠成了一座座6英尺(1.8米)高的小塔;由于硬件故障,只有1200台工作。看似很少发生的硬件故障却在不断破坏他们的系统,为了生存,Google不得不将它的计算机联合起来,组成一个无缝且有弹性的整体。
Jeff和Sanjay共同负责了这项工作。
曾在苹果就职的麦金塔电脑的先驱Wayne Rosing于2000年11月加入Google,并负责管理百人的工程团队。他说,“他们无需领导。”他们每周工作90个小时,写了几周的代码实现了某个硬盘驱动器的问题不会波及整个系统。他们在爬行过程中添加了检查点,确保可以在中途重新启动。通过开发新的编码和压缩方案,他们有效地将系统的容量增加了一倍。他们坚持不懈地优化。当汽车转弯时,外侧的轮子经过的地面更多;同样,硬盘在旋转的时候外边缘的转速比内边缘高。Google将最常用的数据都移动到了外侧,因此读取针头下面的比特可以更快地流动,而保持内侧有一半为空;Jeff和Sanjay利用这些空间存储常用搜索查询的预处理数据。在2001年的4天时间里,他们证明了Google的索引存取可以存储在内存中,而无需存储在相对较慢的硬盘中;这一发现彻底改变了公司的经济状况。佩奇和布林明白用户对能够立即提供答案的服务趋之若鹜。关键在于,速度需要计算能力,计算能力需要花钱——而Jeff和Sanjay却利用软件攻克了这一难题。
2001年,在Rosing离开之后,Alan Eustace出任了工程团队的负责人。他说,“颇为自相矛盾的是,为了解决大规模的问题,你必须了解最小的细节。”Jeff和Sanjay可以从比特单位了解计算机。Jeff曾经给大家看过一些“每个 程序员 都应该知道的延迟数字”。然而事实上,几乎没人知道那个列表上的数字:一级缓存引用通常需要半纳秒;从内存中顺序读取一兆字节需要251微秒。这些数字已经深入了Jeff和Sanjay的大脑。在他们几次带头重写了Google的核心软件后,该系统的能力得到了数量级的提升。与此同时,在该公司庞大的数据中心,技术人员需要千辛万苦地找到相应的设备,并根据软件生成的指令更换硬盘驱动器、电源和内存条。即使零件出现磨损或损坏,系统也不会受到影响。
现如今,Google的工程师需要从一级开始慢慢攀爬职业等级。最底层是IT技术支持人员;2级是大学毕业生;3级通常拥有硕士学位;拥有博士学位或经过几年的努力以后他们能够到达4级;而大多数都会停留在5级。只有10%的人拥有能力登上6级工程师,他们都是对项目成功做出了丰功伟绩的人。拥有很多业绩的6级工程师可以荣升到7级。8级的首席工程师一般都会负责主要产品或基础设施。位居9级的人都是受人尊敬的杰出工程师。登上10级,荣获“Google院士”的称号,这份荣誉会让你骄傲一生。 Google院士通常是各自领域的世界领先专家,Jeff和Sanjay是“Google高级院士”——该公司第一个也是唯一两个登上11级的工程师。
Google最顶级的两位程序员 Jeff Dean(左)和Sanjay Ghemawat(右)
“为什么不结对编程呢?”
Google园区位于高速公路旁,距离山景城市中心只有几分钟车程,那是一群带有色窗户其貌不扬的矮建筑。
去年夏天的一个周一,Jeff和Sanjay写了一早上代码后,来到一家名为Big Table的园区餐厅吃午餐,该餐厅以2005年他们参与开发的系统命名,该系统可以将无数计算机当成一个数据库处理。Sanjay又高又瘦,穿着古老的栗色亨利汗衫,灰色裤子,戴着小框眼镜。 他看到了外面的一张桌子,然后轻快地走了过去,撑开一把伞,在阴凉处坐了下来。他把另一张椅子搬到了太阳下面留给了Jeff,不一会儿Jeff过来了,穿着宽肩短袖衬衫,时髦的运动鞋。
他俩就像情侣一样,你一言我一语讲起了故事,一起回忆着早期的项目。
“当时我们手工写代码,“Sanjay说,他的眼镜在阳光下变暗了。”我们重写了那些代码,写完之后发现,哎,这好像是我们上个月刚写的。” “或许我们的索引数据略有不同,”Jeff补充道。 “或许略有不同,”Sanjay说,“所以我们才发现——。” “这才是重点,”Jeff说。 “——这才是正常的情况。”Jeff最后说。 Jeff咬了一口他的披萨。他的手像水手一样,疙疙瘩瘩很粗糙;相比之下Sanjay的手就显得细皮嫩肉了,真不明白他们两个人是怎么成为一对的。“我也不太清楚我们是如何发现并肩作战更好的。”他说。 “我们在未加入Google之前就并肩作战了。”Jeff说。 “但我不知道为什么我们俩人一起在一台电脑前工作,比在两台电脑上更好。”Sanjay说 “在之前的公司的时候,我会从我的实验室走两个街区到他的实验室去。”Jeff说,“路上有一家意大利冰淇淋店。” “所以,你是为了那家意大利冰淇淋店。”Sanjay笑着说。
Sanjay没有结婚,他与Jeff的两个女孩和妻子Heidi一起去度假。Jeff的女儿叫他Sanjay叔叔,他们5个人经常在周五共进晚餐。Sanjay和大女儿Victoria一起学习烘焙。Sanjay自豪地说,“我看到他的女儿们长大了。”
2004年,Google首次公开募股后,他们分别搬进了相隔4英里的房子。Sanjay住在旧山景城一间不起眼的三居室;Jeff自己设计的房子靠近帕洛阿尔托市中心,他在地下室安装了一个蹦床。在盖房子的时候,他发现虽然他喜欢空间设计,但他并没有耐心设计架构中“让Sanjay来干的方面”:梁、螺栓和负重等支撑宏伟设计的细节。
谈到结对编程,Sanjay说,“我不知道为什么别人不这么做。” Jeff说,“你需要找到一个能在思维方式与你合得来的人,你们两个人可以互补。”
他俩从桌边起身,漫步走过Big Table与Google的员工群,开始回到软件服务的工作中。两个人之中Jeff更加急于发言,在回来的路上他分享了自己的软件服务策略。他说,“我认为向上推进的方法可以增加稳定性。”Sanjay微笑着,专心地将巧克力和香草混合冰淇凌挤到了蛋卷筒里。
最佳程序员的效率是最差的十倍以上
社会学家Michael P. Farrell于2001年出版的《Collaborative Circles: Friendship Dynamics and Creative Work》一书中,对关系亲密的创作群体(法国印象派,西格蒙德弗洛伊德及其同时代人)进行了研究。他写道,“大多数奠定了新愿景基础的脆弱见解的出现时机并非整个团体一起工作时,也不是成员单独工作的时候,而是当他们互相合作而且两两成对互相回应时。”
1869年夏天莫奈和雷诺阿并肩工作,这才有了印象派的风格;毕加索和乔治·布拉克在投身立体主义的六年合作期间,他俩经常只在画布的背面签名,以掩盖每幅画是由他们中的哪一位完成的。毕加索后来回忆道,“只有得到我俩共同的首肯,一幅画作才算完成。”在《Powers of Two: Finding the Essence of Innovation in Creative Pairs》一书中,作家Joshua Wolf Shenk引用了1971年的访谈,约翰·列侬曾说道他和保罗·麦卡特尼中会有一人“写出一段好的音乐,这很简单,就像我今天看到了新闻或其他东西。”然后其中一人就会卡壳,直到另一个人到来,列侬说,“然后我唱一半,他会受到启发写下一点,反过来也一样。”每个人都会有灵感匮乏的时候,但是很少有两个人同时才思枯竭的时候。
在新科学或艺术的“理论建设”阶段,广泛探索而不陷入死胡同是非常重要的。弗朗索瓦·雅各布与雅克·莫诺一起开创了基因调控研究,他指出,在二十世纪中叶,分子生物学领域的大多数研究都是两个人的结果。雅各布写道:“两个人共同设计理论和构建模型比一个人更胜一筹。因为两个人共同处理同一个问题时,思绪更加轻易而且飞舞得跟快。它们可以在两个伙伴之间来回跳跃,可以从彼此的思维之上衍生出新的想法来,就像一棵树上的枝叶。在这个过程中,错觉很快被扼杀在萌芽状态。”在过去的35年里,大约一半的诺贝尔生理学或医学奖都颁给了科学合作伙伴们。
经过多年的共同工作和生活,有时二人之间会产生一种私人语言,就像双胞胎一样。他们模仿彼此的衣着和习惯。彼此之间的幽默感互相渗透。在他们之间区分功劳已经不可能了。但是这种紧密的合作在软件开发中并非常见。
虽然有时开发人员会提及“结对编程”(两个程序员在一台计算机上编程,就好象一个“驾驶”而另一个“导航”),通常大家认为这种伙伴关系有点浪费资源,尽管这种结对其实就好象一架飞机上的两个飞行员。 相比之下,Jeff和Sanjay就好象一个大脑的左脑和右脑。 他们的一些著名的论文有时多达十几位合著者。Bill Coughran曾经担任他们的经理,他回忆说:“他们结对工作非常多产,效率非常高,我们经常围绕他们组建团队。”
1966年,系统开发公司的研究人员发现,最佳程序员的效率是最差的十倍以上。从那以后,所谓的“10倍速程序员”的存在性一直存在争议。这种说法是个人英雄主义,但软件项目通常很庞大且是集体性的。在编程业界,很少有成就是孤立存在的。即便如此(也许讽刺的是)许多程序员都目睹了Jeff和Sanjay共同完成的工作,这正是10倍速程序员存在的证据。
1968 年的 Jeff 和 1966 年的 Sanjay
1968年7月,Jeff出生在夏威夷。他的父亲Andy是一名热带病研究员,他的母亲Virginia Lee是一位医学人类学家,精通6种语言。Jeff和他的父亲只为了好玩编写了IMSAI 8080套件计算机。他们将升级程序接到机器上,仔细研究了每一部分。
Jeff经常和父母搬家。13岁的时候,他跳过了8年级最后3个月的课程,前往索马里西部的一个难民营帮忙。后来,在上高中时,他开始为流行病学家编写一个名为Epi Info的数据收集程序;后来该程序成了实地工作的标准工具,最终以十几种语言发布了数十万份。(有一个由疾病控制和预防中心维护的网站,名叫“Epi信息故事”,上面登载了Jeff高中毕业典礼上的照片。)Jeff在尼苏达大学遇到了妻子Heidi,过了几年她明白了该程序的意义。她说:“他没有吹牛,我逐渐才得知的。”他们的第一次约会是在一场女子篮球比赛中。Jeff在啦啦队里穿着地鼠的服装。
在读博期间,Jeff专注钻研编译器(这种软件将人类写的代码转换成经过优化的计算机指令)。Alan Eustace曾说:“编译器非常无聊,一点也不性感。”但是,Jeff却说:“它们可以让你非常接近机器。”Sanjay用食指按摩着太阳穴说,“在写代码的时候,他会进入一种模式:这段代码的性能如何?他会几乎半自动地把所有极端的例子都考虑一边。”
在17岁时上康奈尔大学之前,Sanjay没有碰过电脑。1966年他出生于印第安纳州西拉斐特,但在印度北部的工业城市哥打长大。他的父亲Mahipal是一名植物学教授,母亲Shanta负责照顾Sanjay和他的两个哥哥姐姐。他们是一个书生气很浓的家庭:他的叔叔Ashok Mehta曾买过一本弗雷德里克·福赛斯的著作《豺狼的日子》(The Day of the Jackal),装订磨损很严重,Ghemawat家的孩子们互相传看了这本破旧的书。
Sanjay的哥哥Pankaj成了哈佛商学院有史以来最年轻的教师。(如今他是纽约州州立大学斯特恩商业学校的教授。)Pankaj和Sanjay就读于同一所学校,而且Pankaj以多才多艺而闻名。Sanjay说:“我有点像是活在哥哥的阴影下。”他的这番话未免太谦虚了,2016年他任职于美国艺术与科学学院,但他没有告诉父母,最后两位老人还是从邻居那里得知的这个消息。
在麻省理工读研究生期间,Sanjay结交了一群亲密的朋友。尽管如此,他从来没有约会,即便是现如今他的约会也是“非常非常罕见”。他说他不打算组建家庭——这只是他的生活方式。他的好朋友都知道不要催促他,而他的父母在很早以前就接受了他们的儿子将孤老终生的事实。
也许是因为他太注重隐私,在Google他是一个充满了神秘色彩的男人。大家都知道他很安静但很渊博,一个深刻且不同寻常的人。他的办公桌上总是放着一叠Mead的笔记本,这些笔记本可以追溯到近二十年,里面写满了整洁的清单和图表。他喜欢用钢笔写草书。他很少翻看旧的笔记本,只是为了思考才写下来。
在麻省理工期间,他的研究生指导员是Barbara Liskov——一位有影响力的计算机科学家,她的研究方向是复杂代码库的管理。在她看来,最好的代码就像一篇好文章,需要精心实现的结构,每个字都不可少。以这种方式编程需要站在读者的角度考虑。而且这也意味着代码不仅仅是为了达到目的的手段,而其本身就是作品。Craig Silverstein曾说:“我认为他最擅长的是设计系统,你可以看看Sanjay所写的代码文件,就像一件比例匀称的雕塑那般美丽。”
在Google,大家更熟悉Jeff。有人模仿Jeff Dean,就像有人仿照查克·诺里斯。(查克·诺里斯数数时会一直数到无限大…而且会数两次;Jeff Dean的简历上写的是他没有做过的事情——因为这样的话简历会更短一些。)对于那些了解他们两个的人来说,Sanjay也同样是天才。“Jeff非常善于提出疯狂的新想法和原型设计,”与他们长期共事的同事Wilson Hsieh说,“而Sanjay构建的东西能用很长时间。”在生活中,Jeff更外向,Sanjay更内向。而在代码中,情况正好相反。Jeff的代码令人眼花缭乱,他可以迅速勾勒出令人吃惊的想法;但是,因为他是本着发现的精神快速完成的,所以读者往往跟不上。Sanjay的代码则比较合群。
Silverstein说:“有些人的代码太松散了,一屏的代码信息量非常少,你需要来回滚动才能搞清楚。而有些人的代码过于密集,看着那些代码,你不禁会想:我不想看这些代码。Sanjay却可以做到折中。看着他的代码,你会想:好的,我也可以搞懂这些代码。但是,你也可以从一页代码中获得很多信息。每当我想往Sanjay的代码添加新功能时,就感觉是水到渠成的事儿。我感觉像萨列里。我知道这很伟大,但是我不明白他是如何做到的。”
“今天我和 Sanjay 又将 Google 搜索速度提高了10%”
今年春天的一个周一早上,Jeff和Sanjay站在40号楼的小厨房里,那里是Google人工智能部门的所在地。他们身后的白板画满了矩阵代数,桌子上放着一张无监督对抗网络的论文。Jeff身穿褪色的T恤和牛仔裤,看起来像是一个改良的沙滩流浪汉;Sanjay则穿着毛衣和灰色裤子。明亮的窗前是一片高大的松树,还有一片田野。无论Jeff在Google的哪里办公,公司都会为他准备好咖啡机。小厨房的柜台上,一台三英尺宽的拉玛佐科咖啡机正在嗡嗡作响。Sanjay站在咖啡机边上说,“我们迟到了”。时间显示8点32分。
喝完卡布奇诺后,他们走到电脑前。Jeff从自己的桌子前将一个脏兮兮的椅子挪到Sanjay椅子边上,而Sanjay椅子却一尘不染。Jeff把一只脚搭在文件柜上,靠在后面上,而Sanjay则打量着眼前的屏幕。他们开了4个窗口:左侧是Web浏览器和终端,用于运行分析工具;右边是文本编辑器Emacs中的两个文件,一个是待办事项列表和笔记本,另一个是花花绿绿的代码。Sanjay的一个笔记本放在电脑旁边。
“好了,我们干到哪儿了?”Sanjay问。 “我记得上次我们正在研究TensorFlow Lite的代码大小。”Jeff说。
这是一个与机器学习相关的重要的新软件项目,Jeff和Sanjay担心它会膨胀;他俩就像书籍编辑一样,寻找可以删减的地方。为了这个任务,他俩构建了一个新工具,而这个 工具 本身又需要优化。
“上次我正在努力搞清楚它究竟有多慢。”Sanjay说。 “非常慢。”Jeff说着身体向前倾,但仍然很放松。 “所以上次是120K字节,”Sanjay说,“大概花了8秒吧。” “是12万次堆栈调用,”Jeff说,“不是120K字节。” “是文本的千字节,大概是这个数字。”Sanjay说。 “哦,对,不好意思。”Jeff说。 “我不是很确定我们应该为每个单元设定多大的阈值,”Sanjay说,“半兆?” “可以啊,”Jeff说。Sanjay开始敲键盘,Jeff紧盯着屏幕。“你说这个大小只要比我们的样本大就……”他没有把后面的话说出来,因为他看到了Sanjay写入代码中的答案。
开车时,Sanjay会把手放在十点和两点,然后专心地看着前方。敲键盘的时候也一样。他的双脚分开与肩同宽,看起来很像他工作时的样子。他细长的手指轻轻划过键盘,一串串新代码便源源不断地流淌进了屏幕里。
不久,他们完成了一小段工作,Sanjay键入了一个命令来测试他们的进展。 他看起来很疲惫,在运行测试的时候他检查了一下邮件。测试结束了,但他却没有注意到。
“嘿,”Jeff打了一个响指,指着屏幕说。虽然在谈话中大家会用笑话和双关语拿他开玩笑,但当坐在Sanjay的电脑前时,他会变得固执己见、无理并表示不赞成。Sanjay很大方地接受了这些。当他觉得Jeff太快时,他会把手从键盘上拿下来,并张开五指,表示“停”。(一般来说,Jeff是加速器,Sanjay是刹车)。即使他们之间发生争论时也是如此:在20年的相处时间里,他们不曾有过一次高声争吵。
Sanjay滚动鼠标,将新代码部分显示出来。“看起来这些都可以放到个函数里,对吧?”Jeff说。 “嗯。”Sanjay同意了。 Jeff一边把手指关节掰得啪啪响,一边说,“似乎可行。 我们应该这样做吗?” Sanjay很谨慎说:“我觉得……” “那我们就这么无视一个问题?”Jeff有点愤怒地说。 “不,我的意思是说,我们只是在设法了解事情的真相。所以我们先记下来吧?” “好吧。”Jeff愉快地说,他的心情真是阴晴不定。他们一起写了个注释。
快到午餐时间了。他们工作了两个小时,所以现在可以休息10分钟,在这段休息时间里大部分时间他们都在交谈。(如果一般的程序员看到他们会留下深刻的印象,因为他们从未停止或卡壳。)按照标准的工程实践,程序员写的代码都需要经过别人的审核,但Jeff和Sanjay跳过了这一步,在他们的日志中简单地写上一笔“我看没问题。”从某种意义上说,他们的工作中充满了细枝末节。但是他们的代码是在Google的规模下执行的。他们所担心的千比特和微秒数,放到世界各地的数据中心(这些吵杂、热气冲天的大库房中容纳了无穷无尽的处理器,以及冷却这些处理的大水桶)会增加几十亿倍。在这样的日子里,Jeff回家后就会对他的女儿说,“今天我和Sanjay又将Google搜索的速度提高了10%。”
MapReduce 和 Hadoop 问 世
2003年,Jeff和Sanjay花了4个月的时间,给Google来了一次最大的升级。他们通过一款名为MapReduce的软件实现了这次升级。在第三次重写Google的抓取工具和索引器时,他们想到了这个点子。每次解决完一个重要的问题,他们就会面临这样一个难题:协调大量地理位置上分散且不可靠的电脑。概括地说,他们的解决方案就是:避免一次又一次地重新面临这个难题。而且还需要创建一个工具,让Google所有的程序员都可以通过这个工具来运行数据中心的机器,就好像它们是一台地球那么大的计算机。
Jeff和Sanjay在一间位于墙角可以俯瞰鸭子池塘的办公室里写完了MapReduce,这个工具为一个令人费解的过程设置了步骤与方法。 在MapReduce问世之前,每个程序员都必须弄清楚如何分割和分发数据、分配工作并自行解决硬件故障。MapReduce针对这些问题,为编程人员提供了一种结构化的思考方法。就好像厨师备菜(提前准备材料),MapReduce要求程序员将他们的任务分成两个阶段。首先,程序员告诉每台机器如何完成“映射”阶段的任务(比如,计算一个单词出现在网页上的次数);然后,程序员编写命令“规约”所有机器的结果(比如,求它们的总和)。MapReduce会处理分发的细节,因此,程序员就不必考虑这些细节。
第二年,Jeff和Sanjay利用MapReduce重写了Google的抓取和索引系统。很快其他工程师就意识了这个工具的强大之处,他们纷纷开始使用MapReduce处理视频,并在Google地图上渲染图块。MapReduce非常简单,使用方法不言自明。Google拥有所谓的“昼夜使用曲线” (白天的流量比夜间更多),而MapReduce可以利用闲置时期的资源。大脑在做梦期间处理白天的经历。而Google则可以处理它的数据。
早些时候的迹象表明Google是一家冒充搜索公司的AI公司。2001年,Noam Shazeer曾与Jeff和Sanjay在同一间办公室工作,他曾经对Google从另一家公司购买的拼写检查大失所望:它经常犯一些令人尴尬的错误,例如告诉那些输入了“TurboTax”的用户,他们是不是想找“turbot ax”(turbot是一种生活在北大西洋的比目鱼)。拼写检查器的好坏取决于它的词典,Shazeer意识到在网络上,Google拥有有史以来最大的词典。于是,他编写了一个程序,利用网上文本的统计属性来确定哪些单词可能有拼写错误。该软件了解到“pritany spears”和“brinsley spears”都意味着“布兰妮·斯皮尔斯”。Shazeer在Google每周的“谢天谢地终于周五了”聚会上演示了他的程序,大家都去尝试骗该程序,但是大部分人都失败了。Shaze与Jeff以及一位名叫Georges Harik的工程师合作,采用类似的技术将广告与网页相关联。广告定位成为了公司源源不断的资金,他们将这笔钱投入到了计算机基础设施上。从此以后就形成了反馈循环,即巨大是Google智能的源泉;而智能是财富的源泉;财富又是其发展的源泉。 如此这般,便成就了卓越、令人心惊、占据主导地位的Google。
由于富有进取心的程序员不断地利用MapReduce挖掘Google数据的潜力,因此Google可以将用户的语音邮件转译程文本,自动回答他们的问题,并在100多种语言之间互译。这些系统都是利用相对简单的机器学习算法开发的。即使是“非常简单的技术,如果你拥有大量数据,那么也可以发挥大作用,”Jeff说。随着“数据,数据,数据”(使用BigTable、MapReduce及其后续产品进行存储和处理)成为该公司最高指导原则,Google的全球基础架构变得越来越完美无瑕和灵活。分布式计算的想法很古老,“云计算”和“大数据”之类的概念在Google崛起之前就有了。但是,Jeff和Sanjay通过让普通编程人员也能智能地管理分布式程序,让Google对这项技术的掌握程度到了一个新的高度。用户可能已经感觉到了变化:Google云越来越聪明了。
2004年,因为Jeff和Sanjay认为MapReduce对天文学家、遗传学家和其他需要大量数据处理的科学家都很有用,所以他们写了一篇论文“MapReduce:大型集群上的简化数据处理”,并公之于众。MapReduce的论文就像一个天外救星。廉价的硬件以及Web服务和连接设备的增长导致了数据的泛滥,但很少有公司拥有处理这类信息的软件。两名工程师(Mike Cafarella和Doug Cutting)一直在努力扩展一个名为Nutch的小型搜索引擎,他俩非常相信MapReduce的重要性,所以他们决定从零开始构建一个一样的免费系统。 他们最终称他们的项目为Hadoop (根据Cutting儿子子喜欢的大象毛绒玩具取得名字)。
随着Hadoop的成熟,超过半数的财富五十强都采用了这个系统。它成了“大数据”的代名词。Facebook使用了人们俗称的“Hadoop MapReduce”来存储和处理用户元数据(点击内容、点赞内容、以及观看的广告等信息)。它曾一度拥有世界上最大的Hadoop集群。Hadoop MapReduce还帮助推动了LinkedIn和Netflix的发展。国家安全局前技术总监Randy Garrett曾向该机构的主管General Keith Alexander展示过这项技术。Hadoop执行的分析任务比以前的系统快18000倍,它成为了一种新型的情报收集方法的基础,一些观察者称之为“统统收集起来”。
Jeff 领导开发的 TensorFlow
Jeff天生坐不住,一旦他看到解决方案的大致模样后,就不会对问题那么感兴趣了。2011年,当全世界都在拥抱云计算时,他开始与斯坦福大学的计算机科学教授Andrew Ng合作,当时Andrew Ng正在领导Google的一个秘密项目,研究神经网络(由虚拟的“神经元”组成的软件程序),Jeff在大学期间接触过神经网络;当时神经网络还无法解决现实世界的问题。Ng告诉Jeff,这种情况正在改变。在斯坦福大学,当研究人员赋予了这种网络大量数据的访问时,他们取得了一些令人兴奋的结果。Ng认为,凭借Google的规模,神经网络不仅会有用,而且还能变得十分强大。
神经网络与传统的计算机程序截然不同。程序员从来无法通过常规的方式指定它们的行为;相反,它们通过输入“学习”并提供反馈。自从大学毕业以来,Jeff对神经网络的了解就没有太大进步,而Heidi只能忍受他们的卫生间塞满教科书。Jeff开始每周花一天时间参与这个被称为“Google Brain”的项目。Google的许多人对这项技术表示怀疑。“多么浪费人才,”他当时的经理Alan Eustace回忆道。Sanjay也无法理解Jeff的行为。“你不是在做基础设施的工作吗?”他想,“那你去那个项目干什么?”
在那之后的7年里,Google Brain团队开发出了神经网络,在机器翻译、语音和图像识别方面击败了当时最先进的技术。最终,他们取代了Google最重要的搜索结果和定位广告排名算法,而Google Brain成为该公司发展最快的团队之一。 2001年加入Google的工程师Claire Cui表示,Jeff的参与标志着AI在Google发展的转折点:“有人相信这项技术,而有人不信。Jeff会证明这项技术可行。”
事实证明,AI取决于其规模,这是系统工程师Jeff发现的。 作为工作的一部分,他领导开发了一个名为TensorFlow的程序——他尝试创建AI版的MapReduce。 TensorFlow简化了在一组计算机上分配神经网络的任务,并将这些计算机转化成一个大脑。2015年,当TensorFlow向公众发布时,它成为了AI的通用语言。最近,Google的CEO Sundar Pichai称其为“AI第一”的公司,并任命Jeff为AI计划的负责人。
现如今,Jeff每周花4天时间在Google Brain上。他领导着3千人的工作。他需要出差进行会谈,召开每周的会议,研究新的计算机芯片(Tensor Processing Unit,专为神经网络设计的芯片),并帮忙开发AutoML——这是一个利用神经网络设计的其他神经网络的系统。每周他只有一次机会与Sanjay一起写程序。
“Sanjay,那是你的办公室!”
工程上的丰功伟绩往往会自我匿迹。我们记得十八世纪伟大的探险家詹姆斯库克和乔治温哥华,却不记得约翰哈里森,他是约克郡的木匠,经过几十年的努力,他做的钟表足够可靠,甚至可以在海上计算出经度。最近有一次,Jeff和Sanjay正在Palo Alto Sol(他们经常光顾的墨西哥餐厅)享用玛格丽塔和辣酱玉米饼馅。Jeff拿出手机问道:“Gmail第一次亮相是什么时候?”电话回答说,“2004年4月1日。”对社交场合很敏感的Sanjay似乎不喜欢餐桌上的谈论别的事情,但Jeff却一副兴高采烈的样子。如今,Google可以通过一系列程序与人交谈、倾听并回答问题,这些程序无缝集成而且基本上不可见,可以从他的手机延伸到世界各地的数据中心。
现如今,他们的职务有了不同。在Google,Sanjay是所谓的“个人贡献者” ,他独自工作,不负责管理任何人。他对比表示感激。他说,“我可不想要Jeff的工作。”目前他正在开发一款软件,让工程师们能够更轻松地组合和控制几十个程序(比如获取新闻、照片、价格),用户只需在Google搜索框中输入文本就可以运行。每周一次,他与一群“区域技术主管”(Google的工程绝地委员会)会面,决定影响整个公司的技术决策。如果说Google是一栋房子,那么Jeff正在盖新的房间,而Sanjay正在支撑结构,加固横梁,拧紧螺栓。
与此同时,在周一的编程会议期间,他们会开始一些新鲜的事物。那是一个AI的项目:Jeff说这是一种尝试,他们想要训练一种“巨型”机器学习模型来完成数千或数百万种不同的任务。多年来,Jeff一直在考虑这个想法,最近他觉得这个想法是可行的。他和Sanjay计划建立一个原型,然后围绕该原型组件一个团队。在软件的世界里,最好的领导方法是利用代码。
Jeff的妻子Heidi说:“我觉得他们很想念对方。”当他们的合作放慢后,他们开始在周五共进晚餐。
3月的一个周日,Jeff和Sanjay相约去库比蒂诺来一次户外远足。那天天气晴朗,阳光明媚,但是太阳有点大。Jeff开着蓝色的特斯拉跑车(车后贴着Bernie 2016的保险杠贴纸)来到了出发口。紧随其后的Sanjay开着自己的特斯拉,那是一辆红色的Model S。整个早上Sanjay一直在读书。而Jeff去踢足球了。与他的小腿相连的装置说他跑了7.1英里。距离那个构建索引的3月已经过去20年了,Jeff就像一个退役的耐力运动员,他的皮肤被太阳晒坏了。Sanjay却容颜未改。
那是一条长约6英里长的环路,需要穿过茂密的森林。Jeff一路领先。他们在树林里追忆Google发展得如此迅速。Sanjay回忆说,在公司第一次猛增期间,一名水管工在男厕所的一个位置上安装了两个厕所。他说,“我记得Jeff当时说,两个头好过一个!”他大笑道。
他们从树林里下来,踏上了一片干燥裸露的地面。土耳其秃鹰从头顶飞过。
“这里的山丘比我想象的要陡峭。”Jeff说。
“不是有人曾经说这里非常平坦的吗?”Sanjay说。
“我猜这就是为什么没有骑自行车的路了。”Jeff说。
他们爬回了树林里。在蜿蜒的小路上,Jeff瞥了一眼头顶的树木,然后说:“我们应该能找到一个绝佳的欣赏风景的地方。”
小径通向山顶,那里又高又宽,没有树木,可以美美地享受风景。地平线上有一片阴霾。不过,他们可以看到南面的圣克鲁斯山脉和东面的使命峰。“Sanjay,那是你的办公室!”Jeff说。他们肩并肩站在一起,望着山谷。
原文:https://www.newyorker.com/magazine/2018/12/10/the-friendship-that-made-google-huge
作者:James Somers
译者:弯月,责编:郭芮
微信改版了,
想快速看到CSDN的热乎文章,
赶快把CSDN公众号 设为星标 吧,
打开公众号,点击“设为星标”就可以啦!
推荐阅读:
点击“阅读原文”,打开 APP 阅读更顺畅
以上所述就是小编给大家介绍的《谷歌基情录:TensorFlow、Hadoop、MapReduce 都靠他们诞生!》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java Concurrency in Practice
Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes、Doug Lea / Addison-Wesley Professional / 2006-5-19 / USD 59.99
This book covers: Basic concepts of concurrency and thread safety Techniques for building and composing thread-safe classes Using the concurrency building blocks in java.util.concurrent Pe......一起来看看 《Java Concurrency in Practice》 这本书的介绍吧!