一位 Google 工程师的十年总结,太受用了!

这是「进击的Coder」的第 573 篇技术分享

来源:电子发烧友网

我在 Google 呆了10年半,离开时的头衔/职位是 Staff Software Engineer / Manager。大致分三期:

  • 前两年关注 Linux 桌面搜索产品和 Google 的开源项目;

  • 中间三年花了许多力气在 Google 中国相关的产品上,诸如输入法、谷歌音乐之类;

  • 后面四五年大致都在 Knowledge Graph 的范畴内工作,这些工作和 Google 搜索、Google Now 最近几次大幅度的变革密不可分。

其间,代码写了不少,团队也带过好几个。除此以外,这些年还长期在 Google Doodles 团队作为 20% 的开发人员帮忙开发那些好玩的首页涂鸦——嗯,这是真的,好多好玩的 Doodle 里面,都有我的一点小贡献。

学到了啥?

嗯,很多,很杂,拣最重要的四条来说说。

一位 Google 工程师的十年总结,太受用了!_第1张图片

差异化

第一次真实地生活在一个差异化的世界里国内教育氛围向来是不喜欢差异化的,个人爱好、冒险精神、特立独行之类的语词,总会让家长、老师乃至领导、官员操碎了心。从小到大,我基本生活在一个试图将所有孩子圈养在尺子、框子、笼子里的世界;可以想象,像我这样的 70 后一脚踏入 Google 时,会有怎样的感慨。

Google、Apple、Facebook、Twitter……对雇员来说,这些公司本身就是一种鼓励差异化生存的大家庭、大社会。

其中,Google 又总是扮演引领者的角色,这是在 Google 工作很值得骄傲的一件事。

差异化的最大好处,就是你有机会认识形形色色的神奇人物,然后,当你和人生观、生活方式、个人爱好乃至行为习惯差异巨大的人一起工作时,你会真真切切地感受到,自己生活的这个世界一点儿也不单调,这里有太多好玩的人、好玩的事等着你去发现。

在 Google,看见什么样的差别都不该奇怪。

往小了说,身边既有缩在角落里闷头写代码,讨厌和人交流的社交恐惧症患者,也有精神焕发的社交明星。办公室里,有带狗上班的爱心族,有重视家庭的好爸好妈,有整夜整夜奋斗的梦想家,有痴迷奇特爱好的技术极客……

就拿爱好来说,跟我一起工作过的同事里,说起来好玩的爱好就包括:天天在车库里打造奇形怪状的自行车,休一个无薪假期去帮别人竞选总统,每个周末都跑到一个从没去过的地方留下到此一游照,研究古音韵学,出远海调查海洋生物,长期倒卖二手摄影器材,写科幻小说,尝试大气层外跳伞并打破世界纪录……

当然,要尊重差异化,你就没法阻止任何人从早睡到晚然后每天只花两个小时干完别人十二个小时才能干完的活儿。

往大了说,Google 对 LGBT 群体的支持众所皆知。我当初更多地将这种支持理解为“政治正确”层面的东西。没过多少时间,我就知道我的理解有多么肤浅。有一次,Google 旧金山办公室一对男同在公司餐厅的浪漫求婚视频广为传播,感动了许多同事。事后我才想起,自己曾在硅谷一次会议上,见过那对幸福恋人中的一个。

另有一次,自己所在的整个团队收到了一位高管宣布自己性别改变的邮件,说从那天开始,大家需要称呼他为“她”。与许多人理解的相反,这些发生在身边的事情并没有时时提醒你 LGBT 群体的存在,反之,经历愈多,你会愈加淡化对他们的注意——他们或她们就是人类的普通成员,与你我并没有太大的分别。

去年在 YouTube 上追看 Google 推介的纪录片 HUMAN 时,我已经很清楚,Diversity 这个词早已是自己血液的一部分,我的大脑与纪录片制作者的大脑之间,完全没有任何隔阂。那时,我会对着屏幕上一张张陌生的面孔陷入冥想。

我觉得,这个世界最可笑的一件事就是人类进化明明得益于基因与性格的差异,许多人竟会嘲笑别人与自己的不同之处,并竭力迫使他人改变,恨不得全世界的人都如自己一般固执、愚昧。性取向如此,恋爱、婚姻、家庭、工作、事业无不如此。

Google 员工经常面临一个典型的两难困境:因为许多同事早早离开 Google 去融资、创业、上市、发财,像我这样安心在 Google 工作了十年的普通工程师就变成了另类——当面问我“为什么还没离开 Google”的人,他们眼睛里鄙夷的目光藏都藏不住;反过来,在家人眼中,我打算离开 Google 的举动无异于自己砸碎金饭碗,放着稳定的收入和丰厚的福利不要,非要和不确定性为伍。

