我正式 Onsite 的工作经历是从 2017 年 3 月加入即刻实习开始,到如今也已经度过 8 年多的时间。这 8 年时间,我先后任职了 4 家公司,从十几个人的天使轮公司,到一百多人的创业公司,再到五千多人的独角兽公司,最后到十几万人的超大型互联网公司。相伴着这段经历的,也是中国移动互联网快速发展的 8 年,我有过为了理想而自愿加班奋斗的经历,也有单纯为了工资勉强捏着鼻子工作的经历。社交媒体上对各种类型公司的吐槽和夸赞,我大体都有过亲身的体验,也更清楚自己每个阶段需要什么样的环境。恰好现在正式结束了第四家公司的工作,同时又即将到了三十岁的年纪,所以是时候回顾下我这 8 年的职业生涯,也供其他处于早于我的人生阶段的读者在迷茫公司选择时的参考。
2017 年,当时的我还在读大三,但是已经在给一家业务主要在美国的在线教育公司利用课间业余时间远程实习赚外快。这家公司的系统经历过许多名美国各路大厂一线工程师的参与,所以整体技术 sense 都非常好,技术栈也算新颖,为我的技术生涯起步奠定了非常好的基础。在这家公司,我最开始只是做单纯的软件开发,后来因为做基础设施的同学的淡出,我逐渐参与甚至主导了很多基础设施的搭建和运维的工作,于是就误打误撞上了基础设施这辆车。
后来,我偶然用到了一款叫做「即刻」的 App,会对互联网上的 RSS 甚至是非 RSS 的信息源,设置一些抓取过滤条件订阅,构建自己的信息流,并为这些互联网上原本没有评论区的信息构建了一个有高质量用户的评论社区。用着用着,当时正觉得学校的课程没意义,想要出来找实习,于是就顺着找到官网,投递了简历。今天回过头去看,当时的想法和简历都相当稚嫩,并且我当初完全不懂什么叫做校招,秋招,夏招,不知道实习招聘也分季节,我只知道我当时的自己希望积累更多的实习经验,就这么单纯。而我当时的课程安排实际上是完全不可能出去实习的,我就想了一招只有那些大学富二代混子才会干的事情,我拿我实习工资的一部分出来,花钱找人给我代课并且告诉我课程作业。就这样,我最后通过了面试,从杭州去到了上海实习,而且是五天 Fulltime 的实习。为什么会直接 Fulltime 也是因为我当时完全不知道实习原来可以不全勤,甚至实习生还可以因为本身工资就比正式员工低可以潜规则默认可以早下班,我当时就单纯认为实习就得和正式员工一样上班,得有一样的产出比较,稀里糊涂就跑去了实习。
我在即刻的经历分为两段,从 2017 年 3 月工作到了 2018 年 10 月,去了一家更小的数据库创业公司呆了 5 个月,又回到了即刻,一直工作到了 2020 年 9 月。我在即刻第一段实习经历期间主要是在做基础设施的工作,这块工作只有我和我当时的 mentor 在负责,所以即便我只是一个实习生,做的事情也非常多。而且基本没有人主动来告诉我应该做哪些事情,应该做的事情总是自然而然地就自己出现了。我去的时候当时大家刚从 rancher 迁移到 Kubernetes 上,可以说基础设施是完全啥也没有,也不知道应该有啥。于是,我看大家捞日志不方便我就搭了个日志平台,服务配置一开始大家都写在代码里我就搞了一个配置中心,公司内部没有鉴权管理我就搞了一个接入了所有平台的鉴权中心,看大家都是裸用命令行发布服务我就搭了一个部署平台,我印象里这些系统都是用了极短的时间完成的,也丝毫没有方案设计和讨论这些步骤,先花最短时间做出来再说,而因为你只用了短的时间所以最差结果大不了不上也是能够接受的结果。我细数了这几套系统,在大公司可能已经足够养上百人的团队,光是方案设计讨论完都得加起来花上一年,但是在我实习的一年半时间里都做完甚至优化过好几波了。
从今天回过头看,当时我作为实习生的 Scope 简直可以说大到一手遮天的地步了。以鉴权中心来说,最开始只是对一些内部网站做基本的 RBAC 权限控制,后来公司发展出来一个人数众多的审核团队,不同审核人员的权限细分也被纳入到了这个 RBAC 体系内,以至于任何新员工要入职都要来我这里注册一堆权限。我觉得我人生中所有遇到过的工程师,都没有一个能够有我当初实习时拥有的机会,一次性参与到这么多系统的开发,特别是这些系统还能伴随着一个创业公司一起成长,不像是在开发系统更像是在搭建一个创业公司。以至于我今天去看系统设计的题库,发现里面大半都是我自己实实在在亲手设计过的系统。
虽然今天的我无比感激当初的经历,然而在我当时的稚嫩想法里,我却觉得我做的事情都太简单了,因为这些都不是那种服务千万级用户的系统,也没有什么值得拿出来说道的独家设计架构,所有合格工程师只要花上时间都应该能够写这些系统,这也促成了我最后离职去了一家数据库公司的原因,因为我想做更加有挑战的基础软件。但是今天的我在新加坡面试各路公司时,我惊奇地发现,我用到的大部分知识居然都来自我这段实习经历。这些系统虽然简单,但是需要你系统性,全链路地用到各种计算机领域的数据库,消息队列,软件架构的知识,而且你得真正独自一人手把手开发过这些系统才能有不会忘记的深刻经验,而不是网上看几篇系统设计文章然后夸夸其谈。而绝大部分在大公司工作的人,可能要花十几年才能积累到我这段经历的广度。如果今天再来问我哪段职业经历我一定不会选择放弃,那一定是这段经历,甚至这也不一定是加入创业公司就一定能有的经历,不是每个创业公司都会允许一个实习生操刀这么多重要系统,这是我 8 年职业生涯最宝贵的财富。
2018 年 10 月,我加入了一家叫做 Dashbase 的专注于日志搜索引擎的美国创业公司,最初我的预期是能够参与到引擎的核心部分开发,但是入职后发现事与愿违,大部分工作都是在做 2B 的对接和问题排查,而引擎的核心代码,由于我们中国员工由于国籍的原因甚至连接触代码的权利都没有。加上另外的一些私人原因,最后我还是很快离开了这家公司回到了即刻,不过这家公司在我离开后过了几年也被 Cisco 收购了,证明了公司本身确实是一家不错的公司,如果当初选择留下也能有合理的回报,但是我也没有丝毫后悔当时的决定。
在我回到即刻后,我依然做着和实习时候类似的工作,建立了一些新的中台系统,维护着公司的数据库等基础组件,直到 2019 年 7 月,因为一些众所周知的原因,即刻被勒令关停。具体的细节我无法谈起,但是因为我当时负责管理域名解析和网关的原因,我其实反倒是那个真正执行了关停命令的人,在我停掉域名解析之前,我在 Kibana 上用 access log 的地理信息导出了一张当时活跃用户的地图,保存到了自己的 iCloud 里。
虽然在一年后,即刻又恢复了运作,但是关于这个产品的大部分抱负也停留在了过去,公司在这关停的一年间,集思广益各自领头去孵化了众多不同的新产品,而我甚至还短暂地转行做过一段时间的产品 Owner 的角色,但是当时大家的气氛只是迫切想要成功,对自己能够做的和真正想做的事情并没有确切的认知,所以最后经历一番头脑风暴不知怎么地我作为一个当时不健身不自律的人居然牵头做了一款健身自律主题的 App,最终结果自然也是以失败告终。但是这段失败的经历其实让我更加清楚自己适合做什么,所以我在 2020 年 9 月裸辞了一段时间,准备沉下心踏踏实实专注于技术,在这条路上往深度去走。
2020 年 11 月,我加入了小红书的基础架构组。其实在当初的上海,互联网公司一共就那么几家,没有太多选择。当时的小红书也就三四千号人,处于不大不小的状态。我在小红书的技术经历还是非常愉快的,当时小红书有一小部分的服务开始使用 Golang,内部生态才刚刚开始,我得以像之前在即刻一样,参与众多框架和组件的设计实现,工作热情很高。我们组当时还维护这一个公司最核心的 Go 的网关系统,所以我写的那些框架和SDK组件,可以在这个网关上先行试验,然后再给其他 Go 的用户上线。我先后做了服务发现和流量调度,各种中间件的连接池实现,还有一个 RPC 框架。然而小红书的 Go 生态还是太小,对接来对接去也就只有那么几个组的人在用。所以后来没有多久,我就打算跳槽去一家 Go 生态更大的公司。
2021 年 6 月,我加入了字节跳动继续做 RPC 框架。在我加入的时候,其实公司的 RPC 框架已经基础骨架已经搭建完了,能做的事情完全不像我之前的工作经历那样,能够有全新的系统或是组件能让你从零到一地设计实现。我先是作为入门任务做了一些性能压测的工作,因为做了压测,所以后面自然而然地开始全身心投入到了性能优化上。在最早期的时候,性能优化工作更像是一个非常有意思的研究性质的工作,每天投入精力去看代码看火焰图,找到可优化点,然后优化完了再跑一次压测看看效果。工作专注且愉快也没有什么压力,还可以非常深入地对着某一个方向深挖。对上面汇报的时候,数据也非常粗暴简单,就是性能提升了多少的百分比。然而后面这份工作优化代码部分在工作时间中的占比越来越低,收集收益和汇报的占比越来越高,毕竟上面真正看的是后者。对于我们这种有上万个微服务在使用的框架而言,你要去一个个统计不同业务升级框架的收益,实际上是一件几乎做不到的事情,除非你的收益非常大。举个例子,一个服务常态平均 CPU Usage 是 40%,你把框架性能提升了 5%,且假设这个服务的全部开销都来自框架,你预期看到的 CPU Usage 下降应该是 2% 。但实际上平均 CPU Usage 每天的波动就有 2% ,还不算上每两天的同一时刻的 QPS 波动也远超 2% ,更可况业务代码不可能只有框架开销,所以这里所谓的「收益」是很难有公允的数字的。有时候你啥也不干重启下被分配到其他性能更好的机器上,收益都能有 2% 。再后来更夸张的是,上面要的收益变成了服务缩容的 CPU 核数。即便你真的把框架性能优化了 5% ,也不见得会有人因为你这个 5% 而敢去缩容机器,更何况优化到了后期,基本不太可能找的到能超过 5% 效果的优化了。整个工作过程有让我非常惊喜的地方也有诸多不如意的地方,但我对技术的深入理解,大部分也确实是这部分工作期间建立的。大公司的工作节奏相对较慢,一个问题有更充足的时间可以去慢慢琢磨慢慢研究。而在创业公司,许多事情并需要知道原理,能够最快时间实现出来更为关键。一个例子就是使用一个外部库,在创业公司的时候看完主页简介就直接上手用了,而在大公司,基本我用到的每个库都是深入了解过它的代码实现后才会敢去用,甚至更为鼓励的是自己实现而不是用现成的。
在性能优化的日常工作之外,我还会经常帮一些各种各样的业务去排查一些线上问题,这个过程虽然琐碎且常常伴随着晚上加班,但是却是我走出团队,与更广泛的群体打交道的好机会,也让我看到了人间百态。和这些各路人马的打交道过程中,让我逐渐对很多东西祛魅,对大公司光环祛魅,对高职级领导祛魅,对职场的绩效游戏祛魅。在我看来,很多人已经被工作异化了人性,大部分人追求的东西根本就是管理层忽悠出来的东西,实际上我们这份工作唯一必要的就是一份基本工资,奖金这些天然就应该是有最好没有也罢。但是如果你秉承这种心态,显然管理层就没啥东西可以要挟你了,所以发明了绩效和额外奖金,发明了晋升,这些东西就好像是房东的押金,假如你租房的时候就做好准备不要押金,你会比房东活得更像房东,反倒是房东还担心你这么不在乎押金会不会把他房子毁了。当我发现职场里的大部分人的工作重心和利益冲突都来自于这些东西,顿时感觉非常没有意义。
我在字节跳动的最后一年时间,基本上感觉已经学不到什么新的知识,随着国内的就业环境变差工作环境也在逐步变差,大家的脾气和心态也越来越恶化。公司在 2025 年初还出台了一项针对新加坡员工匪夷所思的政策,让我感觉是时候开始新的旅程了,于是结束了这段我任职时间最长的工作。
在我过去八年多的工作里,虽然有一些磕磕绊绊,但是总体上我运气还是非常好的,遇到了许多非常好的老板,也积累了许多非常珍贵的项目经历和人脉,有些事情虽然赚钱不多但是做得非常开心,有些事情做着难受但是金钱回报还算不错。站在如今的时间点上,我也更清楚自己想要的东西是什么,也知道了如果想要更多其他的东西代价是哪些。我在找新的工作的时候,与其说是找不如说是做选择题,在工资,工作时间,工作内容和个人收获中找出最适合自己的比例组合。但如果要问我最怀念哪段经历,还是最初那个不在乎工资,不在乎加班,不在乎他人看法的实习生的我,那个时候我是字面意义的一无所有,但是今天回过头去看,其实那个时候我拥有的东西和拥有的可能是最多的。