编译通过的那一刻,窗外的枫叶已经落了很多年

夜晚的上海很安静。

不是真的安静——楼下偶尔驶过的车,空调外机的嗡鸣,还有隔壁租户关门的声音。但对于一个已经习惯了这些的耳朵来说,这就是安静。

我盯着屏幕上跑了二十分钟的测试用例,看着进度条一格一格地走,忽然不知道该干什么了。工作之后最常出现的就是这种感觉:不忙,但也不充实。该学的东西不在公司的文档里,要做的事情没人告诉你怎么做。你坐在工位上,像一个被初始化了但还没有被调用的对象。

耳机里在放一首很老的钢琴曲,叫《樱花泪》。

我第一次听到它是在交大。那时候兴庆校区的枫叶正红,落叶铺了一地,踩上去沙沙的,像踩在什么易碎的东西上面。


一

我不太愿意提起我的高中。

准确地说,是不太愿意提起随州一中。襄阳四中可以提,那是我复读的地方,待了一年,干干净净,考完就走。但随州一中不行。

高中的时候我性格太张扬了。张扬到什么呢——大概就是在一个人人都低着头赶路的年纪里,我偏偏要仰着头走路。这在一个小城市的重点高中里,不是什么好事。

有人中伤我,编造一些莫须有的事。老师选择不作为,或者说,他们觉得这不重要。在一个以升学率为唯一KPI的系统里,一个学生被孤立了,算什么?只要你的成绩不拖累平均分,你在这个教室里的感受,不在他们的考核范围内。

第一年高考,分数刚过985线。

够不上想去的地方,但也不至于重来。很多人劝我”算了,走吧”。但我知道那个分数不是我的真实水平——那是被消耗了三年之后的残余。

所以我选择了复读。从随州到了襄阳四中,换了一座城市,换了一间教室,换了一批不认识的人。那一年我学会了闭嘴,学会了把自己藏起来。

也是那一年,我不再相信乌托邦了。

曾经我觉得学校应该是一个讲道理的地方,老师应该是公正的,同学应该是善意的。后来我发现不是。或者说,不全是。在一个足够小的环境里,恶意的成本极低,而沉默的成本更低。

后来我再也没有回去过随州一中。有人问起我的高中,我说襄阳四中。他们追问之前呢,我就笑笑,不说了。

那所学校不在我的记忆里。它只是我人生中的一个异常——被 try 包裹了,catch 了,然后 finally 里写了一句 return,头也不回地走了。


二

交大的秋天,枫叶是出了名的。

每年十一月,兴庆校区那些藏在角落里的枫树悄悄红了。叶子从绿变黄再变红,层层叠叠地挂在枝头,风一吹,就旋转着落下来,像一封没有收件人的信。学生们从林荫道上去上课,落叶铺了满地,踩上去沙沙作响。

我大一下学期进的越杰计划计算机班。笔试加面试,从一堆人里筛出来。那时候我还挺高兴的,觉得自己终于到了一个可以重新开始的地方。

然后我开始学打字。

是真的从零开始学打字。在此之前,我对计算机的全部认知停留在高中信息课上用 Word 写实验报告。别人大一已经在刷 LeetCode 了,我在练习怎么让手指正确地落在 F 和 J 那两个有小凸起的键上。

后来我常想,计算机这个专业对我来说意味着什么。它不是我从小热爱的东西,不是我少年时的梦想。它更像是一扇门——我走到它面前,不是因为我知道门后面有什么,而是因为我不想留在原来的房间里。

头两年过得浑浑噩噩。大一刚入学没多久就赶上了新冠疫情,课全搬到了线上。腾讯会议、Zoom、雨课堂,一天换一个平台,屏幕里的老师嘴在动,你在宿舍的床上躺着,中间隔着一千公里的光纤和一个谁也看不见谁的摄像头。

封校的日子漫长得没有尽头。不能出校门,不能去网吧,连操场都限流。食堂的饭吃来吃去就那几样,外卖只能送到校门口,取一趟像出差。日子被压缩成一种循环:起床、上线、挂机、吃饭、刷手机、睡觉。第二天醒来,和昨天一模一样。星期几已经不重要了,月份也不重要了,只有健康码的颜色还在提醒你:你还在一个有规则的世界里。

人和人之间的距离变得很奇怪。室友就在你两米之外,但你们各戴各的耳机,各上各的网课,一天说不上十句话。线上的社交更是脆弱——你在群里发了一段话,没人回,就像对着空气喊了一声。慢慢地你就不想说话了。