其实,如果懂得“多样性”的重要,这种左右两难的困局就不再成立。既然有人选择快节奏和世俗生活,为什么我就不能辞了职,慢悠悠地随着自己的兴趣,由着性子,从不同的角度理解这个世界与自我的关系?为什么“慢生活”就必须是一种逃避?

宇宙很大,人很渺小。安全感是扯淡,特立独行地活着才最重要。

改变看技术心态

到 Google 以前,我在国内做银行业的业务软件研发,给工行、中行之类的大企业做软件。这和 Google 这种面向最终用户的互联网背景是有天壤之别的。

以前看待技术,觉得是身外之物,是工具,是砖木,是用来解决用户需求的必需品。这个心态其实也没什么错,但不自觉地就把自己放在技术追随者的位置上了。

那时的我,很多时间都拼命在了解、学习和追赶新技术,生怕落伍。从这个语言追到那个语言,从这个框架追到那个框架,从这个模式追到那个模式,从这个平台追到那个平台……根本停不下来。

那时的我只是个技术的“用户”,就像搬砖盖房子,如果不天天关心今年流行什么材质的砖,明年流行什么样的房子架构,后年流行什么样的房子外观,那肯定被客户和其他程序员骂“老土”。

到 Google 撸胳膊挽袖子一忙活,才发现以前的自己狭隘了,小气了,井底之蛙了。原来以前追的好多顶尖技术,根本就是 Google 工程师主导或参与鼓捣出来的。而且,Google 内部还藏着许多外界不大知道的神奇玩意儿。最最重要的不同是——自己现在是引领技术潮流的大团队中的一员了。

以前是不断学别人怎么设计房子,看别人推荐什么材料盖房子。现在,最顶尖的房屋设计专家、材料专家就在身边,自己也很快就能和他们一样指导别人盖房子了。这种感觉,就像跳进了一个大宝藏,还清楚地知道自己并非盗贼,而是宝藏的主人。盗窃宝藏 vs. 创建宝藏,这两者间的差别很微妙。

心态一下子大不一样了,从技术的“用户”变成了技术的“主人”。

比如,有段时间要解决 C++ 的 ABI 相关问题,猛想起 C++ 标准委员会的相当一部分人都是在 Google 工作的,有一年的全体大会还是在 Google 总部开的——那直接拉着既是同事也是 C++ 权威决策人的家伙一起开会讨论不就是了?

类似的,Linux 内核的维护者、Python 的发明人、UNIX 的元老、Google Brain 的创建者……跟那么多牛人在一个公司里工作,你肯定不好意思只是单方面地跟人讨教,但凡有机会,你总会希望自己也像那些牛人一样,为技术发展做点儿贡献,哪怕只是一丁点儿。

再比如,像 MapReduce、Bigtable、TensorFlow 之类由 Google 原创、对业界影响深远的技术,在 Google 内部可不仅仅是身外的工具,它们都是 Google 工程师这个大集体的作品和骄傲。因为大家都是主人,对哪些东西不爽,可以去鼓捣源代码,可以去提交自己的补丁或者新功能,甚至推翻重做。

别小瞧这推翻重做,虽然很难很难,因为你得一边说服老板和用户,一边找到足够的开发人手,但事实上, Google 内部重新发明一遍、两遍、三遍的框架、工具、库、接口、服务比比皆是。一言不合就动手做个新版本、新系统,这毛病既带来数不清的流程混乱,也带来一山又比一山高的良性竞争——表面的混乱之下,良性竞争引发的技术飞跃常常超出想象。

在 Google,工程师有好几万,不能说每个人都渴望做技术的主人,但踌躇满志的大有人在。因为 Google 走在技术最前沿,有追求的工程师确实没脸当个纯粹的技术追随者。当然,我的意思不是说 Google 里没人去做那些不那么酷的“苦力活儿”,而是说大多数人都有个争强好胜的心态,即便是做相对简单的技术工作,也时常会想想怎么能做出世界一流的效果来。

拿面试来说,有个工程师想出了一道与月球相关的面试题,把算法、编程、设计、维护问题放在太阳系的大背景下,层层追问。我在一次内部面试技术培训时拿这道题当过样例。结果,参加讨论的工程师表达了截然相反的两种意见,有人说这题设计精妙如天马行空,另一些人则批评这题目远离实际如镜花水月。

