目录
前言
不同时期的生活方式是非常不一样的。我觉得最重要的是意识到这一点,不要以为某一种生活方式会一直延续下去。这个世界上不会存在特定的程序员生活方式,你在不同的公司工作就会遇到不一样的公司文化,你的人生处于不同的阶段也会做出不同的选择。
第一份在百度的工作
我实习的时候是在百度,毕业后也在百度做了三年。那时候我完全不介意加班,因为除了加班也没别的事情好干了。
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 各个社团就开始组织活动了,例如篮球社在外面租了个篮球场打球,然后篮球社的人就都打球去了。我跟他们一起走,但我去到之后不打篮球,在附近游泳馆游泳。晚上等他们打完球,一起在附近找个地方吃一顿好的。
第三份来自 Facebook的工作
2012 年我去了 Facebook,早期的生活还是不错的,我还曾经写过这样一个获得编辑推荐的答案:
理想的一天生活是这样子的:
07:00 起床
07:45 开车去公司
08:00 把车停在 Building 14,走过去对面 Building 19(也就是 Fitness Center)运动
08:45 运动完洗澡
09:00 把车停到 Building 18,进去 Cafe 18 吃早餐,通常是白粥、薯饼、水果、鲜榨橙汁。
09:30 开始工作
12:00 看看 Facebook Culinary Team 的页面,然后决定中午吃什么。如果两个 Cafe 看起来都不好吃的话,我会选择去吃汉堡。偶尔也会去吃公司唯一不免费的午餐,也就是寿司。
12:30 看心情决定是否去甜品店吃雪糕,然后回去工作
15:30 在众多 micro-kitchen 中随机挑选一个离自己比较远的过去拿零食,路上碰到谁就随便聊两句
18:00 再看看 Facebook Culinary Team 的页面,决定去哪里吃晚餐
19:00 开车回家,回家后有可能还需要处理一下工作的事情
23:00 不知道为什么就该睡觉了
考虑到不是每一天都能理想地早起,有时候我也会下午或者晚上去运动。
工作的话,其实说不出跟其它科技公司有什么非常明显的区别。文化、流程、工具上的差别,其实都是挺细微的。
--
我明白大家想了解具体工作上的体验,但这其实很难说。如果你有在美国类似规模的科技公司工作经验,当我说「差不多」的时候你就已经明白我在说什么了。如果你没有这样的经验,那就如同要像一个只有中国驾驶经验的人解释美国公路的驾驶体验一样难。
一条单方向 4 车道以上的高速公路,所有人都开到 100 kph 以上,很少有人在车道之间不停地穿插,你也几乎不用考虑超车因为整体车流的速度是一致的。你没体验过的话,能明白到这和中国道路的区别吗?也只能通过图片了解最表面的现象而已吧。
如果要跟中国公司对比,最显著的体验区别在于同事们都很 helpful。一般技术问题,曾经做过有知识背景的人会很乐意花时间跟你解释清楚,不知道的会直说「to be honest I don't know」而不会乱忽悠你。我新加入一个 team 后,跟这个 team 上下游工作相关的好几个人都约了一个小时的一对一聊天,以了解他们的工作是什么,会如何影响到我的工作,我如何做才能更好地配合他们。他们都很乐意花时间向我这个新人解释各种细节问题。如果是实际任务,觉得有能力解决问题的人会主动说「I'll take this」,不会像中国一样把任务踢来踢去最后没人承担责任。
至于 code review 的反馈,尽管语气有时候可能比较不考虑别人感受,但讨论问题还是很认真的,代码怎样写更好就该怎样写。很少有代码应付性通过 code review 就为了尽快 merge 的。做 code review 的人也不会觉得自己是白白帮忙对自己的任务还无帮助的,因为确实能学到东西,提出有效的建议也确实是在为公司产生价值。在中国,code review 很多时候感觉就是纯粹帮忙,应付性通过就好了。看的人其实不是很想看,写的人也不是很想接受别人的反馈做调整。
此外在美国 peer review 是能够 work 的,大家都愿意诚恳地说出别人做得最有价值的事情和有待改进的方面,通常会提出建设性意见而非抱怨别人不好的地方。在中国大家就算明知道是对方看不到的内容,但在写的时候还是会给面子不愿意说真话。
大家都觉得我把 Facebook 工作说得很轻松的样子。其实 Facebook 是一家很实际的公司,也有过因为表现不理想而炒人的案例,因此而产生了一种我认为很有趣的现象——在 Facebook 外的人,都「听说」Facebook 工作压力很大;实际在 Facebook 工作的人,都不会说觉得工作压力有多大,就是「正常」或者说是「跟同类公司差不多」。(我入职前曾经因为外面的人都说 Facebook 工作压力大而专门了解过这个问题。)
我觉得这是很正常的。如果一个人在 Facebook 工作,觉得压力正常,那就是及格的员工,他可以自由选择是否更积极上进一些;如果一个人在 Facebook 工作,觉得压力巨大,那说明这份工作超出了他的能力范围,炒掉是合理的。
可能很多人觉得,越是激烈竞争才能获得机会,在得到后就必须付出越多。这是个让得不到的人很安慰的想法,但事实上不是这样子的……真正的付出是发生在这个机会得到之前,而非之后。之后的付出,则应该投资到下一步的职业发展目标上。
为什么那个答案开头要说「理想的一天生活是这样子的」?因为现实大多数时候都是不理想的。每天去运动?这是不可能的。不是说我没办法早期就把运动时间调整到下午和晚上,事实上我几乎完全做不到早起。至于运动?每周能去两次已经是很好的了,有时候一次也去不了。
但无论如何,我在 Facebook 最初的一段时间是非常美好的,而且有点像在百度最初那端时间。无忧无虑,喜欢工作的时候就工作,没有事情做的时候我完全不介意加班继续做公司的事情。跟在百度不一样的地方在于,湾区不是北京,吸引我周末出去玩的东西变多了,例如说爬山、划船、品酒、钓鱼、滑雪……周末很多时候我就出去玩了,周末用来工作的时间减少了。
最重要的是,那段时间我从来不担心我的绩效和晋升。我的绩效好好的,我觉得时间到了自然会给我晋升的,一点也不着急。我觉得我努力去做了,结果都不会太差,没什么好担心的。
然后呢,我就晋升了,再次拿到了「高级工程师」,一个我在百度早已拿过的职称,但感觉 Facebook 的更有含金量吧,所以要再争取一次是正常的。接着灾难就开始了。
多年后来看,这是我当时的老板在一个糟糕的情况下做了一个糟糕的决定。因为我们团队里的人都走了,只剩下我一个人,他决定让我换个方向重新开辟一个新的团队。这其实不是一个高级工程师应该做的事情,这应该是往上一两级的人做的事情。这就如同直接给一个刚刚升到 P7 的人安排一个 P8 到 P9 的目标——这里开一个新坑然后从零打造一个新的团队。做不出来是理所当然的……
那段时间的工作挺搞笑的。老板帮我找来一堆比我高至少两级的人,说他们都对我要开辟的新方向感兴趣,又已经是各自领域的专家,让我带领他们一起把这个新方向搞起来。我就每周跟他们开会,没有一周我们是能够达成一致的。
我在会议上说,「这个新方向其实公司以前以做过,只是中间放下来好几年了,现在我们继续沿用之前的指标如何?大家对设定半年目标有什么想法?」立即会有人跳出来跟我说,「我们不应该沿用老的指标,因为这个指标根本跟业务好坏没有任何的相关性,尤其跟我负责的业务没有任何的相关性」。我只能问他,「那要不你提一个新指标?」那个人说,「我也想不到有什么新的指标能更好地反应跟我的业务的相关性,但总之我不同意沿用老指标」。
在那个时候,我完全不知道如何能够「领导」比我高两级的人,所以这群人就游离在我的新团队的边缘,既不参与也不拒绝,但每个人都有非常多的观点和意见,导致我完全无法向前推进。一个正常的团队,有几个关键的指标(例如说月活),每个指标有个目标(例如说月活到达一百万),那就可以进入执行阶段了。团队里每个人的价值由他们对指标的贡献来决定,大家都会想方设法把指标往前挪。但我要做的事情,连选用哪个指标都定不下来,更别说制订目标了。
我选择了缩进我的角落里,继续做我最擅长的事情——写代码!半年过去了,团队没有带起来,绩效自然拿个不及格。随后的一年里,我的绩效就在及格和不及格的边缘。因为 Facebook 是真会炒人的,被炒了我的 H-1B 签证就失效了,理论上我就要立即离开美国。(那时候还没有 Obama 释法说 H-1B 拥有 60 天 grace period 这件事。)如果离开美国了,排了一半的绿卡不知道怎么办,买了的房子也不知道要怎么处理。
在这段时间里,我的压力非常大,一直担心自己会不会被炒掉。最让人抓狂的是,我不知道我需要改变什么。我每天还是正常地上班、写代码、开会。有时候别人觉得我做得好,有时候别人觉得我做得不够好,但我觉得我并没有改变什么,也不知道为什么别人的评价会发生变化。我身边那群比我高两级的人一如既往地诸多见解,而且他们的观点往往是互相冲突的,我也不知道该听谁的。