关于谷歌的几个问题的回答

年初的时候,很多人对我离开原来的公司跑去谷歌做个普通码农很不理解,直言觉得很意外。

一晃入职谷歌已经三个月了。虽然依然还被人认为是Noogler,但是感觉已经把这家公司的方方面面体验过不少了。也许是时间写写感想了。说是感想,其实也许更多的是想总结一下我自己对于当初的选择所抱有的疑问的回答吧。

首先,**为什么要去谷歌?**又或者对于我来说,为什么放着同是世界500强公司的软件工程总监的职位不做,要跑去谷歌做个普通的软件工程师? 仔细想想后,其实这个决定并没有看起来那么荒谬。

对于大多数从事软件行业的人来说,加入谷歌可以有一千万个理由,做强大的产品,拿丰厚的回报,享受完善的福利等等等等。 但对于我来说,其实很多这些我在加入谷歌之前都有了,而且免费午餐之类的对于我这个年纪有家有室的码农来说,吸引力十分有限。

我的想法很简单,在选择了把做技术这条路走到黑之后,我就坚信了去谷歌是一件必然的事情。 近一两年来,跟很多猎头聊天,人家问我现在关注什么,我都只有一个回答,那就是Scale。 快速地扩张(Scale)一个工程团队,同时扩展(Scale)自己掌控的产品在特性和容量,是我这几年来一直在做但是确信自己做得不够好的一件事。因此也不止一次地萌生了充充电的想法。而论到扩展这件事情,这世界上又有几个公司敢说比谷歌做得更好呢?

所以虽然基于谷歌的招聘体系,他们只给我一个软件工程师的职位,待遇也不见得比之前的公司好,我还是坚信只要我身在其中,就一定能获得很多对我来说更有价值的东西。 相比于那些刚毕业就加入谷歌,还沉醉在它学院派氛围里,流连在各种福利设施里的小孩子,我的目的性更强,感觉也更敏锐。 在小公司摸索了这么多年,觉得自己就像是一个拆去了塑料包装的海绵,满身都是孔洞,对周围的信息的吸收和学习能力满格。 简单来说,就像上学时说的“带着问题来”一样。

那么入职这几个月,我究竟有什么收获呢? 可以这么说,我现在终于理解了我当初读研究生的时候那个拿了谷歌offer直接辍学去工作的同学的选择了。 在加入谷歌的第一个月里,我觉得学到的东西顶过过去一年,每日都有被醍醐灌顶的感觉。

当然这个事情得分两面来看。

一方面,谷歌的软件工程实践无论在工具还是在编程模型以及软硬件架构上都是世界领先的,很多说是黑科技也不为过, 有些东西真的看着看着就能把人懂行的人看高潮了。

入职第二周我提交了一些代码,立马体验到了开发工具在谷歌是多么的强大。

首先谷歌的开发工具链早已实现了全部的云端化,就连代码编辑器连同未提交的改动都在云端。 极端地说,谷歌员工出差都不用带电脑,到了另一个地方只要去当地办公室的IT部门拿一台临时的Chromebook登录自己的账号, 代码和开发环境就都有了。

而同在云端的自动的构建系统Blaze从你创建改动就开始跑各种验证步骤,不但是被改动的项目,构建系统还会分析所有代码的依赖关系, 一层层地验证上去,有时候一行代码改动直接触发十几万个测试。 因为谷歌绝大多数代码都在一个代码仓库里,所以只要测试跑得过,自己改的东西都不用跟人打招呼就能提交, 也不用担心其他用了你的代码的项目会有问题。

同时,不止是各种测试,自动运行的任务还包含各种动静态分析,甚至能对你的代码风格做出建议,入职没两天就被机器教写代码的感觉也是酸爽……

然后代码一提交,安安静静地啥也不管就被自动部署到了产品环境,在沾沾自喜自己刚来没几天就已经在影响亿万用户的同时,也自己在暗暗赞叹这一套持续部署系统的强大。

总之各种新奇玩意儿让人应接不暇,只恨一天没有48个小时好让你去读文档。

另一方面,也因为谷歌所有的东西都是自建的,所以新的员工一入职就有无数的东西需要上手和学习,前面说谷歌内部工具很多很完善,但是这个事情的另一面就是,你改任何一行代码都有可能涉及几好几个你并不熟悉的编程模型,上百个你都没听说过的系统,和成千上万个你觉得八竿子打不着的测试用例,任何一个检查失败了要查起问题,都有无数的文档要去读。

其实谷歌的内部培训是下了大工夫的。我在之前带了几年的新人,现在轮到我当新人的时候,看着谷歌内部的培训流程和资料,才明白自己当初只不过是在放羊…… 但即使如此,谷歌对于新员工的预期,也不过就是六个月之后能跟上团队的速度。这对于大多数公司来说简直是没法接受的。

我相信这也是传说中的谷歌从来不开人的原因,因为培养一个Googler简直太难了,加上谷歌的系统每过几年就要改写,重构。留下来的人哪怕在没有上进心在没有能力,真正做起事来,靠着长时间的积累和对整个谷歌技术栈的熟悉还是比绝大多数新人要得力。

但总的来说,见识了亿万级的软件产品的开发部署流程,了解了星球级规模软硬件系统的架构,更体验了千雕万琢的自动化开发工具链之后。我之前的很多的疑问都得到了解答。我甚至觉得即使现在我就离开谷歌,这一趟也没白来。

前一段时间谷歌有一个人发了一文章在arxiv上讲谷歌是怎么做软件工程的,我也读了一下,最大的感觉就是如果没有设身处地的体验,里面的内容其实还是挺干巴的,所以说软件开发和软件团队的建设,其实还是蛮细致的一门学问的。

