2006年4月。
清华的春天更深了。樱花已经谢了,但槐树开始冒花苞——小小的,白的,挂在枝头,像米粒。林智每次路过槐树的时候都会停下来看一眼。他在等槐花开——苏念说过,槐花开的时候,要一起回去看。
爬虫已经跑了两周了。
他优化了代码——加了多线程,一次可以同时访问五个网站。每天早上起来,他先打开电脑,看看爬虫跑了一晚上抓了多少新数据。然后晚上睡觉前,再让它跑一晚上。
他给爬虫写了一个简单web界面——一个页面,显示当前的进度:已抓取URL数、新发现桥数、待处理数据量。页面是白底的,上面只有数字,没有多余的装饰。张锐看了之后说你这页面太丑了。林智说能用就行。张锐说能用和好看不冲突。林智想了想,加了一行cSS——让字体变成蓝色。张锐说还是丑,但没再管了。
两周时间,古桥数据库从412座增加到了438座。其中网络抓取贡献了20座,从书里整理了6座。他算了一下,如果爬虫持续跑下去,每个月大约可以增加60座。到年底,数据库就能突破500座。
他在苏念送的笔记本上写了一行:目标:2006年底,古桥数据库500座。
四月五号,他收到了一封邮件。
程彻的。
林智: 我后天来北京。坐火车。t98次,下午两点到北京站。 你有空的话,来接我。 没空的话也没关系——我自己能找到清华。 ——程彻
林智回了一封邮件:我去接你。
四月七号。周五。
林智坐公交车去了北京站。
北京站还是那个样子——大钟楼,灰色的建筑,出站口挤满了人。他站在出站口外面,看着人一群一群地涌出来——有拖着行李箱的,有背着包的,有抱着小孩的。每个人脸上都是终于到了的表情。
他等了一会儿,没看到程彻。
又等了一会儿。
然后他看到一个人——瘦高,戴眼镜,背着一个大书包,手里拎着一个塑料袋——从出站口走出来。他走路的姿势很慢,像在数步子。
程彻。
林智招了一下手。
程彻看到了他,也招了一下手。
他们走近了。
你胖了。程彻说。
没有。
胖了。
你瘦了。
嗯。高三了,瘦了。
程彻看起来确实比以前瘦了——脸上的轮廓更分明了,眼镜的镜片好像也更厚了。但他说话的样子没变——慢悠悠的,像在思考。
你学校怎么样?林智问。
还是那样。上课、做题、考试。八中。每天早上七点半上课,晚上九点半下晚自习。
累吗?
累。但习惯了。程彻说。你知道最累的是什么吗?不是做题。是——你做完了一套卷子,发现还有三套等着你。
你后来——考过第一吗?
程彻看了他一眼。
你走了以后,我考过一次。他说。年级第一。但那个第一——没意思。
为什么?
因为你不是在跟我比。你是——在跟自己比。我在八中三年,从来没见过你复习。你上课听,下课就走。但你每次考试都是第一。所以我就知道了——你走的不是跟别人一样的路。
林智没说话。
走吧。他说。带你去清华看看。
他们坐上了320路。程彻坐在靠窗的位置,看着窗外的北京。
北京比我想象的大。他说。也比我想象的灰。
春天好一点。冬天更灰。
你习惯吗?
什么?
北京。
林智想了想。习惯了。住了快一年了。
程彻点了点头。
他们到了清华。林智带他去紫荆公寓——他跟陈明远商量过了,可以让程彻在宿舍住两天,打地铺。陈明远说没问题,反正我打地铺也能睡。
程彻放下行李,洗了一把脸。他环顾了一下宿舍——四张床,四张桌子,书架上堆着专业书,窗台上放着一盆绿萝。
你宿舍——比八中的好。
林智没说话。他拉开窗帘,窗外能看见操场。傍晚的阳光斜着照进来,落在地板上一道长长的金色的光。远处有人在跑步。
晚上想吃什么?林智问。
随便。
清华的食堂——比八中好。
程彻想了想。那就去尝尝。
你做的那个数据库——我能看看吗?程彻问。
现在?
嗯。现在。
林智带他去了机房。
FIt楼。三楼的机房。周六,没什么人。林智打开一台电脑,输入密码,打开了microdb。
这是存储引擎——b+树。这是查询引擎——解析器。这是ApI层。
程彻坐在电脑前面,看了很久。
你把b+树的分裂写在这里?
我能看看吗?
可以。
程彻打开了b+树的代码,一行一行地看。他看得不快,但很仔细。有时候停在一行上,像在思考。有时候滚动回去再看一遍。林智坐在旁边,等着他看完。
你这里——他说。
分裂的时候,你用的是先复制再删除的策略。但b+树的分裂标准做法是——先创建一个新节点,然后把一半的数据移过去。
我做了。你看后面。
程彻往下翻了翻。
哦。看到了。你用了一个临时数组。
为什么用临时数组?
因为——不用的话,数据会覆盖。
程彻想了想。
你试过不用临时数组吗?
试过。跑不通。
跑不通——那是因为你的指针操作有问题。不是算法的问题。
林智愣了一下。
你——
我看了十五分钟。程彻说。你的代码我没完全看懂。但我能看出来——你有自己的想法。不是照着课本写的。
你的b+树分裂策略——跟课本上的不一样。课本上是先分裂再插入。你是先插入再分裂
因为——
因为你觉得先插入再分裂更直观。
程彻看着他。
林智。
你写的代码——跟别人写的不一样。不是好坏的问题。是——思路不一样。
什么意思?
我不知道。程彻说。但你的思路——不是学出来的。是——你想出来的。
林智没说话。
程彻也没继续问。他翻到爬虫的代码,看了一会儿。
这个爬虫——你自己写的?
用libcurl?
你学过libcurl?
没有。看文档学的。
程彻点了点头。
你学东西很快。
还行。
不是还行。是很快。我学libcurl用了一个星期。你用了多久?
两天。
程彻看着他。没说话。
他关掉了代码编辑器,转过来看着林智。
你以后——打算做什么?
做系统。
什么系统?
数据库。或者——跟数据有关的。还没想好。
程彻点了点头。
我明年考清华。
来计算机系?
到时候——我们一起做。
林智看着他。
程彻的表情很认真。不像是在说随便聊聊——像是在说我决定了。
做什么?林智问。
做你说的系统。程彻说。你写引擎。我写工具。咱们一人一半。
你怎么知道你考得上?
程彻沉默了一会儿。
因为——如果考不上,我就复读。直到考上为止。
林智看着他。他没笑。他知道程彻是认真的。
程彻没再说什么。
他们两个坐在机房里,安静了一会儿。窗外的阳光照进来,照在键盘上,照在屏幕上。四月的阳光,不冷也不热。
你饿了吗?林智问。
饿了。
去吃饭。
去哪吃?
听涛园。牛肉面。
他们走出FIt楼。外面阳光很好。程彻眯着眼睛,看了看清华的天。
这里真好。他说。
哪里好?
安静。
林智觉得他说得对。
晚上。宿舍。
陈明远、张锐、林智、程彻——四个人在宿舍里坐着。陈明远说难得有客人,一起去撸串。
他们去了五道口的一家烤串店——陈明远推荐的,说这家的羊肉串是清华附近最好吃的。
店里不大,但人很多。有学生在喝酒,有人在划拳——五魁首啊六六六。空气中全是烤羊肉的烟熏味,混着孜然和辣椒的气味。墙上贴着菜单——羊肉串两块五一串,鸡翅三块,啤酒两块。
四个人围着一张桌子坐下。陈明远先要了四十串羊肉、十串鸡翅、一盘毛豆、一盘花生。
你叫程彻?陈明远问。
你跟林智是同学?
初中同学。
八中少年班的?
那你也是天才了?
程彻想了想。
不是。他是天才。我不是。
林智没说话。他拿起一串羊肉,咬了一口。
陈明远不信。那你怎么考得上八中少年班?
我跟他不一样。程彻说。他是生下来就会的。我是学了很久才会的。
学什么?
计算机。
学到什么程度了?
b+树。红黑树。动态规划。图算法。trie树。线段树。
张锐听到线段树的时候,抬头看了程彻一眼。
线段树——你写过?
写过。区间查询,区间修改。
性能怎么样?
log n。
张锐点了点头。那已经很厉害了。
没有他厉害。
程彻说的时候,看了一眼林智。
林智没接话。他低头吃串。
但他在想——程彻看到了他的代码。程彻说你的代码跟别人不一样。程彻还说你是生下来就会的。
程彻是不是开始怀疑了?
他不知道。
他不想知道。
你们以前在八中——陈明远问。林智是什么样的?
程彻想了想。他不说话。上课就听。下课就走。有一次,老师出了一道题——全班没人会。他走到黑板前面,写了三行。然后就走了。
三行?
嗯。三行。答案是对的。
陈明远看了看林智。
你——真的是天才?
不是。林智说。我就是会一点。
你会一点?程彻说。你会的东西——比我学了好几年还多。
林智没回答。
店里很吵。有人在笑。有人在碰杯。烤串的烟在灯光下飘着。陈明远又倒了一杯啤酒——来来来,程彻你喝一杯。
程彻喝了一口。皱了皱眉。说。
张锐笑了。
周日。程彻走了。
林智送他去北京站。在站台上,程彻说——
林智。
你做的那个东西——microdb——挺好的。
谢谢。
我明年来了。你教我。
教你什么?
教你会的那些东西。
林智看着他。
程彻也在看他。眼镜后面的眼睛,很认真。
林智说。
火车快开了。站台上的广播在响——t98次列车即将发车,请送亲友的同志下车。
程彻背上包,走到车门口。他回头看了一眼林智。
明年见。
明年见。
他上了车。火车轰隆轰隆地启动了。
林智站在站台上,看着火车慢慢驶出站——车窗里的程彻在挥手。他的脸在车窗后面,越来越小,越来越模糊。
他也挥了一下手。
火车走了。
林智走出北京站。阳光照在北京站的大钟楼上,指针指着下午两点十五分。阳光很好,照在脸上,有点暖。
他坐320路回清华。
窗外的北京,四月的北京。树绿了。花开了。街上的人穿的衣服越来越薄——冬天过去了。
他想——程彻明年就来了。到时候,他们一起做系统。
四月中旬。苏念的毕设答辩。
林智去了新闻学院的多媒体教室。教室不大,坐着六个老师——答辩委员会的。苏念站在讲台上,面前是她的ppt。
她穿着白衬衫和深色长裤。头发扎起来了——整整齐齐的,像一个记者。林智第一次看到她穿成这样——不是学生样,是职业样。他看了她一会儿,觉得她像一个真正的记者了。
她讲了一个小时。
从研究背景到文献综述,从数据收集到分析结果,从图表解读到结论。每一页ppt都做了精心设计——有图表,有地图截图,有数据表格。她的声音很稳——不紧张,不慌张。林智坐在最后一排,看着她。他在想——她讲得比他好。他写代码的时候不会说我为什么写这个。但苏念会。她说我做这个研究,是因为——胡同在消失。如果不记录下来,以后就没人记得了。
一个老师问:媒体叙事演变的定义是什么?
苏念答:媒体叙事演变——是指在不同的历史时期,媒体对一个议题的报道方式、态度和框架的变化。在我的研究中,我发现——从1998年到2005年,北京媒体对胡同拆迁的报道经历了三个阶段:客观描述、人文关怀、批评反思。这三个阶段的转变,不是因为媒体的立场的变了——是因为社会变了。
老师点了点头。
另一个老师问:你的交互地图是怎么做的?
苏念愣了一下。她看了看最后一排——林智坐在那里。
是计算机系的一个同学帮我做的。她说。用JavaScript写的。
老师笑了笑。不错。很有创新。
答辩结束。委员会讨论了几分钟。然后主席宣布——苏念同学,你的毕业论文答辩通过了。成绩——优秀。
苏念站在讲台上,愣了一秒。然后她笑了——一个大大的笑。
她走出来的时候,脸是红的。
过了?林智问。
过了。
成绩呢?
林智笑了。
你刚才讲得很好。尤其是——老师问你不怕数据不够吗——你说数据不是问题,问题是能不能从数据里找到东西。那个回答很好。
真的?
真的。你讲三个阶段转变是因为社会变了的时候——那几个老师都在点头。
苏念笑了。她靠在走廊的墙上,松了一口气。
终于——毕业了。
还有毕业典礼。
六月。
你会来吗?
苏念看着他。
那——我等你。
四月的清华,春天的最后一个月份。苏念毕业了。林智的数据库继续生长着——438座,440座,442座。爬虫每天都在跑,每天晚上都有新的桥被记录下来。程彻说,明年他会来。苏念说,她要在北京做记者。
一切都往好的方向走。
林智走回宿舍的路上,看到那棵槐树——花苞已经比上周大了。有一些已经裂开了,露出白色的花瓣尖。
他停下来,看了一会儿。
他在想——等到槐树全开了,他要跟苏念一起回去看。
他走进宿舍楼。
张锐在写代码。陈明远在看书。
你那个朋友走了?陈明远问。
走了。
他明年考清华?
他说是。
他考得上吗?
他考得上。
陈明远点了点头。你怎么这么确定?
因为他想做的事,就会做到。
你们八中少年班——是不是都是你这种人?
林智想了想。
不是。只有我一个。
陈明远笑了。你倒是不谦虚。
不是不谦虚。林智说。是实话。
张锐在旁边头也不抬地说了一句——他是实话。不是不谦虚。
四月下旬。苏念的答辩成绩正式公布了——优秀。
学院把她的毕业设计推荐给了校报。校报的记者来采访她,写了一篇报道——《用数据记录胡同的消失——新闻学院苏念的毕业设计》。报道里提到了那个交互地图,提到了计算机系同学协助开发。
苏念把那篇报道剪下来,贴在林智的笔记本里。
留个纪念。她说。
林智看了看那张剪报。上面提到计算机系同学——没提名字。但苏念在旁边用蓝色圆珠笔加了一行小字——林智同学。
她把两个字写得很工整。
四月末。清华的春天快结束了,夏天要来了。
林智的爬虫还在跑。数据库已经到了四百五十座——距离年底五百座的目标,还差五十座。
他在苏念送的笔记本上又写了一行:
2006年4月,古桥数据库450座。程彻来了一趟。苏念毕业了。
然后他合上笔记本。
窗外,四月的清华,天快黑了。路灯亮起来。有人在操场上跑步。
林智打开电脑。爬虫的日志显示——今天又抓到了三座新桥。
他导入数据库。
古桥数据库——441座。
他关掉电脑,站起来。窗外的天已经黑了。路灯亮了。四月末的风吹进来,不冷,带着一点湿气——夏天快到了。
他给苏念发了一条短信。
恭喜毕业。
过了一会儿,苏念回了四个字。
谢谢你来。
林智看着屏幕。没再回。
他把手机放在桌上。打开抽屉——里面放着那个深蓝色的笔记本,苏念送的。他拿出来,翻开第一页。上面有苏念写的字——你可以写满三百页代码。或者写满三百座桥。
他又翻开第二页。上面有他写的字——2006年3月26日。十八岁。古桥412座。microdb v0.2。
现在已经是四月末了。数据库已经450座了。
他拿出笔,在第二页下面加了一行:
2006年4月28日。古桥450座。程彻来清华——他说明年也要来。苏念毕业了——成绩优。她在校报上有报道了。
他合上笔记本。
明天还有课。数据结构与算法。周明远说,下周开始讲图算法。
林智关了灯。
窗外,清华四月的夜。路灯亮着,照在紫荆公寓的院子里。有人在弹吉他——断断续续的,不太熟练,但很认真。
他躺下来。天花板上是路灯的光影,一晃一晃的。
他在想——程彻明年来了。苏念毕业了。数据库到年底能到五百座。一切都挺好的。
他闭上了眼睛。
明天还要早起。爬虫还要跑。桥还要记。四月过去就是五月,五月过去就是六月。苏念说,六月的毕业典礼,他要去。
他说了好。她毕业那天,他会坐在台下。看着她穿着学士服,拿着毕业证书。然后她会朝他走过来,说——。他问。她说毕业了,想出去走走。
窗外的吉他声停了。有人笑了几声。然后安静了。
清华的夜,很安静。适合睡觉。适合想明天的事。也适合想夏天的事。槐花快开了。他等着和苏念一起回去看。一年前他们在荷塘边约定的时候,他不知道能不能实现。现在知道了——能的。一定会实现的。就像数据库一定会到五百座一样。