【行业故事】我在谷歌弄啥咧之一:入职
↑↑↑ 点击蓝字,欢迎关注并转发
【作者简介】万战勇,朋友们叫他老万,“无趣毋宁死”星人,科大89级计算机系本科毕业,耶鲁计算机博士。毕业后在微软、谷歌做程序员多年。文化程度较高,可以轻松阅读《知音》和《故事会》。除了堆代码和写字,喜欢弹琴唱歌,曾和同事组乐队“老公太忙”。欢迎按二维码关注他的不正经个人微信公众号“老万故事会”。
“我在谷歌弄啥咧”系列记载的是老万在谷歌工作的趣闻和经历。
从我入职Google到现在超过十二年了。时间都去哪儿了?还没有当上干部就已经老年痴呆了,哈哈。赶紧写个人总结吧,要不内存该溢出了。
快速回放到2002年底,我从学校毕业后到微软当一名光荣的人民码工,从最低级别做起,过的是食不果腹的生活(吃不惯公司的收费食堂,中午自己带饭。而我做饭的手艺是泣鬼神的)。那两年美国经济萎靡,微软很多项目都撤出了劳务市场,我只好把梦想打包另存,到一个专业不对口的组先干着。在那种情况下,我经常深夜拍案而起问天问大地:人生的路啊,为什么越走越窄?为什么啊?为什么?!
真的勇士,不在在沉沦中自怜,就在沉沦中吐槽。我总结自己的经历,写了一首控诉人生的说唱歌词《Loser宣言》。这时我的同学老周刚去了谷歌总部,感觉不错。他看到我的歌词,便撺掇我同去。正好谷歌在微软旁边的柯克兰开了分店,我便提交了申请。
因为谷歌柯克兰分部刚刚成立,人员很少不能承担面试的负荷,我是到加州去面试的。面试的节奏感觉很快,45分钟一轮差不多要问相当于微软1小时的问题。题目也是实打实的编程设计,实战性强。从这一点起,我就对我歌很有好感:用这样的题面试,至少不会招进来一帮不会干活的。
我运气不错,很快拿到了聘书。那时的谷歌有4000来个工程师,虽然也算个大公司了,规模还是不到微软的十分之一。除了搜索和广告,只有Gmail和地图两样产品。尽管前途未卜,我还是决定加入谷歌一搏。正如爱因斯坦福指出,人的一生要走很多路,但是在互联网时代,最关键的只有跳槽这几步。
2005年2月,我到加州山景城入伙去了。那时谷歌还没有中文名,大家用中文称呼的时候一般叫“狗狗”。不过我叫惯了还是写谷歌吧。我进谷歌时是自己选择去的测试技术部,又叫软件质量工程部。这个组除了我之外的其他人都在加州,老板说你不愿来加州也没关系,自己在柯克兰混吧,第一个月在加州就行。于是我花了一个月时间在总部熟悉环境,也寻找我的第一个项目。
初到谷歌,感觉很震撼。各种福利就不说了,公司的工程师文化让我马上有找到了家的感觉。第一点:到了谷歌,整个头一周基本上完全是技术培训,听资深工程师们讲解公司内部的开发环境,编程规范,和一些特有的技术,另外有一些内容要自学,还要动手做家庭作业,每天都忙并快乐着。如果要给这段培训加个期限,我希望是一万年。诚如法国化学家阿拉瓦锡所言,工程师进入谷歌,就好像海绵做的鱼得到了水,要多拽有多拽。
再一点让我感觉到我歌是码工之家的是装备。到了谷歌,人手一台24寸的液晶显示器(当年的标准,现在是一台32寸或者两台27寸自选),第二天就领到了笔记本电脑;如果电脑出了故障,无需预约,直接到负责技术支持的tech stop去就可以找人帮你现场解决;需要什么小配件也可以直接拿走。这些措施,结果是让工程师干活更有激情和效率。
我之所以选软件质量工程部是因为自己一直对这个领域很有兴趣,读博士时做的课题也靠近这个方向。那时谷歌更像一个初创期的小公司,员工自由度很高。我去问老板准备让我做什么项目,老板说他也不知道,让我自己想。所以在加州的这四个星期,我除了学习,就跑去和其他一些组谈,看他们有什么问题是可以从软件工具的角度解决的。一天中午吃饭遇到Gmail的创始人和我司“不作恶”口号的作者Paul Buchheit,了解到他们用Javascript开发Gmail前端,而Javascript是一种动态类型检查的语言,在开发大型系统的时候很容易出错,比如空指针异常。我就和老周想能不能用一些静态分析的技术在编译的时候抓住这类错误。Paul的办公室就在我们楼下,我们去找他说了一下我们的想法。不过后来发现空指针并不是他们开发的一个主要问题,而且这个静态分析系统的工作量也太大,可能会得不偿失。本着撞了南墙要回头的科学原理,我就没有做下去。
大概是入职第二个星期,我听说公司当时在Windows上做C++开发没有一个好的单元测试系统,大家百花齐放风格迥异闭门造车纷纷重新发明了各种椭圆形、方形、三角形、不规则形的轮子,开发和维护测试案例很是头疼。不少热血青年一听到单元测试就头晕目眩,倒地推脱说项目太忙没时间写,或者是太难了搞不出来。和做Windows开发的工程师Chris Prince谈过几次后,我决定从这里入手,为公司做一套好用的C++测试框架。据我调研,当时大家常用的Java测试框架是JUnit,而整个业界当时都没有一个被广泛接受的C++测试框架,现成的框架都有各种问题。我想这东西能有多大难度,咱不能自己从头搞一个吗。
谷歌是一家工程师导向的公司,做事的方式是草根式的。刚进公司就听说,如果你发现有什么东西坏了,不要光吐槽,撸起袖子把它修好,这样下一个人就不会在这上面浪费时间了。据我观察,大家不光是这么说,还真是这么做的。不过,从另一个角度说,你做了一个工具想要大家用,也是不能硬来的。工程师最烦有人指手划脚告诉他如何工作。如果指望公司从上到下推广你的系统,你还是去别的公司吧。考虑到今后还要做推广,我给自己要做的框架抢先取名为gUnit(后来开源时改名为gTest,即Google Test),这样显得格外高大可以唬人。当时想的是做上几个月就应该差不多了,没想到这个项目一做就是三年。