庆功宴,没叫我。消息是老马转给我的,一张朋友圈截图。烤全羊,红酒,
王德胜站在中间举杯。贺鹏站他旁边,笑得像刚拿了诺贝尔奖。
那个项目的主控模块崩了三次。三次都是我半夜爬起来修的。最后一次,
我从凌晨两点改到早上七点,改完直接去公司,没回家。
贺鹏在周会上说:“这次上线非常顺利,架构经受住了考验。”所有人鼓掌。
我坐在最后一排,也鼓掌了。现在他们在喝酒庆功。发的朋友圈定位是城南那家日料。
我在工位上吃外卖,十八块的黄焖鸡。我没生气。十年了。如果他们知道一件事,今晚的酒,
他们喝不下去。1.我把那张截图放大了看。老马发消息:“叫你了吗?”“没有。”“操。
”老马没再说什么。他也没被叫。他工号005。我工号003。001是王德胜,
002是他老婆,负责财务。十年前在居民楼里创业,三台电脑,一包烟,一箱方便面。
王德胜敲桌子说,建明哥,跟我干,干出来了,股份少不了你的。那年他叫我建明哥。
现在叫我“老张”。开会叫我“建明”。发全员邮件,叫我“张建明同学”。
我看了一眼朋友圈那张照片。十六个人。产品组去了八个,市场组去了四个,
贺鹏带了两个他从上家带来的人,王德胜,王德胜的助理。没有开发。一个开发都没有。
我把外卖盒扔进垃圾桶。黄焖鸡汤汁洒了一点在键盘上,我用纸巾擦干净。
这个键盘跟了我七年。字母磨没了,只剩下几个凹坑。我换过三次空格键。手机又亮了。
不是老马。系统告警。线上有个接口超时了。我点开监控,CDN节点有波动,
影响到了三个核心服务的响应。看了一下时间,晚上九点十二分。
他们应该刚喝完第一轮清酒。我坐下来,打开终端,开始排查。
这是今年第四十七次线上告警。其中三十九次是我处理的。
剩下的八次——其中六次是我指导别人处理的,因为我在高烧三十九度。还有两次?
那两次是贺鹏处理的。处理方式是重启服务器。重启解决了表面问题。底下埋了两个隐患,
后来还是我清理的。四十分钟后,问题修复了。
我在内部群发了一条消息:“CDN波动导致三个服务接口超时,已修复,
根因是供应商侧的路由切换。已联系供应商确认。”没人回。连个表情包都没有。
朋友圈又更新了。王德胜搂着贺鹏,两个人碰杯。配文:“感谢团队,未来可期!”团队。
我算团队吗?手机响了。李慧。“吃了吗?”“吃了。”“几点回来?”“快了。
”“又加班?”“嗯,一个小问题,处理完了。”挂了电话。我没动。坐在工位上,
面前是四块屏幕。左边两块是代码,右边一块是监控面板,最右边那块是内部IM。
IM上最新的消息是我自己发的那条修复通知。它的上面一条消息——贺鹏发的,
下午两点——“各位,项目成功上线,感谢大家的付出。回头请大家吃饭!”九个点赞。
四条回复。我的修复通知,零回复。我关掉IM。下面还有一封邮件没读。HR吴丽发的。
主题是《关于年度绩效沟通安排》。我点开。排期表。贺鹏团队的绩效沟通排在周一上午,
第一个。我的排在周五下午,最后一个。我又关掉了邮件。坐了一会儿。然后我做了一件事。
我打开公司的Git仓库,输入搜索——"core-engine"。结果出来了。
Core-engine模块。最后一次代码提交——2019年3月。提交者:张建明。
提交说明:“初始化项目结构。”那次提交的内容,是一个空的项目骨架。几个文件夹,
一个README,几个接口定义文件。没有一行核心逻辑代码。从2019年到现在,
核心引擎的源代码从来没有出现在公司的仓库里。它在我的电脑上。一直都在我的电脑上。
最开始不是故意的。创业初期太忙,代码在本地写,编译成二进制包直接部署。
后来公司大了,有了代码规范,所有模块都要上传仓库。所有模块都上传了。除了核心引擎。
因为从来没有人问过。从来没有人说:“建明,核心引擎的源码在仓库里吗?”从来没有。
贺鹏来了两年,做了三次架构评审,PPT做了二百页,从来没打开过核心引擎的代码仓库。
因为他打开了也看不懂。他只知道调用API。API是通的,功能是好的,
他不关心底下是什么。就像他们不关心凌晨三点谁在修bug一样。
我盯着那个空仓库看了三十秒。关掉了。回家了。2.如果十年是一本书,
我的名字不在封面上。甚至不在前言里。但每一页都是我写的。2015年。
公司成立第一年。三个人挤在王德胜岳母家的两居室里。客厅摆三张桌子,卧室堆服务器。
夏天不敢开空调,怕跳闸。王德胜跑业务,我写代码。第一个客户是他老婆的表哥的公司,
做仓库管理系统。王德胜拍着我肩膀:“建明哥,你是技术核心,
公司以后百分之十的股份是你的。你放心。”我放心了。我写了三个月,
仓库管理系统上线了。那个系统的核心——库存调度引擎——后来成了我们所有产品的底层。
王德胜拿着这个系统去谈下一个客户。客户说,能不能加一个数据分析模块?能。我写。
又一个客户说,能不能做供应链可视化?能。我写。我什么都写。前端写,后端写,
数据库写,服务器运维也是我。2016年,公司六个人。我还是唯一的后端开发。
那年过年,王德胜给每个人发了红包。前台小姑娘两千,销售三千。给我的红包,两千。
和前台一样。我没提。李慧问我年终奖多少,我说公司刚起步,没多少。
那年我的基本工资是八千。深圳。八千。王德胜说:“现在公司困难,等融资了就涨。
你放心。”我放心了。2017年,公司拿到天使轮,五百万。王德胜买了一辆奥迪A6。
给我涨了一千五。九千五。我没提股份的事。我想等公司稳了再说。2018年,
团队扩到二十个人。招了三个后端开发。我终于不用一个人扛了。
但新来的三个人——工资比我高。我怎么知道的?打印机卡纸。我去清理卡纸,
看到里面夹着一张薪资审批表。陈浩,后端开发,应届硕士,月薪一万五。一万五。
我写了三年代码,扛了三年系统,月薪九千五。一个应届生,一万五。我站在打印机前面,
拿着那张纸,站了很久。然后把它放回了纸盒里。没人知道我看到了。
那天晚上我多抽了半包烟。李慧说你最近烟怎么抽这么多。我说项目忙。2019年,
A轮融资,两千万。王德胜在全员大会上说:“公司能有今天,靠的是每一个人的努力。
未来,我们会推出期权激励计划,让每一个奋斗者共享成果。”全场鼓掌。我也鼓掌。
期权计划推出了。名单上没有我。第一批名单,十二个人。
产品总监、市场负责人、销售冠军、运营主管……没有开发。一个开发都没有。
我去找王德胜。“德胜,期权名单的事……”他拍我肩膀:“建明,你的情况特殊,
你是元老,不能跟普通员工一起搞。你的我单独安排,放心。”我放心了。一个月。三个月。
半年。没有消息。我又去找他。他在开会。助理说:“王总最近很忙,你发个微信吧。
”我发了微信。他回了一个“好的”。然后就没了。那年年底,我加了一百三十七天班。
系统出过两次大故障,都是我半夜修的。年终绩效,B。评语是:工作稳定,技术扎实,
建议加强团队协作和主动沟通。“建议加强团队协作和主动沟通。
”我是唯一一个二十四小时on-call的人。我每天在技术群里回答至少二十个问题。
我写了公司百分之七十的技术文档。建议我加强沟通。那天我没有加班。六点准时下班。
路上经过公司楼下的便利店,买了一瓶二锅头。回家自己喝了半瓶。李慧问我怎么了。
“没事。”“你是不是不开心?”“没有。”她看了我一会儿,没再问了。我没哭。
喝完酒洗了个澡,定了第二天早上七点的闹钟。3.2021年,贺鹏来了。空降CTO。
王德胜亲自发的全员邮件:“热烈欢迎贺鹏加入我们的团队!贺鹏曾任XX科技架构总监,
在分布式系统和高并发领域有丰富经验,将带领我们的技术团队迈向新的高度!”新的高度。
我在这个公司写了六年代码,title还是“高级开发工程师”。贺鹏来的第一天,
王德胜领着他参观办公室。走到我工位前——“这是张建明,我们的老员工,技术骨干。
”贺鹏冲我点了一下头。“你好。”然后走了。贺鹏有独立办公室。我没有。
我在开放工区的角落里,四块屏幕,两副键盘,桌子底下塞了三个移动硬盘。
旁边是厕所入口。贺鹏的办公室在落地窗旁边,有沙发,有绿植,门上的铭牌比我工牌还大。
他来了一个月,开了十四次会。我参加了两次。另外十二次会议的参会名单里没有我。
因为那些是“管理层对齐会”。我不是管理层。贺鹏来了三个月,做了第一次架构评审。
PPT六十页。标题:“下一代分布式核心引擎架构方案”。我看到第七页的时候,手停了。
那个架构图。服务拆分的方式。模块间的通信协议。负载均衡策略。一模一样。
我三年前写的内部技术文档。《核心引擎架构演进规划V2.0》。当时我写了给王德胜看,
他说“先放放”。那份文档一直躺在公司内部Wiki里。没人看过。
现在它变成了贺鹏的PPT。架构图一样。模块拆分一样。
甚至示意图的布局都一样——左边是数据层,右边是服务层,中间是调度核心。
唯一的区别是配色。我用的蓝灰色。他用的渐变紫。我坐在会议室最后一排,
看着贺鹏站在投影屏前面侃侃而谈。
“这个架构的核心理念是将调度引擎和数据层做物理隔离,
通过消息队列实现异步通信……”这些话,三年前我在那份文档里写过,逐字逐句。
我没有说话。会后,有个新来的开发跑来问我:“张哥,贺总的方案是不是挺厉害的?
”我看了他一眼。“嗯,挺厉害的。”那天下午,我打开公司的期权管理系统。
以前我没有权限看别人的数据。但系统是我搭的。每个接口的权限校验逻辑是我写的。
我用了一个自留的管理员账号登进去。贺鹏。期权数量:15万股。行权价:2元。
我往下翻。找到自己的名字。张建明。期权数量:3万股。行权价:5元。他来了三个月,
期权是我的五倍。行权价是我的五分之二。我算了一下。按最近一轮融资的估值,
贺鹏的期权价值大约六百万。我的,大约四十五万。他来了三个月。我来了六年。
我关掉了页面。清除了浏览记录。那天晚上,我坐在阳台上抽烟。
李慧把门打开了一条缝:“明天大宝家长会,你能去吗?”“几点?”“下午两点。
”“我开会。”“上次也是你开会。”我没说话。她也没说话。门关上了。烟灰掉在拖鞋上。
我弹掉了。2023年,公司第八年。五月十三号。我入职整整八年的日子。没有人记得。
没有邮件,没有消息,没有“入职周年快乐”。
HR系统会自动发入职周年祝福邮件——但那个功能去年改版的时候出了bug,一直没修。
那个bug的工单,还挂在我的任务列表里。优先级:低。我自己的入职周年祝福,
卡在我自己没来得及修的bug里。那天中午我一个人去吃了一碗牛肉面。加了个蛋。
算是庆祝了。4.转折是一次偶然。2024年三月,公司要见一个大客户。物流行业的,
年合同额可能过千万。王德胜在管理群里发消息:“明天下午三点,
所有VP及以上到会议室,提前到。”VP及以上。我不是VP。贺鹏是。产品VP是。
市场VP是。我不是。但这个客户要看技术演示。演示的系统,是我搭的。demo环境,
是我部署的。演示用的数据,是我造的。我在群里问了一句:“需要我到场做技术支持吗?
”王德胜回:“让贺鹏讲就行,你把demo环境检查一下,确保没问题。”确保没问题。
我是负责“确保没问题”的人。然后去角落里等着。客户来那天,
我在工位上远程监控demo环境。一切正常。会议开了两个小时。结束后,
我在走廊里遇到王德胜。他心情很好。搂着贺鹏的肩膀,跟客户的人握手。看到我,
顿了一下。“建明,demo跑得不错。”“嗯。”“辛苦了。”他拍了我一下,走了。
贺鹏跟在后面,没看我。当天晚上,我在公司加班。修一个线上的内存泄漏问题。修到一半,
收到一条消息。老马发的。是一段录音。老马在前台换饮水机的时候,
听到了隔壁小会议室的对话。他把门关上的时候,王德胜正在里面打电话,声音不小。
老马掏出手机录了一段。我点开。王德胜的声音。“……张建明这种人,
你给他安全感就行了。技术人嘛,不善社交,给够工资,让他待在舒适区,他能干一辈子。
你别把他想得多复杂……”对面的人说了什么,听不清。王德胜又说:“……核心技术这块,
贺鹏会逐步接手。我的规划是今年把引擎这块理清楚,明年就不依赖他了。
到时候想调整就调整……”想调整就调整。他说的是我。“不依赖他了”——然后“调整”。
老马发了条文字消息:“这话我听了都替你操蛋。”我没回。我把录音听了三遍。
每一遍都在同一个地方停顿。“给够工资,让他待在舒适区,他能干一辈子。”我的舒适区。
凌晨三点修bug是我的舒适区。全年一百多天加班是我的舒适区。
月薪九千五干了三年是我的舒适区。项目上线庆功宴没叫我是我的舒适区。
期权只有别人五分之一是我的舒适区。好。好一个舒适区。我坐在工位上,
面前是那个内存泄漏的代码。改到一半的代码。我盯着屏幕。忽然觉得,十年来第一次,
我看清了这张椅子。它是灰色的,扶手磨得发亮,右边的轮子有点歪,坐下去会往左偏。
我在这把椅子上坐了十年。我把没改完的代码保存了。关掉了屏幕。没有提交。5.第二天,
我做了一件从来没做过的事。我请了假。吴丽在钉钉上问:“张建明老师,请假原因?
”“个人事务。”“几天?”“一天。”批了。我在家里打开了自己的笔记本电脑。
不是公司的电脑,是我自己的。公司的系统有三层。
最上面是业务层——前端界面、用户交互、报表展示。这一层的代码全在公司仓库里。
二十几个开发每天都在上面提交代码。
中间是服务层——各种微服务、API网关、消息队列。这一层的代码也在仓库里。
贺鹏的“架构升级”主要在这一层折腾。最下面是核心引擎层。调度算法。数据处理管线。
索引系统。负载均衡的核心策略。这一层,是我在2015年写的。
十年来陆陆续续迭代了几百个版本。这一层的代码——从来没有提交到公司的Git仓库。
公司仓库里有一个叫"core-engine"的仓库。里面有什么呢?
一个README文件。几个接口定义文件——.proto文件,gRPC的接口描述。
还有一个/lib目录,里面放着编译好的二进制文件——.so文件。
所有上层服务调用核心引擎,都是通过gRPC接口调用这些二进制文件。
没有人看过这些二进制文件的源代码。因为源代码不在那里。源代码在我的本地。
在我自己的笔记本电脑上。在三个加密的移动硬盘里。每次核心引擎需要更新,
都是我在本地编译好,把新的。so文件替换到服务器上。这个流程,十年来没有变过。
为什么没有人质疑?因为没有人在意。核心引擎是一个黑盒子。它工作正常,输入数据,
输出结果,性能稳定。上层开发只需要调用API就行了。贺鹏来了之后,
做过一次代码审计。审的是服务层和业务层。核心引擎?“这块是建明负责的嘛,
他在就行了,不用审。”他自己说的。在管理会上说的。因为他打开那些。
so文件也看不出什么。他需要源代码才能审。但他不知道源代码不在仓库里。
他从来没点开过那个仓库看一眼。或者他点开了,看到一个README和几个接口文件,
以为源代码在某个子模块里,懒得深究。不重要了。我坐在家里,
打开了那个仓库的提交记录。最后一次提交:2019年3月17日。张建明。
“初始化项目结构。”五年了。五年没有任何提交。
如果有人认真看一眼——哪怕只是看一眼——就会发现,这个支撑着整个系统的核心模块,
在公司的代码仓库里只是一个空壳。但没有人看。我关掉电脑。坐了一会儿。
给老马打了个电话。“马哥,你下午有空吗?出来坐坐。”“行。在哪?”“老地方,
楼下那个苍蝇馆。”下午三点,我和老马坐在苍蝇馆里喝啤酒。老马比我大两岁。
工号005。做了八年测试总监。去年,贺鹏把测试团队“扁平化”了。