第4章 老张的焦虑

陈默坐在工位上,屏幕上的错误信息滚了好几屏。他在排查一个线上问题,日志里有一行重复出现的异常,每次调用堆栈都不一样。他翻几遍,从控制层追到业务层,再追到数据层,每次都停在同一个位置,一个不该为空的引用指向另一个不该为空的引用。这种问题最耗时间,不是逻辑写错,是一个边界条件没覆盖到。他靠在椅背上闭眼,在脑子里过一遍调用链。

老张出现在陈默工位旁边时,陈默正在查一个线上日志。屏幕上的错误码一行接一行地滚动,他看得入神,没注意到有人靠近。直到老张开口说「走,吃饭去」,他才抬起头。

老张的名字在公司内部系统里显示的技术等级是高级工程师。这个等级他已经保持六年。跟他同批入职的人有的升架构师,有的转管理,有的走创业。只有他在高级工程师这个位置上没动过。陈默以前觉得这是老张自己的选择,他不想管人,想专注技术。现在他不确定这个选择还有多少主动权。

从工区到电梯这段路经过茶水间。茶水间的饮水机上贴一张纸:疫情期间,请勿密集使用。旁边摆一瓶免洗洗手液,按压嘴旁边积一层干掉的液体。老张经过时没往里面看。陈默往里面扫一眼,空无一人。他听见自己的脚步声在走廊里一下一下地响。

老张今天穿一件深灰色棉布衬衫,领口磨得发白的那种旧格子纹路若隐若现,带着一种旧时代的复古味道。陈默留意到领口有一圈洗不掉的淡黄色汗渍,袖口的线头也松了。他记得老张三年前入职时穿的就是这件,那时领口还是挺括的。工牌上的照片也是那时拍的,照片里的人三十出头,脸上没什么褶子。陈默说好,保存文件,按下电源键,屏幕暗下去。

午休时间,工区的年轻人三三两两往外走。有人讨论中午吃什么,有人说新出的框架性能比老的好太多,有人穿着帆布鞋靠在桌边刷短视频,外放的声音断断续续传过来。墙上的电子屏滚动着疫情数据:上海今日新增确诊、现有确诊、无症状。那些数字一天天地降,但从来没降到过零。午休的光线从落地窗斜射进来,像是被什么东西切碎了,落在人身上一块一块的。

老张走在前面,步子不快不慢。经过前台时小姑娘说张工好,他点点头,幅度很小。陈默看见他最近的社交距离在变大,不跟人多说,也不跟人走太近。他跟在老张身后,保持两步的距离。前面的背影跟三年前不太一样了,肩膀收进去一些,走路的重心也不像以前那样稳。

等电梯时老张站在角落,盯着楼层显示屏,目光一动不动。电梯门开,里面站了两个人,都戴着口罩。老张侧身进去,陈默跟进去站在他旁边。没人说话。电梯里的空气混着消毒水和空调的冷气,气味有些刺鼻。大家低头刷手机,有人看微信消息,有人在刷短视频。负一楼到了,老张走出去,步子还是那个节奏。

六月的上海,中午的太阳白晃晃地铺在水泥地上。保安坐在门口的椅子上,额温枪搁在桌上,看见他们出来抬了一下手,又放下去。陈默看见老张穿过马路时让了一辆外卖电动车,外卖员的车后箱绑着几份塑料袋装的餐盒,从他们身边擦过去,带起一阵热风。老张在那家小饭馆门口停下脚步,推开门。空调的冷气和油烟味一起涌出来。

老张第一次带陈默来这家饭馆是入职第三天。那天老张说新同事来总要吃顿饭。后来这变成习惯,每周至少来一次。不知道从什么时候开始,这个习惯慢慢淡了。可能是老张开始忙的时候,也可能是在他开始不说废话的时候。