其实,Google 的技术宅们几乎每天都在深入实际与憧憬未来这两个极端的对位、矛盾、转化中工作。常说的“仰望星空、脚踏实地”远不能形容 Google 工程师的两面性。

一方面,工程师们深知自己的代码是如何参与了这个地球乃至这个星系里最前卫、最大胆的计算机系统,如何为诸如十年后的搜索引擎、拥有人工智能的手机或机器人、量子计算机、基因工程、无人驾驶汽车等贡献力量;

另一方面,工程师们“极客”和“宅”的一面常常在外人难以注意的工作细节里表露无遗——这里有十数年如一日致力于优化编译器的语言高手,有设计最好的代码审读系统的工具专家,有亲自动手实现软硬件原型的技术总监,有坚持为地球上每一种人类语言提供输入输出解决方案的国际化团队……

这是心态的差别,或者说,是技术境界的差别,烙在 Google 工程师的基因里,旁人想学也未必学得到。

“管理”二字的意义

有时候工程师很难管理,因为大多数人都想法新、主意多、眼光高、个性强。在 Google,有时候工程师也很容易管理,只要鼓励他们把一件看似普通的事儿做出世界级的水准,他们自己就有足够优秀的执行力,用不着督促。

在 Google 做技术经理带团队,和我以前在其他公司带团队,完全是两码事。这也许和技术团队的平均水平有关,但根本还是管理境界的问题。

记得以前在别的公司,花大力气搞开发流程管理,现在想想,大多是繁文缛节,程式化,教条化,最极端的像 ISO9000 之类的流程认证,弄得所有人筋疲力尽,效果未必有多好。

到了 Google,发现一个秘诀,再多的规章制度,再多的流程,不如一套好用的工具来得有效。比如 Code Style 和 Code Review,以前能把技术经理烦死,三令五申也执行不下去,顶多三天热度之后,大家就阳奉阴违了。在 Google,这件事不完全是个制度的问题。

刚进来的工程师没有过 Readability Review,他就没法方便地自主提交代码,这是代码管理工具设置的硬性限制。这直接把工程师们送到评审委员会那里接受“再教育”,没错,真的是“再教育”,连 Python 之父 Guido van Rossum 也花了挺大力气才通过了 Python 语言代码的 Readability Review。

接下来,提交新代码前,各种静态、动态检查工具自动运行,帮你报出一系列风格错误、编译错误、单元测试错误和简单的逻辑错误,你得先依着工具的提示,把这些低级别错误改一遍,然后才进入 Peer Review 的环节。整个 Code Review 都在非常方便的网页工具里完成,写代码的和审阅代码的人可以方便地交互、讨论,甚至在线修改代码。

工具的“强制性”保证了制度的执行,工具的“便捷性”最大程度减轻了工程师执行制度的负担,二者相辅相成。当然,Google 内部也不乏对制度敷衍了事的,但相对其他公司,Google 的确做得更好些。

说到管理,在 Google 带技术团队的其实都苦哈哈的。我就先后两次把团队交给别人带,自己乐得去做些单纯的代码工作。道理很简单,头衔是 Manager,可你没法高高在上指手画脚,Google 最好的团队带头人都是冲在第一线带着大家一起干,除了主动包揽大家不想干的脏活、累活、杂活之外,还要做管理者必须的非技术工作,比如给每个人写评语、定奖金,帮每个人申请升职,跟心理负担重的谈心……

一个人做两份工,吃力不讨好,对团队成员的晋升也没有决定权(这事儿也挺神的),这种 Manager 的活儿,谁愿意干谁干去,我是不大喜欢干的。不过,不喜欢归不喜欢,Google 这种挺不一样的管理既显着混乱无序,又运行良好,确实很神奇。

严格地说,聪明人在一起,只需要激励,不需要管理,Google 的办法主要也是强调这一点。

必须坦白,我加入 Google 时,工程师才三千人上下,无序管理、自发管理、扁平管理占主流。Google 越来越大以后,大公司病也如约而至。流程越来越复杂,层级越来越多,职权重叠和模糊越来越严重,不同团队之间管理风格的差异也越来越大。

但即便如此,Google 基因里那种蔑视陈规、抵制办公室政治、抗拒繁文缛节的管理风格还是能在许多团队带头人的身上找到——这是 Google 肌体里的健康因素,活力因子,弥足珍贵。

顺便说一句,最近中文圈子热传不写代码/不会写代码的 CTO 一事,许多 Google 工程师出身的 CEO/CTO 都在朋友圈里晒自己写的代码,以表明态度。我自己对技术管理者写不写代码没啥倾向,写不写都可以是好的管理者,但如果“不会写代码”还以此为荣,就完全没法接受,这个是底线。