当然也有我自己的原因。高中那几年消耗掉的东西,不是换一所大学就能补回来的。我还没有从过去的那种疲惫里走出来,就已经要开始面对新的迷茫了。疫情只是给了这种迷茫一个完美的容器——反正大家都这样,反正不是你的错。

大三的时候我开始规划出国。考托福、准备材料,暑假去了新加坡国立大学交换。

在 NUS 的那个暑假,是我人生中最拼的一段时间。为了拿 A,为了拿到导师的推荐信,我连续熬了一个星期,其中有两天是完全没睡的。到后来心脏开始疼,那种闷闷的、像被人用手攥住一样的疼。

我停下来对自己说:以后绝对不再这样了。

那大概是我第一次真正理解了”加班”这个词的重量。它不是简历上的”抗压能力强”,不是你发朋友圈时配的那杯凌晨的咖啡。它是你的心脏在胸腔里一下一下地、用疼痛提醒你:你是一个肉体,不是一台机器。

后来我遵守了这个承诺。工作之后,到点就走,绝不恋战。同事觉得我佛系,但我自己知道,那不是佛系,那是我用两天的心脏疼痛换来的清醒。


三

本科期间我见过一些精致的人。

我的一个室友,是那种典型的老实人——干最累的活,做最多的贡献,拿最少的回报。而那些精致的利己主义者呢,他们精准地计算着每一分投入产出比,在该出现的时候出现,在该消失的时候消失,最后拿着漂亮的简历去了清华。

我那个室友后来去了 UC Irvine。不是不好,只是不够好——不够匹配他付出的那些。

还有一件事让我至今耿耿于怀。越杰计划有一个出国费用报销的政策,我想申请。但我的绩点差一点,于是去问行政老师,能不能有其他办法。对方的回答是:你大四暑假再参加一个交换项目,就够了。

大四暑假。我都快毕业了。

那一刻我忽然明白了——有些规则不是用来执行的,是用来筛选的。它的存在不是为了让你达成条件,而是为了让你在发现条件不可能达成之后,自己选择放弃。

我带着一种说不清的心情去了香港大学。不是怨恨,更像是一种降温。我对很多东西的热情在那个节点上又降了几度。


四

香港的学费很贵。

为了省钱,我在学校附近找了一间唐楼。五平米,月租五千港币。五平米是什么概念呢——一张架子床,一张课桌,一个转身的空间。床和桌子之间只够站一个人,再多的东西就只能往床上堆。

每天晚上从学校走回去,穿过那些亮着霓虹灯的窄巷,爬上一栋没有电梯的老楼,打开门,把自己塞进那五平米里。

窗外能看到对面的建筑工地。工人们穿着反光背心,在脚手架上爬上爬下。到了傍晚六点,他们就消失了,工地安静下来,只剩下塔吊孤零零地立在那里。

而我还要在夜色里应付繁杂的课程和看不到尽头的求职。

我有时候想,我和那些建筑工人有什么区别呢?进了学校我是大学生,进了这间出租房,我和他们一样,都是用体力换明天的人。唯一的区别是,他们八小时之后就下班了,而我的”班”从来没有下班时间。

那些日子里,《樱花泪》是我少数几个固定的习惯之一。回到那五平米的房间,打开电脑,戴上耳机,按下播放。钢琴声从第一个音开始就很安静,像有人在很远的地方轻声说话。

没有歌词,不需要理解,不需要回应。

在那个什么都要精打细算的阶段里,一首免费的钢琴曲,大概是我能负担得起的最奢侈的东西了。


五

现在我在上海,做 AI 应用工程师。

说是 AI 工程师,其实每天的工作和很多人想象的不太一样。不是那种科幻电影里对着全息投影指挥神经网络的样子。更多的时候是对着终端看日志、调接口、写 prompt、跑测试、等结果。然后发现结果不对,再回去看日志。

工作内容本身倒还好,算是能应付。但说实话,在公司学到的东西有限。真正在成长的部分,都是自己私下里补的——看论文、读源码、搭 demo、追最新的框架。

这大概就是这个行业的宿命:技术迭代太快,公司永远在用上一代的方案,而你只能用自己的时间去追下一代。

所幸工作不算太忙,我有了自己的时间。

可有了时间之后,我却不知道该怎么花了。

以前我是那种每天打游戏打到很晚的人。LOL、DOTA、各种单机,能从晚上八点打到凌晨两点,第二天还能精神抖擞地去上课。那种纯粹的、不需要理由的快乐,现在怎么都找不到了。