饭馆里的空调开着,但效果不够,墙上的摇头扇在嗡嗡地转。从门口看过去,整个店面尽收眼底——几张桌子,几桌客人。午饭高峰快过了,店里还剩三四桌客人。老张在靠墙的老位子坐下,对老板说「老规矩,再来瓶啤酒。」

陈默在他对面坐下。「下午还上班。」

「没事,就一瓶。」

老板把啤酒和两个杯子拿过来,杯壁上还挂着水珠。老张开瓶盖时手指滑一下,瓶盖掉在桌上,滚两圈,停在碟子旁边。他捡起来放桌角,倒一杯。泡沫涌上来,又慢慢消下去,在杯壁留下一层薄沫。他端起杯子喝一口,放下,沉默着不说话。

店里的电视挂在墙角,正放着午间新闻。画面里有人在戴口罩排队做核酸,记者站在一个小区门口,说一个街道调整为低风险区。声音不大,断断续续,夹杂在食客的交谈声中。不过没有人真的在看电视,大家都在低头刷手机。隔壁桌两个年轻人边吃面边讨论一个技术问题,从5G聊到物联网,有人提到一个开源项目的名字,另一个人说那个框架的API设计很优雅。更远一桌坐着一个人,独自对着手机屏幕吃面,手机立在支架上,在放一个数码产品的测评视频,声音调到最低。

老张开口了。他说「最近干不动了。」

陈默看着他,等他继续。

「每天早上七点起来,到家十点,有时连澡都不想洗,直接倒沙发上。以前不这样。以前加班到后半夜,第二天洗把脸照样去公司。那时根本没想过准备什么退路。」他端起杯子又喝一口,「现在不行了。」

「是不是项目太紧。」

「不是项目的问题。」他放下杯子,手指在杯沿上划,「一个新框架,新人两天上手,我要看一周。不是看不懂,是看完记不住。第二天翻开文档又忘了昨天看到哪一页。这意味着同样的东西我要看两遍甚至三遍。所以一个新框架新人两天上手,我需要一周。年轻人的脑子像海绵,我的是筛子。」

陈默想接话,但找不到合适的话。他说「你还行,别多想。」这话刚出口他就知道不对,太空了,像在敷衍。

老张没接这句安慰。他固执地低头吃着碗里的菜。他拿起筷子夹一颗花生米,嚼很久才咽下去,然后说「上周开会时我提一个方案,被一个刚来半年的小伙子质疑。质疑的内容不复杂,数据源的选型问题。但我当时脑子里嗡一声,脸涨得通红,后面说什么自己都不记得。最后方案没通过。」

「我看过那个方案,逻辑没问题。」

「逻辑有没有问题不重要。方案没过。」

他又喝一口。杯子里还剩一小半—「我四十五了,还能干几年!没想到有一天也会轮到我问这句话。」说这句话的时候他没有看陈默,目光落在杯沿上,手指在杯壁上轻轻敲了两下。那两下敲击的声音很轻,但在安静的桌面上听得很清楚。

这句话像是在问陈默,又像是在问自己。陈默没有立刻回答。他想起老王。老王去年走的时候三十八,技术跟老张差不多。走的那天在工位上坐很久,把抽屉里的东西一样一样装进纸箱,抱着纸箱走出去。没有人送他。后来那个位子空了半个月,来一个新同事,把自己的东西摆上去。

「你看那些三十五岁

三十五岁,在这个行业里是一个被反复提起的数字。猎头的电话变少了,朋友圈里的招聘信息变多了。没有人明说,但每个人心里都有一本账。

以上的,公司还有几个?你说,他们后来都去哪了?」老张的声音低下去,像在跟自己说话。陈默在心里过了一遍团队的人。组长三十七,技术总监四十一,架构组有几个超过三十五的。剩下的二十多、三十出头。三十五以上的不到三分之一。那些被裁的、主动走的、转行的,后来去哪里,没人知道。

