一个程序员的“无聊”故事

文 | 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等各大顶会论文集!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 349. 两个数组的交集(哈希)

1. 题目 给定两个数组,编写一个函数来计算它们的交集。 示例 1:输入: nums1 [1,2,2,1], nums2 [2,2] 输出: [2] 示例 2:输入: nums1 [4,9,5], nums2 [9,4,9,8,4] 输出: [9,4] 说明:输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。来源&am…

论文浅尝 | Iterative Cross-Lingual Entity Alignment Based on TransC

论文笔记整理:谭亦鸣,东南大学博士。来源:IEICE TRANSACTIONS on Information and Systems, 2020, 103(5): 1002-1005.链接:https://www.jstage.jst.go.jp/article/transinf/E103.D/5/E103.D_2019DAL0001/_pdf介绍这篇论文关注的任…

ARKit:增强现实技术在美团到餐业务的实践

前言 增强现实(Augmented Reality)是一种在视觉上呈现虚拟物体与现实场景结合的技术。Apple 公司在 2017 年 6 月正式推出了 ARKit,iOS 开发者可以在这个平台上使用简单便捷的 API 来开发 AR 应用程序。 本文将结合美团到餐业务场景&#xff…

腾讯天衍实验室新算法入选国际万维网大会 新冠疫苗AI问答上线

新冠疫苗的效用和安全性如何?怎么预约接种新冠疫苗?哪些人可以接种新冠疫苗?接种新冠疫苗是否收费?进入年底,随着全国新冠疫苗接种工作规范有序开展,各地接种人数在不断增加,但在逐步面向全民推…

LeetCode 965. 单值二叉树

文章目录1. 题目2. 解题2.1 递归2.2 循环1. 题目 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回 true;否则返回 false。 2. 解题 2.1 递归 class Solution { public:bool isUnivalT…

论文浅尝 - SIAM ICDM 2020 | 基于图时空网络的知识引导的诊断预测

论文笔记整理:吴锐,东南大学硕士。来源:SIAM ICDM 2020论文下载地址:https://epubs.siam.org/doi/abs/10.1137/1.9781611976236.3 动机基于电子病历(EHR,Electronic Health Records)对患者未来的…

Oceanus:美团HTTP流量定制化路由的实践

背景 Oceanus是美团基础架构部研发的统一HTTP服务治理框架,基于Nginx和ngx_lua扩展,主要提供服务注册与发现、动态负载均衡、可视化管理、定制化路由、安全反扒、session ID复用、熔断降级、一键截流和性能统计等功能。本文主要讲述Oceanus如何通过策略抽…

文本对抗攻击入坑宝典

文 | 阿毅编 | 小轶如果是咱家公众号的忠实粉丝就一定还记得之前咱家一篇关于NLP Privacy的文章,不出意外的话,你们是不是现在依然还担心自己的隐私被输入法窃取而瑟瑟发抖。所以,我们又来了!今天给大家讨论的是NLP Privacy中一个…

LeetCode 350. 两个数组的交集 II(哈希)

文章目录1. 题目2. 解题2.1 hash2.2 数组已排序1. 题目 给定两个数组,编写一个函数来计算它们的交集。 示例 1:输入: nums1 [1,2,2,1], nums2 [2,2] 输出: [2,2] 示例 2:输入: nums1 [4,9,5], nums2 [9,4,9,8,4] 输出: [4,9] 说明:输出结果中每个元…

会议交流 | CCKS2020 第十四届全国知识图谱与语义计算大会

CCKS2020第十四届全国知识图谱与语义计算大会China Conference on Knowledge Graph and Semantic Computing, 2020南昌.江西,11月12日-15日主办: 中国中文信息学会语言与知识计算专业委员会承办: 江西师范大学会议网站:www.sigkg.cn/ccks2020大会主题&a…

用微前端的方式搭建类单页应用

前言 微前端由ThoughtWorks 2016年提出,将后端微服务的理念应用于浏览器端,即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用。 美团已经是一家拥有几万人规模的大型互联网公司,提升整体效率至关重要,这需要很…

12种NumpyPandas高效技巧

文 | Kunal Dhariwal本文分享给大家 12 种 Numpy 和 Pandas 函数,这些高效的函数会令数据分析更为容易、便捷。最后,读者也可以在 GitHub 项目中找到本文所用代码的 Jupyter Notebook。项目地址:https://github.com/kunaldhariwal/12-Amazing…

LeetCode 1002. 查找常用字符(哈希)

1. 题目 给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符…

抖音算法推荐机制详解

抖音算法推荐机制详解!(科普向) 众所周知抖音的流量分配是去中心化的,这种去中心化算法,让每个人都有机会爆红,可为什么别人几个粉玩抖音,就能轻松获得10w点赞?而你怒拍几十条也枉然? 抖音的…

论文浅尝 - ICLR2020 | 用于半监督分类的图形推理学习

论文笔记整理:周虹廷,浙江大学研究生。研究方向:知识图谱,图表示学习等。论文链接:https://arxiv.org/pdf/2001.06137.pdf本文是发表在ICLR2020上针对图数据做节点半监督分类任务的论文。现有的算法解决图上节点分类问…

WMRouter:美团外卖Android开源路由框架

WMRouter是一款Android路由框架,基于组件化的设计思路,功能灵活,使用也比较简单。 WMRouter最初用于解决美团外卖C端App在业务演进过程中的实际问题,之后逐步推广到了美团其他App,因此我们决定将其开源,希望…

Android官方开发文档Training系列课程中文版:管理系统UI之变暗系统条

原文地址:http://android.xsoftlab.net/training/system-ui/index.html 引言 系统条(System Bars)是屏幕上的一块显示区域,专门用来显示通知,设备的通讯状态以及设备的导向。典型的System Bars与APP同时显示在屏幕上。APP展示了具体的内容&…

实话实说:中文自然语言处理的N个真实情况

文 | Liu Huanyong按语中文自然语言处理,目前在AI泡沫之下,真假难辨,实战技术与PPT技术往往存在着很大的差异。目前关于AI或者自然语言处理,做的人与讲的人往往是两回事。作者简介Liu Huanyong,就职于中国科学院软件研…

Android官方开发文档Training系列课程中文版:管理系统UI之隐藏状态条

原文地址:http://android.xsoftlab.net/training/system-ui/status.html 这节课将会介绍如何隐藏不同的版本的状态条。隐藏状态条可以使内容展示区域更大,因此可以提供一种更强的身临其境的用户体验。 含有状态条的APP: 隐藏状态条的APP&am…

论文浅尝 - ACL2020 | 用于回答知识库中的多跳复杂问题的查询图生成方法

论文笔记整理:谭亦鸣,东南大学博士。来源:ACL 2020链接:https://www.aclweb.org/anthology/2020.acl-main.91.pdf1.介绍在以往的工作中,知识图谱复杂问答一般被分为两种类型分别处理:其一是带有约束的问题&…