不同时期的生活方式是非常不一样的。我觉得最重要的是意识到这一点,不要以为某一种生活方式会一直延续下去。这个世界上不会存在特定的程序员生活方式,你在不同的公司工作就会遇到不一样的公司文化,你的人生处于不同的阶段也会做出不同的选择。
我实习的时候是在百度,毕业后也在百度做了三年。那时候我完全不介意加班,因为除了加班也没别的事情好干了。
2007 年实习时周末天天加班,因为实习算日薪,每天 ¥200,周末加班就能把月薪从 ¥4000 推到 ¥6000。北京没什么吸引我周末出去玩的地方,于是没理由加班也要找理由加班!理论上如果不是工作有需要,实习生是不能自愿周末加班的。周末加班是需要申请的,申请时说明确实工作需要加班,然后才能拿到那 ¥200。于是我不用加班也想办法找个理由来加班,在当今 996 程序员开来这应该是非常不可思议的。
毕业后开始在百度上班,每天晚上都加班到 9:00。为什么是 9:00 呢?因为到了 9:00 就可以打车回家了。9:00 后的打车票还可以用来证明我加班了,于是晚餐也变得可以报销了。当时百度这个 9:00 打车的制度产生了不少笑话。
第一个笑话:我 7:00 下班去挤北京公交,一路堵到 9:00 才到家。同事 9:00 下班打个车,环路和高速上狂飙,9:10 就到家了,只比我晚了 10 分钟。
第二个笑话:一个同事 8:00 下班挤公交回家,因为忘记带手表了就总问乘务员,「现在几点啦?」别人被问得不耐烦了,就跟他说「正常人都是问现在到哪个站了,怎么你总是问几点呢?」他说,「只要到九点了,我下一站就下车,然后打车回家」。
那个时候的加班,其实不会很忙,有时候还很闲。早上 10:00 到公司,12:00 去吃饭,理论上吃完就可以回来继续干活了,但大家经常吃完就坐下来玩杀人,磨蹭到 1:00 才回来干活。真闲的时候,1:00 回来了再打几盘三国杀或者是 CS,打到 2:00 才开始干活。
晚上加班有时候是干活,有时候真的能够沉醉于写代码,写到 11:00 甚至 12:00 才回家。但吃完晚饭后召集一群同事打三国杀或者 L4D 也是很常见的。如果你可以选择在北京公交和地铁上挤一两个小时,也可以选择在公司跟同事一起玩,两者都不太影响你回到家的时间,那你选择什么?此外,你回到家后也同样是在写代码和打游戏之间做选择,那答案显而易见啦。
我在百度那三年,到了后期真的完全没有动力,每天基本上不怎么干活。在最没心思干活的日子里,我 12:00 到百度大厦吃午饭,然后 2:00 从西二旗打车去三里屯逛街和买菜,4:00 打车回家慢悠悠地开始准备做饭。
那是一个很讽刺的阶段,因为在那之前我努力干活,但技术委员会就总是卡着我的晋升,不愿意给我高级工程师的职称,还说原因是「资历不够」。等我进入了几乎不干活的阶段,我狠狠地把我做的为数不多的事情包装了一下,经理们估计知道我再不升就要走了于是也狠狠地助推了一下,于是就成了。
讽刺的事情并没有到此结束。拿到了「高级」职称后,我就能坐在前端的技术委员会评审其它人的晋升了。看着 10 个人升高级工程师的申请,我们都不太知道他们具体做的事情有多难、影响力有多大,于是我们分成小组去跟每一个申请人访谈,了解他们申请晋升的项目。一圈访谈回来,10 份申请当中排最前面的 3 份是一定行的,排最后的 3 份是一定不行的。我们知道上一级的技术委员会大概会给我们 5 个名额,那中间 4 份申请谁上谁下呢?
经过了长时间的辩论,4 份不确定的申请有 1 份上还有 1 份下,中间还是有 2 份辩论不出来。这时候已经 7:00 了,大家都想快点搞掂去吃饭。这 2 份申请,都有跟申请人同组的高级工程师在技术委员会上挺他们,这如何是好呢?最终有人在评审会议上提出了那个终极问题:「这两个人谁在公司的时间更长?」大家都松了一口气,我也终于理解到什么叫做「资历不够」。
豌豆荚是我经历过的唯一一家星期六要上班的公司,跟同期的小米比,那绝对是假冒伪劣的 996。豌豆荚同事之间的氛围很好,很多事情都能玩到一起去,而且公司也鼓励大家一起玩,甚至出钱让大家一起玩。
豌豆荚当年追有意思的地方在于午饭之后赌碗。那时候的豌豆荚还没有自己的食堂,只是请了人做饭。大家自带饭碗,吃完饭轮流去洗碗。因为洗一个碗和洗十个碗都是洗,于是就出现了赌碗,参与赌局的人都把碗放到一起,最后赌输了的人把所有碗都洗了。赌的具体方式是 21 点,爆了的人自然算输,否则点数最小的人算输。并列的话,输的几个人再开一盘,直到有一个人被选出来为止。
周六名义上是上班的,但其实只是上半天班。下午 2:00 各个社团就开始组织活动了,例如篮球社在外面租了个篮球场打球,然后篮球社的人就都打球去了。我跟他们一起走,但我去到之后不打篮球,在附近游泳馆游泳。晚上等他们打完球,一起在附近找个地方吃一顿好的。
2012 年我去了 Facebook,早期的生活还是不错的,
我在 Facebook 最初的一段时间是非常美好的,而且有点像在百度最初那端时间。无忧无虑,喜欢工作的时候就工作,没有事情做的时候我完全不介意加班继续做公司的事情。跟在百度不一样的地方在于,湾区不是北京,吸引我周末出去玩的东西变多了,例如说爬山、划船、品酒、钓鱼、滑雪……周末很多时候我就出去玩了,周末用来工作的时间减少了。
最重要的是,那段时间我从来不担心我的绩效和晋升。我的绩效好好的,我觉得时间到了自然会给我晋升的,一点也不着急。我觉得我努力去做了,结果都不会太差,没什么好担心的。
然后呢,我就晋升了,再次拿到了「高级工程师」,一个我在百度早已拿过的职称,但感觉 Facebook 的更有含金量吧,所以要再争取一次是正常的。接着灾难就开始了。
多年后来看,这是我当时的老板在一个糟糕的情况下做了一个糟糕的决定。因为我们团队里的人都走了,只剩下我一个人,他决定让我换个方向重新开辟一个新的团队。这其实不是一个高级工程师应该做的事情,这应该是往上一两级的人做的事情。这就如同直接给一个刚刚升到 P7 的人安排一个 P8 到 P9 的目标——这里开一个新坑然后从零打造一个新的团队。做不出来是理所当然的……
那段时间的工作挺搞笑的。老板帮我找来一堆比我高至少两级的人,说他们都对我要开辟的新方向感兴趣,又已经是各自领域的专家,让我带领他们一起把这个新方向搞起来。我就每周跟他们开会,没有一周我们是能够达成一致的。
我在会议上说,「这个新方向其实公司以前以做过,只是中间放下来好几年了,现在我们继续沿用之前的指标如何?大家对设定半年目标有什么想法?」立即会有人跳出来跟我说,「我们不应该沿用老的指标,因为这个指标根本跟业务好坏没有任何的相关性,尤其跟我负责的业务没有任何的相关性」。我只能问他,「那要不你提一个新指标?」那个人说,「我也想不到有什么新的指标能更好地反应跟我的业务的相关性,但总之我不同意沿用老指标」。
在那个时候,我完全不知道如何能够「领导」比我高两级的人,所以这群人就游离在我的新团队的边缘,既不参与也不拒绝,但每个人都有非常多的观点和意见,导致我完全无法向前推进。一个正常的团队,有几个关键的指标(例如说月活),每个指标有个目标(例如说月活到达一百万),那就可以进入执行阶段了。团队里每个人的价值由他们对指标的贡献来决定,大家都会想方设法把指标往前挪。但我要做的事情,连选用哪个指标都定不下来,更别说制订目标了。
我选择了缩进我的角落里,继续做我最擅长的事情——写代码!半年过去了,团队没有带起来,绩效自然拿个不及格。随后的一年里,我的绩效就在及格和不及格的边缘。因为 Facebook 是真会炒人的,被炒了我的 H-1B 签证就失效了,理论上我就要立即离开美国。(那时候还没有 Obama 释法说 H-1B 拥有 60 天 grace period 这件事。)如果离开美国了,排了一半的绿卡不知道怎么办,买了的房子也不知道要怎么处理。
在这段时间里,我的压力非常大,一直担心自己会不会被炒掉。最让人抓狂的是,我不知道我需要改变什么。我每天还是正常地上班、写代码、开会。有时候别人觉得我做得好,有时候别人觉得我做得不够好,但我觉得我并没有改变什么,也不知道为什么别人的评价会发生变化。我身边那群比我高两级的人一如既往地诸多见解,而且他们的观点往往是互相冲突的,我也不知道该听谁的。
后来我拿到了绿卡,花了几年的时间慢慢体会到了 Facebook 强调 impact 和 ownership 的文化。
所谓的 impact,就好像李开复所说的那样子,世界有你和没有你之间的区别,那就是你的 impact。那些「改变世界」量级的 impact,更多是用嘴吹出来的。把 impact 吹大固然是一种重要的技能,但首先要把 impact 做出来。把 impact 做出来,本质就是为别人创造价值,就是让别人得到如果你不存在就得不到的好处。这是非常非常现实的事情。举个例子,如果你写个脚本,帮女朋友的论文跑数据,使得她不用花时间人手处理数据,晚上可以多睡几个小时,这「多睡几个小时」就是你写的脚本的 impact。
在现实工作中,这意味着我花更多的时间去了解别人想要什么。这使得我的工作有时候很不像「程序员」。我的时间花在跟别人坐下来聊天,讨论「如果这件事情做成了,对你来说意味着什么,对我来说意味着什么」。「对你意味着什么」,就是对你的 impact,例如说「需要多干活」、「可以少干活」、「可以学习到新技能」、「更可能获得晋升」。基于这些信息,我们才能决定一件事情值不值得做。如果 impact 不够,有些事情根本不值得做。
如果把 impact 看作一种货币的话,我的工作更像是「销售」和「交易员」。我可以四处去兜售我和我们组能做的事情,如果产生的 impact 显著大于时间成本,这就是一笔好生意。如果没有客户认为这是一件有 impact 的事情,就跟没有客户愿意为这件事情付费一样,这件事情完全不值得去做。有时候我还可以把一个组做的事情包装一下转手卖给另一个组,一个组出力,另一个组认可这件事情 impact,我中间套个利。
这时候我用在写代码上的时间其实已经很多少,因为我只写必须要我写的代码。假设别人写的代码平均每行值一块钱,我只写每行值十块钱的代码。这并不意味着我的技术比别人好,我在技术上其实没什么特别的优势,最多就是比别人更熟悉 Facebook 的环境,能够更熟练地使用 Facebook 内部的技术栈。我觉得我真正的优势在于理解公司业务,然后我能兜售我和我们组能做的事情。我能够有理有据地说清楚,为什么我提议去做的事情是当下最重要的事情,而且 impact 还很大。
什么叫做「只写每行值十块钱的代码」和「有理有据地说清楚」?我就打个比喻吧。如果我要卖一罐机油给你,我不能说「我想要卖一罐机油,你有兴趣买吗?」这是站在我的立场思考,思考的是「我需要什么」而不是「你需要什么」。我要跟你说「你这车机油差不多没了,前方几百公里人迹罕见,就算不考虑没机油之后烧发动机的维修成本,也要考虑一下车不能开之后如何活着出来吧。」这时候我是站在你的角度为你思考,「你的性命很重要,你不应该冒不必要的险」。你不买这一罐机油,你就是拿自己的性命去冒险,那你觉得我可以卖你多少钱呢?
这种生意要能做成,前提是要非常了解客户的实际情况,能够站在客户的角度想明白有什么需求是刻不容缓的,然后再想想这里面有没有套利的空间。这需要我花很多时间跟别人聊天和问问题,去了解别人在做什么、在想什么。如果能够设身处地想明白别人想要什么,拨开表面肤浅的需求找到底下深层次的驱动力,之后利用平庸的技术把需要的东西做出来往往并不太难。(这个世界上绝大多数东西都是使用平庸的技术做出来的。)
我花很多时间跟别人聊天,这看起来是非常没有意义的活动,但实际上是最值钱的工作,因为这使得我可以只写必须要我写的代码,避免花时间去写那些不需要我写的代码。
将来随缘更新……