不是不玩了。是打开游戏之后,玩了十分钟,就觉得没意思了。不是游戏变了,是我变了。

儿时的玩伴也越来越远。以前过年还会聚一聚,后来连群聊都沉了底。偶尔刷到他们的朋友圈——有人结婚了,有人买房了,有人晒娃了——点一个赞,算是打过招呼。

大学四年也没怎么娱乐。篮球不打了,乒乓球不碰了。儿时就会的钢琴和围棋,也渐渐生了灰——手指还记得键位,棋子还记得定式,但那种坐下来弹一曲、摆一盘的兴致,不知道什么时候就没了。

我有时候觉得自己的青春好像定格在了高二升高三的那个夏天。

那个夏天之前,我还是一个相信世界是公平的人。会为一场球赛激动,会因为解出一道数学题开心半天,会觉得未来是一条笔直的、向上的路。

那个夏天之后,一切都变了。路还是那条路,但走路的人不一样了。脚步还是那个脚步,可心里多了很多东西,多到走起来有点沉。


六

《樱花泪》这首曲子,是一个叫 Snigellin 的人在 2016 年写的。据说当时他还是个高中生。

一个高中生写出这样的曲子,我是服气的。那种安静不是装出来的,是少年人特有的、还没有被磨损过的敏感。你听他弹到中间那一段,旋律忽然变轻了,像花瓣从枝头脱落,在半空中停了一下,然后慢慢地、慢慢地落下去。

那不是悲伤。悲伤是有力量的,是往下坠的。而这首曲子中间的那段安静,更像是某种东西在消散。你说不清它是遗憾还是释然,只觉得有什么东西从你身体里飘出去了,你伸手抓了一下,没抓住。

交大的枫叶我也是见过的。红得最盛的那几天,整条路都是金红色的,站在树下仰头看,叶子密密匝匝地叠在一起,阳光从缝隙里漏下来,打在脸上。

然后风来了。

叶子就开始落。不是一片一片地落,是一阵一阵地落。像下了一场无声的雨,旋转着落在你的肩上、头发上、鞋面上。你站在那里不动,过一会儿,地上就铺了一层。

那是很美的。

但美这个东西,你在经历的时候往往意识不到。我当时只是觉得”挺好看的”,然后拍了一张照片发朋友圈。直到很多年后,在上海的某个深夜,耳机里响起了这首曲子,我才忽然想起那个画面。

原来那就是枫叶。它不是为了让你拍照发朋友圈才红的。它绿,然后红,然后落,明年枝头又会长出新的。每一年红的时候和落的时候,你都以为和去年一样,但其实每一年看叶子的人,都已经不一样了。


七

做 AI 应用有一个很有意思的地方——你在教机器理解人。

我们写 prompt、做 few-shot、调 RLHF,说到底都是在试图告诉一个统计模型:人是什么。人的喜怒哀乐是什么,人在什么时候需要安慰,什么时候需要被推一把。

你把人类几千年积累的语言和情感,压缩成几千个 token 的上下文窗口,然后期待它能在 0.3 秒内给出一个”恰当的”回应。

这件事本身就很荒谬。但也正因为荒谬,它有一种奇特的美。

就像你明知枫叶红了就会落,但你每年还是会去看。

我做的 agent 有时候会说出让我意外的话。不是那种”哇好聪明”的意外,而是一种更微妙的东西——它用了一种你想不到的措辞,在一个你预设了答案的场景里,给出了一个更温柔的回答。

那一刻我会想:这些东西是从哪来的呢?是从训练数据里来的。是某个我从未谋面的人,在某个我不知道的时间和地点,写下了那些文字,被收集、被清洗、被喂进了模型,最终在一个深夜,由一个概率分布重新组合成了这句话。

那些写训练数据的人,他们大概也不知道自己写的东西会以这种方式被复用。就像 Snigellin 不知道他在 2016 年写的钢琴曲,会在十年后被一个上海的程序员在深夜反复循环。

但这种”不知道”本身,大概就是一种浪漫。

你不知道你写下的东西会被谁看到,你不知道你留下的善意会被谁继承,你不知道你今天随手种下的一棵树,十年后会给谁遮荫。

你不知道,但它就是会发生。


八

有时候加完班走出写字楼,上海的风从黄浦江的方向吹过来,带着一点潮湿的味道。

我会站在路边发一会儿呆,看着那些亮着灯的窗户想:那些窗户后面的人,是不是也在加班?是不是也在等一个跑不完的测试用例?是不是也在听一首不知道名字的钢琴曲,想着一些不知道有没有意义的事情?