我在 Google 面试了不少 Manager 和 Director 的候选人,都考过对方写代码或者至少讨论一段代码的能力——不是要他一定在管理过程中写代码,而是怕他和 Google 工程师没法交流,和 Google 技术基因没法共存。

在 Google 做技术管理,学不到啥成文的规矩,能学到的其实主要靠“悟”。

看待职业生涯的心态

很多人来 Google 还是奔着一份优越的薪资待遇来的。所以,这里只谈我自己。

有一种感觉是我开始在 Google 工作才有的。而且,那感觉越来越清晰,越来越吸引人,以至于十年下来,我几乎把这种感觉视为我工作时的第一推动力了。怎么说呢,这种感觉可能很多人都有,描述出来大概是:

在整个职业生涯里,至少要有一部分(哪怕是一小部分)时间,可以比较纯粹地为了开心而工作。一家公司是否适合自己,主要就是看这家公司能不能,或者在多大程度上能满足这个需求。

我在 Google 做不同项目,有时很吃力,有时很痛苦,有时很紧张,当然有时也会开心。但普通项目没法让我比较纯粹地享受那种开心、愉悦的幸福感,于是乎,我在最近五六年里,把我的 20% 时间,都投入到了 Google Doodles 这个既有趣,也适合我的项目里。

Doodle,嗯,首页涂鸦,纯粹为了让用户开心而设立的项目。这项目既需要画画的艺术家,也需要写动画、音效和游戏代码的成员,不但好玩,还特别有品,特别有文化。因为参与其中,我有机会跟 Google 总部那些厉害的艺术家一起合作,真的开心。

有一次做 Google 生日的 Doodle,大家选中的是美国小孩子在生日常玩的一种叫 Piñata 的游戏。在电脑里实现这样的游戏,需要简洁的美术风格,支持 JavaScript 的物理引擎,还有平滑、高效的动画引擎,这些是技术细节,不展开谈。

可在技术之外,我们这群追求开心的人硬是嚷着要亲自玩一次现实里的 Piñata。那次在 Mountain View,就在 Google 总部有一只霸王龙骨架的那片空地上,我们把一个真的 Piñata 挂在树上,轮流用竹竿去打,直到打出一地的糖果来。十几个艺术家和工程师开心得像小孩子。

就是很纯粹的,很简单的,很开心的那种体验。无论工作里有多少烦恼,至少要给自己保留这样一块空间,叫心情家园也好,叫随便什么名字也好,哪怕再小,也得有那么一个。

对我来说,在参与 Doodles 项目的过程里,可以和 Doodles 纪念的伟大科学家、艺术家们跨时空交流,可以和正在设计、制作的小动画、小游戏随时互动,可以预测到最终用户看到每个 Doodle 时的快乐,这的确是一件超赞的事。

很幸运,Google 可以为我这样追求开心的人提供合适的机会。很不幸,(我确切地知道)不少公司从不考虑员工的这种需求。这大概也是公司基因决定的事,没法强求。正因为有了在 Google 的十年工作经历,我才会毫不犹豫地将职业生涯中最重要的追求定义为“开心”。

十年职业生涯,除了快乐,还有历史的厚重感。特别是 Google 中国这十年,我有幸亲历历史,可算人生里的大风浪。不幸,许多历史是不能详尽言说或评价的,所谓春秋笔法,绝不仅仅是史官的政治妥协,更多情况下也是从更高维度审视历史的一种大智慧。

总的说来,我喜欢一种本质上不是消极避世的“慢生活”,“快乐”和“多样化”是这种生活的力量源泉。离开 Google 后,我坚信这种生活就是自己的未来。想法渐多,身心渐老。

下一个十年,请慢一些到来吧。

一位 Google 工程师的十年总结,太受用了!_第2张图片

End

崔庆才的新书《Python3网络爬虫开发实战(第二版)》已经正式上市了!书中详细介绍了零基础用 Python 开发爬虫的各方面知识,同时相比第一版新增了 JavaScript 逆向、Android 逆向、异步爬虫、深度学习、Kubernetes 相关内容,‍同时本书已经获得 Python 之父 Guido 的推荐,目前本书正在七折促销中!

内容介绍:《Python3网络爬虫开发实战(第二版)》内容介绍

一位 Google 工程师的十年总结,太受用了!_第3张图片

扫码购买

一位 Google 工程师的十年总结,太受用了!_第4张图片

好文和朋友一起看~

你可能感兴趣的:(编程语言,人工智能,微软,makefile,java)