那年的雨季来得特别早。图书馆三楼靠窗的位置,能看见香樟树的新叶被雨水洗得发亮。我摊开《C++ Primer》,光标在屏幕上闪烁,像一只犹豫的萤火虫。键盘敲击声里,我总想起老家沙湾的雨季——父亲在屋檐下修犁头,铁锤敲打生铁的声音,和此刻的键盘声竟有些相似。
说实话
我是从沙湾考出来的。全村第一个学计算机的。父亲送我上车时说,学这个好,在城里敲敲键盘就能赚钱。他想象不出,我敲打的不是实体的键盘,而是一串串会发光、会流动的字符。就像他想象不出,雨季的沙湾和雨季的大学有什么区别。
直到遇见林小雨。
她坐在我对面,读的是文学院。笔记本摊开,钢笔尖在纸上游走,沙沙声像春蚕食叶。有次我的咖啡打翻了,她递来一包纸巾,指尖沾着蓝黑色墨水。“你在写代码?”她问,眼睛亮得像刚被雨水洗过的香樟叶。
我说是。她笑了:“听起来很浪漫。”
浪漫?我第一次听见有人用这个词形容编程。她说,你看,你在创造一种语言,让机器听懂你的心思,这难道不浪漫吗?就像诗人创造意象,让文字承载无法言说的东西。坦白讲
嗯…
那个下午,我们聊起了各自的雨季。她说她来自江南,雨季时石板路会泛起青苔的光。我说我来自沙湾,雨季时稻田会变成一面面破碎的镜子。她突然说,那你可以写一个程序,模拟沙湾的雨季。
于是有了“雨季模拟器”。我用OpenGL画稻田,用粒子系统模拟雨滴,用Perlin噪声生成云层的变化。林小雨帮我写场景描述:“雨滴落在稻叶上,碎成更小的珍珠,顺着叶脉滚落,汇入田垄的褶皱里。”我把这些句子变成注释,嵌在代码之间。
// 雨滴碰撞检测 - 像林小雨说的,碎成珍珠
// 叶面法向量计算 - 她形容的叶脉走向
// 水纹扩散算法 - 田垄的褶皱,记忆的纹理
程序跑起来那天,图书馆窗外真的在下雨。屏幕上,沙湾的雨季缓缓展开。稻田青绿,雨丝斜织,远处山峦淡得像水墨。林小雨轻声说:“你看,你的代码在呼吸。”
那一刻我突然明白,父亲修犁头时敲打的,和我敲打键盘时创造的,其实是同一种东西——都是试图在无常的世界里,留下一点确切的形状。犁头翻开土地,代码展开世界。雨季会过去,稻子会收割,程序会关闭,但那个下午,两个年轻人用各自的语言,共同虚构了一场永不结束的雨季。
后来林小雨去了南方一家杂志社。我留在北京写代码。我们很少联系,就像雨季过后,香樟树依然绿着,但雨已经停了。
上个月,公司新来的实习生指着我的屏幕说:“师兄,你这个注释写得好美。”那是我三年前写的“雨季模拟器”,早已不再维护,但注释还在。实习生念出声:“雨滴落在稻叶上,碎成更小的珍珠……”
我突然想起林小雨的钢笔尖,想起父亲屋檐下的铁锤声,想起图书馆窗外被雨水洗亮的香樟叶。原来所有的创造,最终都会变成另一种形式的注释——在时间的源代码里,标记那些我们曾经认真活过的证据。
窗外又下雨了。我关掉IDE,打开一个空白文档。光标闪烁,像雨季里第一滴犹豫的雨。
或许这次,我该试着写写别的东西。