在硅谷历史上,可能再也找不到第二个这样的人。
他没有住在公司附近,没有加班到凌晨三点,甚至不常出现在办公室。
相反,他每周二都坐飞机跨过加州的天空,去 Google 上班。
同事们在工位上刷 Perl、写 C++、飞快地交付功能的时候,他在机场排队过安检,或者在机舱里对着一台旧笔记本和一堆 Java 错误信息发呆。
而就是这个在 Google 内部自认“垫底”的人,写出了一个后来吞噬整个互联网的钱印钞机:Google AdWords。
0 1
Google是啥?
1988年,刚刚硕士毕业的罗恩(Ron Garrett)来到NASA的JPL(喷气推进实验室,钱学森是创始人之一),在自主机器人的人工智能组工作。
在JPL的12年间,他成绩斐然,一度是 NASA 所有计算机科学研究人员中被引用次数最多的,受人尊重。
只有一点让他感觉不爽,他是一个Lisp的忠实拥趸,但NASA主要做嵌入式开发,是一个C语言为主世界。
在经历了Lisp火星车的失败后,罗恩有点心灰意冷,有一天在逛com.lang.*编程语言新闻组的时候,他注意到有个人回答了一个非常冷门的问题,然后说:谢天谢地有Google。
这勾起了罗恩的好奇心:Google是啥?
他在浏览器中敲入www.google.com,发现是个新的搜索引擎,他玩了几分钟,立刻意识到,这玩意儿比其他搜索引擎要领先好几光年。
当时互联网正处于泡沫期,大量的互联网公司在纳斯达克上市,无数人通过股票获得了巨额财富。
这时候Google还非常小,不到100人,刚刚从KPCB拿到融资,正是加入的好时机啊!
罗恩看到Google首页下方写着:我们正在招聘。就立刻投了一份简历,没想到,仅仅15分钟以后,他就收到了Google的电话。
面试很快通过,就是薪水比JPL的还低!
这不算啥,重要的是股票期权,关键是罗恩已经在洛杉矶买房,走路即可到JPL上班,他已经拿下博士学位,在JPL相当于在体制内,工作生活都很稳定。
而Google在硅谷的山景城,距离洛杉矶五六百公里,相当于从青岛到北京,这怎么去上班?
Google见状马上给罗恩加工资,还给了差旅补贴,还告诉他:你可以试一年,如果不行,随时可以回去。
0 2
垫底的程序员
于是罗恩就开始了乘坐飞机上班的生活。
他凌晨4点起床,5点出门,6点到机场,坐飞机到圣何塞,然后通过拼车/出租车等方式去Google办公室。
10点到公司,然后一直工作到深夜。
当然,罗恩不是每天如此,他周二去,周四回 ,在Google待3天。
在硅谷,他没有朋友,没有家人,没有宠物,他的生活只剩下一件事情:工作。
说起工作,罗恩被分配到了广告组,去开发广告系统AdWords。
这个系统说起来很简单:
1.客户输入想在Google投放的广告
2.广告系统在搜索结果中投放广告,记录投放情况
3.计费系统统计数据,从客户信用卡中扣款。
没有人意识到,这个全新的搜索模式以后将会为成为Google历史上最大的现金牛。
当时Java爆火,AdWords被确定用Java开发,而罗恩则是首席工程师。
Google的经理也许并不知道,罗恩是个彻头彻尾的Java黑,他觉得这门语言有个邪恶的目的:把程序员变成可以被替换的零件和齿轮。
但是已经上了贼船,“Java布道师”罗恩不得不硬着头皮往前走了。
用户界面用JSP编写,如果你在2000年代用过它,你就会明白这种方式有多糟糕。
ul>JSP的本质就是把HTML和Java混在一个文件中,HTML 不关心括号,Java 极度关心括号,你一旦漏一个 } 或 %>,整个文件的解析都会“错位”。
当年没有语法感知编辑器,没有语法高亮,没有括号匹配,没有自动缩进,没有错误提示......
你在一个地方犯个错误,编译器会在几十行后报一个稀奇古怪的错误。
Lisp专家罗恩就坐在那里,调试一个又一个的JSP错误,艰难前行。
认识了一些Google的同事以后,罗恩更是被他们的聪明所震撼,一个活儿罗恩认为一周才能搞定,但是一个小时后就有人用一个小小的脚本搞定了。
罗恩的下巴都要被惊掉了,他觉得这绝对不可能,直到亲眼看到那个Perl脚本,大受震撼。
在JPL的象牙塔内,罗恩一直是顶尖的一员,在Google,他认为自己可能是后10%的垫底程序员。
罗恩的开发进度落后了,经理火上浇油,认为解决进度落后的办法就是进行微观管理:每天列出详细的工作清单。
这让罗恩相当反感,以至于和经理几乎不怎么说话了。
0 3
账单灾难
经过3个月的煎熬,AdWords终于开发完成。
上线之前,罗恩要面对一个重要的问题:客户的广告要不要审核以后再上线?
按照NASA习惯,一切都要在发射之前验证,因为出现错误就可能带来死亡,必须万分小心。
但是Google 创始人Larry Page坚持所有的审核都放到事后去做,广告直接上线。
原因非常简单:要给客户“即时满足感”。
这在2000年左右是非常疯狂的,因为传统的广告流程是:提交,审核,对接,排期,上线。
Google把它压缩成:填表,刷卡,上线。
出了错怎么办? Larry说:“到时候再说”。
事后看,Larry是对的,Google AdWords彻底改变了广告行业。
AdWords的上线相当顺利,接下来两周罗恩主要在监控系统,修复小Bug,并且当一名客服,给用户回复邮件。
这就是创业公司的文化:人人都得上手,干各种活儿来解决问题。
有一天,罗恩打开账单数据,发现一堆数据不对劲,计费程序竟然向客户收取数十万,甚至百万的费用。
罗恩赶紧停掉计费程序,开始排查,这是个非常难缠的Bug,因为系统大部分时间是好的,偶尔出错。
刚开始实在是找不到问题,只能重启系统,然后加上一个合理性检查,如果费用超过某个范围就自动停止,并且告警。
罗恩这个“客服”还得给客户解释发生了什么事情,向客户道歉,赔钱。
但是,让罗恩惊讶的是,即使发生了这么严重的情况,老板也没有斥责他、责骂他,只是说:赶紧想办法修复。
这样的错误发生了好几次以后,大家终于发现了规律:在C++编写的广告服务器关闭或者重启时,会写入随机的数据(多线程引起的错误),让一些客户的广告投放量达到了几百万条。
Bug终于被修复了,罗恩感到精神崩溃,身体也快要垮掉了,他和和妻子的关系开始紧张,和经理几乎不说话。
0 4
最大的遗憾
在这种高压之下,罗恩开始反思自己的未来:自己是否能适应创业公司这种“快速行动,打破一切,快速修复”的文化。
这时候发生了两件大事:
1.9/11事件爆发,打乱了罗恩乘坐飞机上班的计划。
2.互联网泡沫破灭,Google 当时情况还算好,但没有人保证它最终能成功。
罗恩利用自己在JPL的人脉,联系了高层的一位主任,这位主任也希望他能回JPL工作,并且为他争取了顶级的技术职位:principal, 几乎相当于大学的终身教授。
Principal还有个福利,专属停车位,附带遮阳棚,实验室7000人,只有100人有这样的待遇。
于是罗恩就回去了,他负责搜索引擎相关的工作,当然不是开发,而是采购。
罗恩没有料到,他做出了错误的抉择,他在 Google 做的不是边角料,他写的是Google Ads系统的核心算法,这是全人类历史上最赚钱的一段代码之一。
今天Google 每年几千亿美元的广告收入,本质上是这个系统在运转。
他只要留下,绝对是AdWords的 负责人,再坚持3年,Google就会IPO,罗恩就会成为亿万富翁。
但是在2001年那个时间点,很少有人能看清楚未来。
罗恩后来说:
“在Google工作最棒的地方是,我感觉自己是历史的一部分,当时谁也没有想到Google会发展到如此规模,我从小是电脑迷,硅谷是梦寐以求的圣地,当我第一次置身其中,就连那疯狂的通勤也让我感到莫名的兴奋。”
“环顾四周,看到那些风云人物正在做出各种炫酷的事情,而我也是其中一员,这种感觉实在太棒了......”
0 5
后记:世界是个草台班子?
今天回头再看 Google,人们很容易被它后来那套近乎神话般的工程体系所迷惑:
分布式系统、严谨的代码规范、顶级的人才密度、近乎完美的自动化流程。
但在 AdWords 诞生的那个年代,Google 远没有后来那么“体面”:
它从 NASA 挖来一个 Lisp 专家,让他Java写核心系统
它让一个工程师在最原始的编辑器里调试 JSP;
它可以一边高喊“工程师文化”,一边进行微观管理;
它允许所有人拥有 root 权限;
它也允许文本被直接“硬编“”进页面,让国际化极其困难;
它的系统里充满 Bug,计费错误甚至会直接变成天文数字;
从今天的标准看,这几乎是一次灾难级的工程实践!
但 Google 还是活了下来,而且迅速长成了一个前所未有的巨兽。
原因并不神秘。
当时代的浪潮真正拍到岸边时,Google 的创始人做对了一件极其关键的事:他们为搜索引擎找到了一个与用户体验正向耦合的商业模式——即时满足的AdWords 。
而剩下的事情,则交给了一群工程师。
这些工程师未必拥有完美的工具、清晰的流程或稳定的生活,但他们在一片混乱中,把一个模糊的想法变成了一个能持续运转的系统。
历史并不是由完美的系统启动的,更多时候,它是由勉强可用的代码、疲惫的工程师,以及一次又一次被硬撑过去的夜晚推动的。
全文完,觉得不错的话请三连。
热门跟贴