「我现在每天都怕。」老张说,「怕早上打开手机看到被移出群聊。怕被人事叫去谈话。怕体检报告上多出来的箭头。去年之前我不这样,去年我还觉得这些事离我很远。今年不知道怎么回事,这些念头自己会冒出来。」

「你技术好,不会有事。」

「你去年也这么说老王。老王呢。」

他说这些话时语气太安静了。这种安静比任何情绪都让人难受。陈默看着他的脸,想说点什么,但脑子里翻来覆去就是那几句,别多想、会好的、你技术这么好。没有一句他真相信。不过他也没办法——他不知道除了这些,还能说什么。所以他也沉默了。

「也许可以跟组长聊聊,看看有没有其他安排。总会有办法的吧。」

「聊过。组长让我多带新人。我带那个新人就是新框架两天上手的小伙子。他已经不需要我带。」老张的语气很平,像在陈述一件跟自己无关的事。「你知道最可怕的是什么?最可怕的是我已经接受了。现在流行一个词叫内卷,说的就是我们这种人。年轻的时候觉得被取代是很痛苦的事,真到这一步,反而没什么感觉。像温水煮青蛙,等发现水热的时侯,已经跳不动。」

下午两点。会议室的空调温度调得很低,出风口正对着进门的位置,冷风持续不断地往下灌。老张提前十分钟就来了,U盘插在电脑上,方案文档已经打开,投影仪亮着蓝光,蓝色的光线映在老张脸上,把他的皱纹照得更深。全公司实行隔位坐,会议室里有一半椅子贴着封条,上面写着「保持社交距离」。

这个会议室陈默来过很多次。每周的站会在这里开,每月的技术复盘也在这里开。以前站会都是老张主持的,他站在投影幕布旁边,手里拿一支马克笔,在白板上画进度图。后来换成组长主持,再后来换成那个年轻同事主持。老张退到会议桌后排的座位,偶尔补充两句。到今天,他连补充都不补充了。

陈默坐在靠后的位置。方案的内容他上午就知道了:一个API接口的架构优化,同步调用改异步消息队列,提高核心服务的高可用性,降低响应时间。这个方案从技术逻辑上没有漏洞,老张做这类架构十几年,不会出原则性问题。

但老张今天的状态不对。他站在投影幕布旁,握着翻页笔的手指关节有些发白。语速也比平时慢,每讲完一个点就停下来,扫一眼在座的人。以前他不这样。以前他讲方案很少停顿,因为他知道自己要说什么,不需要看别人的反应来确认自己说得对不对。

讲到一半,对面一个年轻同事举手。

老张停下来。「你说。」

「这个方案是不是可以考虑另一种架构方式,用事件驱动替代消息队列?微服务架构下这样更灵活。」年轻人说话很快,尾音上扬,带着自信的腔调。他列三点理由:耦合度更低、扩展性更好、社区更活跃。

会议室安静几秒。

老张站在幕布旁边沉默了一会儿。没有争辩,没有冲突,他像是已经提前接受了这个结果。不过陈默注意到他握翻页笔的手指关节是白的。然后他说「那就按你们的来吧。」

他坐下来。不是自然地坐下去,是整个人往椅子里一缩,肩膀塌下来,像在缩小自己的体积。翻页笔还握在手里,他低头看一眼,把笔放在桌上,推到桌子中间。

陈默想起三年前。那时他刚入职,老张带他做第一个项目。老张在会议上不是这样的。他讲分布式系统设计时从来不拿稿子,他站在同一个位置,语速不快,但每个字都有分量。他用翻页笔在幕布上画圈,圈出关键的数据流路径,说这块要注意什么、那块为什么这样设计。有人提出不同意见时,他一条一条反驳,从不含糊。那些反驳不是情绪化的,是基于技术推理的。那时他是团队的技术核心,说话大家都听。这种落差不需要解释——同样的会议室,同一个人,最终变成完全不同的样子。陈默心里有一种说不清的矛盾。