这座城市有一千万个人,一千万种疲惫,一千万种各自的坚持。

我不知道他们每个人的故事。但我知道,能在这个时间还亮着灯的,大概都是不愿意将就的人。

我也不愿意将就。虽然我的”不将就”已经从高中时候的张扬,变成了现在这样——安安静静地做好手头的事,到点下班,回到自己的房间,戴上耳机,听一首安静的曲子,想想白天没有想完的事。

这看起来和”躺平”没什么区别。但只有我自己知道,这不是躺平。

躺平是放弃了。而我还在这里。

我还在学新东西,还在写代码,还在思考明天的方向。只是不再像以前那样大声宣告了。不再张扬了,不代表不再认真。不再表达了,不代表不再在乎。

就像《樱花泪》中间那段安静——不是没有旋律了,是旋律沉到了水面以下,你看不到它,但它还在流。


九

如果让我用代码来描述自己的这几年,大概会是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class Logic:
def __init__(self):
self.beliefs = set(["世界是公平的", "努力会有回报", "学校是象牙塔"])
self.hobbies = ["篮球", "乒乓球", "钢琴", "围棋", "游戏"]
self.innocence = 1.0

def high_school(self):
try:
self.live_authentically()
except BetrayalError:
self.beliefs.discard("学校是象牙塔")
self.beliefs.discard("世界是公平的")
self.innocence *= 0.6
self.transfer(to="襄阳四中")

def undergrad(self):
self.major = "Computer Science"
self.learn_typing(from_scratch=True)
self.pandemic_mode(years=2) # 浑浑噩噩
self.beliefs.discard("努力会有回报") # 在行政办公室门口
self.innocence *= 0.7

def exchange_at_nus(self):
for day in range(7):
self.study(hours=20)
if self.heart.pain() > self.threshold:
self.promise("以后不再加班")
break

def masters_at_hku(self):
self.room = Room(size_sqm=5, rent_hkd=5000)
self.observe(construction_workers)
# 进学校是大学生,进出租房和建筑工人无异
# 区别是他们有下班时间,我没有

def now(self):
"""上海,AI 工程师,2026"""
while True:
self.work() # 还算满意
self.learn_alone() # 公司教不了的,自己学
self.listen("Sakura Tears")
if self.mood == "nostalgic":
self.remember("那个夏天")
# 青春定格在高二升高三的那个夏天
# 就算还有什么,也失去了曾经的淳朴

这段代码有一个问题——innocence 只减不增。

但真实的人生不是这样的。真实的人生里,那些被消耗掉的东西会以另一种形式回来。不是以”纯真”的名义,而是以”理解”的名义。

你不再天真了,但你开始能理解别人的天真。你不再轻易相信了,但你学会了在值得信任的地方交付信任。你不再觉得世界是公平的了,但你可以在自己的小世界里,尽量做一个公平的人。

这不是成长。这是交换。

你用纯真换来了清醒,用张扬换来了安静,用一整个少年时代的横冲直撞,换来了一种——

怎么形容呢——一种在深夜听钢琴曲时才会出现的、平静的、不悲不喜的、”也好”。

也好。

就这样也好。


十

曲子弹到最后的时候,有一个很轻的尾音。

不是戛然而止的那种结束,而是慢慢地、像呼吸一样地淡出去。你甚至不确定它是什么时候停止的。等你反应过来的时候,耳机里已经只剩下了底噪。

我有时候想,如果有一天我能回到交大,在枫树下走一趟,我会是什么感觉?

大概不会有什么特别的感觉了。不是因为我变冷漠了,而是因为我已经过了那个需要借景抒情的年纪。

现在的我,更习惯用代码说话、用数据说话、用结果说话。写一篇文章对我来说反而是一件不太自然的事——就像让一个习惯了键盘输入的人重新拿起笔写字,笔画是对的,但手感不对了。

可是今晚,我还是想写点什么。

不为什么。就是忽然觉得,有些东西如果不记下来,就真的会像那些枫叶一样,风一吹,就散了。

不是所有落叶都需要落在地上。有些会落进水里,顺着溪流漂到很远的地方,被一个完全不认识的人捡起来,夹在书页里。

多年以后他翻开那本书,叶子已经干了,薄得几乎透明。但他还记得,某一个秋天,某一阵风,某一棵树。

那就够了。


保存文件。

提交代码。

关灯。

1
2
3
$ git add .
$ git commit -m "add: 编译通过的那一刻,窗外的枫叶已经落了很多年"
$ git push origin main

明天还要上班。

晚安。