然后你可能会问,那为什么还会有人不愿意为谷歌工作呢? 为了不变成一个“歌吹”, 我也尝试思考了这个问题。

很多人谷歌员工都有一个担忧,就是很怕被谷歌的工具和福利惯坏了,离了谷歌就不会写代码甚至不会生活了,同时而很多外人则说,谷歌养了一堆闲人在做些没有技术含量的东西。这些论断也许不假,但是在我看来这都不应该是问题,问题在于你作为其中的一员有没有足够的好奇心去搞懂能让你傻瓜式编程的工具和框架是怎么设计的,有没有足够的热情和实力去改进它。在这样的基础上去做改进,我相信挑战和成就感都是不会缺失的。如果真的搞懂了,出去之后觉得不爽可以自己做一套嘛,说不定单单这套工具就都已经足够成为创业项目了,更不用说其实谷歌本身开源的东西也不少,出去创业也可以直接拿来用。

接下来的两点,我觉得才是真正的原因:

首先,谷歌是一个重技术轻管理的公司,很大程度上靠工程师自治,所以它的招聘要求就格外的高,即使近几年大扩招,但是能得到高级工程师职位的人选,多半也是其他地方的核心骨干甚至是架构负责人。两厢一比较,对于本身就有着更多选择的牛人来说,自然是需要权衡自己是愿意去钻研小领域还是去做更宏观的东西负责更多事情了。

然后,我认为对于已经在谷歌里面的人来说,最大的问题就在于OKR系统了,OKR并不是谷歌原创,但却可能是被谷歌的应用弄到人尽皆知的。谷歌的OKR,又或者说谷歌的整个职业发展体系,完全是基于Key Result的,而这个关键指标又被谷歌的聪明人玩坏了,其中最让我印象深刻的,大约就是对于影响力(Impact)的执着了。

于是就出现了几个团队合作的时候,某个团队先抛出一个含混不清的文档先把有技术含量的坑占了,然后再不紧不慢地开始设计的情况,整个项目的前期简直就像是众包网站上的竞标过程。

另外一堆人不急着写代码,却围着一个设计文档锱铢必较的场面也很常见,因为每个设计文档,都可能是你升职文件里的例证,大家恨不得跟投行人士改Excel一样改出花儿来,不同的技术意见一定要当着大家的面整个脸红脖子粗以证明自己的技术影响力,很多非作者哪怕插不上话也要过来给你改改typo搏个出镜。个人感觉有时候挺耽误事儿的。

一旦一个团队有了重点项目,其他团队的人就抢着换组跳过来赶发布蹭影响力,而他们原来团队不得不承受人员的损失。

更有甚者,为了影响力,本来很稳定的系统动不动就要用新框架重写,甚至开发新框架。工程师都知道,一个系统80%的工作量其实只需要20%的代码量就能完成,所以无数人热衷于打造新轮子,最后在自己的升职申请里写上“发布了新版本的xx系统,完成了80%的旧API的迁移,效率提高了XX个百分点”之类的话。 但问题是只要有1%的东西还留在老系统里,这个团队就得同时支持两个框架,而且这剩下20%需要大量投入的系统迁移是没有人愿意做的。 以至于谷歌内部有个段子说在谷歌只有两种技术,未成熟的(not ready yet)和已抛弃的(deprecated) 当然,更广为人知的段子就是,谷歌每年都要发布一个新的聊天工具……

基于此,也就衍生出了谷歌内部实干无用升职主要靠吹的说法,那些兢兢业业对产品负责的人,几年内遇不上好的项目,也许就去别处寻求直接的进一步发展或者甚至是自己干脆出去创业了。

这才是我觉得谷歌真正需要反思的地方。

最后再小说一下钱的问题。 钱其实算也不算我加入谷歌的原因。 说不算是因为谷歌给我的薪水并不高,说又算呢,其实是因为我认为谷歌愿意花在我身上的钱并不少,这里面既包括了工作上的资源也包括了之后的薪酬回报增长的潜力。

前谷歌亚洲研究院的吴军博士写的《浪潮之巅》里的一节对我影响很大。 那就是他说谷歌是一个有着“印钞机商业模式”的公司。

现在的信息技术行业,不缺钱的公司很多,但是能够保证自己一直不缺钱的,又或者说能够已很小的成本换来极大回报的公司其实很少。 我并不觉得谷歌就能万世长青,但是至少在可见的将来,谷歌很难说会有资金捉襟见肘的时候。 这带来的好处就是,所以别的公司因为资金原因不敢做的事情,只要想做,谷歌都能做。 而作为全球用户最多的软硬件公司之一,因为规模足够大,任何微小的改进都能带来非常丰厚的回报,所以谷歌对于软件工程师的慷慨是能很轻易感受到的。

所以谷歌才能做出Golang,TPU和TensorFlow,更能够专门设置一个巨大的团队,专注于内部工具链的改进。 举两个夸张点的例子,谷歌内部员工恶搞用的动图网站都有专门的人在负责维护,每日食堂菜单的发布都有专门的App,还跨各种移动平台。

落实到普通的工程师身上,这就带来两个好处:第一是你可以做一些在其他地方做不了的的事情, 第二是你可以非常专注地去细细打磨一小块东西而依然心安理得地拿着不菲的薪水。

做一个比较好理解的类比,相比于那些可能同样薪酬丰厚,但是却被公司逼着996,痛苦地做着低效没乐趣的事情的人来说, 他们的公司把软件工程师当做了日用品在定价,而谷歌则是把软件工程师当成了奢侈品在定价。

comments powered by Disqus