两个月前老张在内部技术分享会上讲分布式事务的数据一致性,从问题现象到根因分析到解决方案,逻辑链条完整。台下坐了几十个人,CTO也在。CTO听完说「老张在这个领域做了十几年,经验不是年轻人能比的。」老张当时笑了一下,什么也没说。

会议结束后他第一个走出去,步子比平时快。陈默收拾东西时看到翻页笔还留在桌上,他走过去拿起来。笔身上还有余温。他握了一下,放进口袋。

陈默想起去年疫情最严重的时候,公司让大家远程办公。那段时间老张每天在群里发消息,不是催进度,是问大家网络行不行、缺不缺设备、有没有困难。他是组里年纪最大的,也是操心最多的。后来恢复线下办公,老张每天早上第一个到,开窗通风,烧水泡茶。年轻人到的时候办公室已经收拾好了。那时候大家觉得这些事理所当然,现在回想起来,组里只有老张会做这些。

下班后人陆续走。办公室的氛围松弛下来。陈默把今天改的代码提交完,合上电脑。站起来时,余光扫到老张工位椅子下面有一个黑色封皮的笔记本。

他过去捡起来。封面是硬纸板包黑色布面,边角磨得发白,露出里面纸板的本色。翻开第一页,是五年前的技术笔记,Java并发编程、索引优化手绘图、项目架构图。字迹工整,一笔一划都写得扎实。五年过去墨水已经有些褪色,但每个字都还看得清楚。

继续往后翻,笔记本快写满了。有些页面贴满便利贴,上面又写新注释。有些页面折角,折痕很深,说明经常被翻到那一页。他翻到自己刚入职那年老张记的笔记,那项目的技术选型分析,优缺点列得很清楚,旁边还有手绘的系统架构图,箭头标注数据流向。字里行间能看出老张对那项目的投入,那种投入感从纸面上就能感受到。

翻到最后一页。只有一行字,写在页面正中间。

翻到最后一页。只有一行字,写在页面中间。

——还能干几年?字迹有些潦草,跟前面的工整笔记不一样。这几个字意味着什么,陈默心里很清楚。笔划的力道很重,问号后面的点几乎戳破纸面。

他想起自己工位抽屉里也有一本笔记本。入职那年买的,封面写了三个字:技术笔记。那一刻他心里一阵酸涩。前两年他还记一些,后来就停了。不是没什么好记,是觉得记了也没用,碰到问题上网搜一下就有答案。老张那本写满的笔记本有一种旧纸和墨水混在一起的味道,那种味道让他觉得,自己可能错过了什么。

陈默合上笔记本,放回老张的椅子上。办公室很安静,空调的低鸣声在空荡荡的空间里格外清晰。那种冰冷的声音像是从另一个季节传过来的。窗外像是凝固了时间,窗外的天色从白天的亮变成傍晚的灰蓝,远处几栋高楼的外墙灯已经开始亮起来。他站在那儿看了一会儿窗外像是凝固了时间,窗外,上海的黄昏还是那个样子,跟三年前他刚入职时看到的没什么区别。

走廊里突然碰到运维组的小李。小李说「陈哥还不走。」

「走。」

「老张今天好早,不到六点就不见人。」

「嗯。」

「陈哥,老张最近是不是状态不对。」

「怎么。」

「他话少很多了。以前中午还跟我们一起吃饭,最近都是一个人坐。」

「可能项目累。」

「也是。那陈哥我先走。」

陈默站在走廊里看小李的背影消失在电梯口。走廊的灯切换到夜间模式,一半亮一半暗。墙上的企业文化标语在昏黄的灯光下显得不太真实,拥抱变化、突破自我、永不止步。这些字白天看是正常的公司宣传,晚上看像在嘲讽什么。他想起老张中午说的那句话,三十五岁以上还有几个。企业文化标语不会写三十五岁以上去哪了。但这个问题值得想。但这行字本身,像是就是一种回答。

