文 | Cat Chen@知乎
本文已获作者授权,禁止二次转载

不同时期的生活方式是非常不一样的。我觉得最重要的是意识到这一点,不要以为某一种生活方式会一直延续下去。这个世界上不会存在特定的程序员生活方式,你在不同的公司工作就会遇到不一样的公司文化,你的人生处于不同的阶段也会做出不同的选择。

我实习的时候是在百度,毕业后也在百度做了三年。那时候我完全不介意加班,因为除了加班也没别的事情好干了。

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 最初的一段时间是非常美好的,而且有点像在百度最初那端时间。无忧无虑,喜欢工作的时候就工作,没有事情做的时候我完全不介意加班继续做公司的事情。跟在百度不一样的地方在于,湾区不是北京,吸引我周末出去玩的东西变多了,例如说爬山、划船、品酒、钓鱼、滑雪……周末很多时候我就出去玩了,周末用来工作的时间减少了。

最重要的是,那段时间我从来不担心我的绩效和晋升。我的绩效好好的,我觉得时间到了自然会给我晋升的,一点也不着急。我觉得我努力去做了,结果都不会太差,没什么好担心的。

然后呢,我就晋升了,再次拿到了「高级工程师」,一个我在百度早已拿过的职称,但感觉 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 还很大。

什么叫做「只写每行值十块钱的代码」和「有理有据地说清楚」?我就打个比喻吧。如果我要卖一罐机油给你,我不能说「我想要卖一罐机油,你有兴趣买吗?」这是站在我的立场思考,思考的是「我需要什么」而不是「你需要什么」。我要跟你说「你这车机油差不多没了,前方几百公里人迹罕见,就算不考虑没机油之后烧发动机的维修成本,也要考虑一下车不能开之后如何活着出来吧。」这时候我是站在你的角度为你思考,「你的性命很重要,你不应该冒不必要的险」。你不买这一罐机油,你就是拿自己的性命去冒险,那你觉得我可以卖你多少钱呢?

这种生意要能做成,前提是要非常了解客户的实际情况,能够站在客户的角度想明白有什么需求是刻不容缓的,然后再想想这里面有没有套利的空间。这需要我花很多时间跟别人聊天和问问题,去了解别人在做什么、在想什么。如果能够设身处地想明白别人想要什么,拨开表面肤浅的需求找到底下深层次的驱动力,之后利用平庸的技术把需要的东西做出来往往并不太难。(这个世界上绝大多数东西都是使用平庸的技术做出来的。)

我花很多时间跟别人聊天,这看起来是非常没有意义的活动,但实际上是最值钱的工作,因为这使得我可以只写必须要我写的代码,避免花时间去写那些不需要我写的代码。

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

一个程序员的“无聊”故事相关推荐

  1. 一个程序员的真实故事(下)

    这几天比较忙,时间不够用,本来想天天更新一篇文章的,最后还是食言了,看来自己对时间的安排还是不够游刃有余. 今天就来揭晓一个程序员的真实故事的下集,上周写了上集,反响还是不错的,有好多朋友都在期望着下 ...

  2. 程序员编程表达爱情php,用代码书写一个程序员的爱情故事

    今天在csdn上看了一篇帖子:这段代码描述我最近的心情. 才发现原来用代码可以书写人生,对代码的作者十分钦佩. public class MyLoveStory { public static voi ...

  3. 一个程序员的真实故事上

    已经有好几天没有写文章了,因为这几天比较忙,所以更新的很慢.今天我和大家分享我好朋友的真实故事,他也是一枚程序员. 我的好朋友小Z,他特别热爱技术,喜欢编程.他的技术是半道出家,大学自学的.大三的时候 ...

  4. 一个程序员入门的故事

    我和Java的故事要从大学那些年说起.我的大学专业是计算机科学与技术. 没有Java的日子 大一的我死读书.每天还像一个高中生一样看书做题背单词.这样过了一年,虽然拿到了一些奖励,但是我不知道自己的未 ...

  5. 一个程序员的爱情故事

    和她正式认识之前,我见过她三次 第一次是她来公司面试,推门进来,小声对我说,打扰了,我来面试:披肩发齐刘海,灰色的短袖外套,黑裙子.我指了指人事办公区的位置,说人事在那边,接着喊了一句,"小 ...

  6. 催人泪下!一个程序员的悲惨故事

    全世界有3.14 % 的人已经关注了 数据与算法之美 编辑:大数据二狗 如果你喜欢这篇文章,就把它发给朋友看吧~ 精品课程推荐: 选购数学科普正版读物 严选"数学思维好物" 送给孩 ...

  7. 一位程序员的爱情故事

    //一个程序员的爱情故事 publicclass MyLoveStory { publicstaticvoid Main(string[] args) { //The ForeStory int re ...

  8. 讲一个程序员如何副业月赚三万的真实故事

    loonggg 读完需要 3 分钟 速读仅需 1 分钟 大家好,我是你们的校长. 我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的.仅仅靠在公司出卖自己的劳动时间 ...

  9. 分享一本关于程序员的故事书-《一个程序员的奋斗史》

    几年前在网上看过一本<一个程序员的奋斗史>,一个关于程序员成长的故事.现在又重温了一遍,感触很多. 地址:点击打开链接

最新文章

  1. 数据库学习day_02:表格相关sql语句 / 表格数据相关sql语句 / sql中的数据类型 / 导入外部sql文件 / 去重.是否为null.and与or.in.[x,y]
  2. 逆向建模软件介绍_逆向技术在2代机修理中的应用
  3. 3-4 网络编程 练习题
  4. php循环checkbox,php循环删除checkbox | 学步园
  5. JSch - Java Secure Channel : java 代码实现服务器远程操作
  6. linux删除mysql临时文件_linux下mysql自动备份数据库与自动删除临时文件_MySQL
  7. CSS分别设置Input样式(按input类型
  8. java alt是什么意思_java中这都是什么意思? - 执着的笨蛋 - BlogJava
  9. c#excel导入mysql_(转)C# Excel导入Access数据库的源码
  10. java并发编程(11)-- 线程池 拒绝策略
  11. Java:详解List集合的排序功能
  12. 密钥分发中心KDC 对称密钥分发中心 P112
  13. 通讯录管理系统的设计与实现
  14. CSS深入理解之relative
  15. 再见,MySQL !
  16. 解决 Windows10系统任务栏图标消失
  17. 舆情总结汇报撰写范文模板格式详介
  18. 【油猴Tampermonkey】脚本安装教程+自用脚本推荐
  19. PDF.js v2.4.456 (build: 228a591c) 信息:Failed to fetch
  20. 新浪微博瘫痪近一小时无法登陆,现已恢复

热门文章

  1. 两端对齐布局与text-align:justify
  2. 两个队列+k叉哈夫曼树 HDU 5884
  3. android客户端在多个界面切换时保持socket的链接的实例
  4. mysql root用户密码个性
  5. Windows Phone 8安装包中的文件和独立存储区中的文件访问
  6. Autodesk云计算系列视频 --- 云计算与Civil 3D
  7. linux下unix timestamp 与 可视化时间/常规时间进行转换
  8. MySQL Innodb存储引擎使用B+树做索引的优点
  9. 分享一篇很不错的CMake入门文章,值得收藏细读!
  10. 一个看似是系统问题的应用问题的解决过程