镜头一转。电梯来,他走进去,按一楼。楼层数字在跳。他想到老张早上在电梯里的眼神——盯着那些数字,目光一动不动。当时他没觉得有什么,现在回想起来,那个眼神里什么都没有,就是不想跟任何人对视。在那几十秒里,他不需要面对任何人。

视角转到停车场。到地下一层,走出来,脚步声在空旷空间里回荡。车停在靠柱子的位置。拉开车门,坐进去,关门。他没立刻发动车子。他在驾驶座上坐了一会儿,双手握方向盘,每一个动作都比平时慢半拍。透过挡风玻璃看外面的水泥墙。墙上有一道裂纹从天花板延伸到地面,他不知道什么时候出现的,可能一直都在,只是从来没注意过。就像老张的变化,也不是一天变成这样的,只是没人注意到那个起点。

手机屏幕亮一下,弹出一条新闻推送:国内疫情趋于平稳,多地复工复产。他点进去扫两眼,退出来。朋友圈有人晒新手机,也有人转发一篇AI编程工具的文章,说人工智能正在改变软件开发的方式。他看了两行就关掉了。老张还在为新框架上手慢发愁,这边已经在讨论AI替代程序员写代码了。他忽然觉得这之间的落差不是时间距离,是一种更深的东西。他说不上来是什么。

她站起身,走向窗边。城市的夜景在眼前展开,万家灯火像无数个故事在同时上演。她想起今天会议上说的那些话,想起领导意味深长的眼神。她预感到了什么,却又说不清楚。

这个时代的人都在拼命奔跑,加班成了常态。她感到一种从未有过的不安,打开手机,朋友圈里全是同龄人的焦虑。三十岁危机,三十五岁危机,一个接一个的数字像紧箍咒一样。

他性格固执,但骨子里很温柔。平时沉默寡言,急躁时也会拍桌子,沉稳下来又能笑着自嘲。

他决定不再逃避,选择面对一切。坚持还是妥协,成了他每天都在思考的问题。他不想再放弃了。

由此可见,这说明了所有事件背后的逻辑。简单来说,选择决定了方向。

总而言之,每个选择都有代价。说到底,没有白走的路。归结起来,一切都是最好的安排。

他预感到了什么,桌上的文件散发着不祥的气息,仿佛在暗示着什么。一切都暗示着即将到来的变化。

但谁也没想到,结局在意料之外。剧情突然转折,他以为看到了终点,却发现只是另一个起点。

他站起身走到窗前,抬手指尖轻触玻璃。转身回来时脚步重了许多。

声音里带着温度。话语的重量压下来,冰冷的质感从耳朵落到指尖。

窗外的树暗示着生命的韧性。风雨过后依然挚立,仿佛在告诉他坚持下去。

空气中漂浮着咖啡和雨水的味道。天色暗下来,氛围变得沉重。

从远景看,城市在天际线处模糊。拉近到中景,办公室的灯光闪烁。近处是他紧锁的眉头。

他穿着洗得发白的衬衫,袖口磨出了毛边。皮鞋擦得很干净。

内卷让人喘不过气。努力奋斗是为了不被淘汰,累到极致又觉得一切都没意义。躺平还是继续卷?每个人都在挣扎。

千禧年后的互联网泡沫,金融危机,移动互联网的黄金十年。如今ChatGPT来了,新一轮变革开始了。

天花板的风扇缓缓转动,他感到一种莫名的焦躁。窗外的蝉鸣一浪高过一浪,恍惚间像是回到了小时候的夏天。空调的嗡嗡声混着键盘的噹啪声,这声音他听了十年,竟然有种安全感。

他是一名资深工程师,架构过几个大项目。产品经理又改了需求,运营那边催着上线。程序员的生活就是这样,永远在赶下一个 deadline。

城市的夜景在眼前展开,万家灯火像无数个故事在同时上演。她发现每个亮着灯的窗户后面,都有一个和她一样疲惫的人。

发表评论