第一卷少年游 第一百二十八章试跑
原既白加入那个城市交通项目的第二天,就把自己过去最熟悉的一套做法带了进去。
项目群里一共七个人,还没有谁真正见过谁。除了程砚,其他几个人来自不同城市,也都是清大新生,其中两个学计算方向,一个偏数学,一个准备读自动化,还有一个女生叫谢以宁,高中做过城市规划相关的社会调查。最初的目标并不大:拿公开道路数据、公交站点和一部分能够合法获得的匿名出行统计,先搭出一个极小的城区仿真,看看高峰时段几条主要道路拥堵怎样形成,再尝试改变信号灯或者公交班次,观察系统响应。程砚在群里反复强调“先做小”,甚至把第一阶段限制在十几个路口。可原既白看到原始数据以后,第一个感觉仍然是:如果底层结构不统一,后面所有工作都会不断返工。
他花了一个上午读数据说明。
文件来源不止一个,路网一套,公交线路一套,站点信息又是一套。看起来都是同一座城市,坐标格式却有两种;同一条路在不同文件里名称略有区别,有的带方向,有的不带;部分公交站沿用了旧名称,而道路数据已经更新;更麻烦的是,一些路口只有几何位置,没有明确的拓扑关系,需要从线段相交和道路方向自己恢复。原既白最开始还觉得这些都属于“清洗问题”,真正做了两个小时,才发现“清洗”这个词过于轻描淡写。它听起来像把脏东西去掉,剩下的就是真实;可这里很多差异不是脏,而是数据最初就为了不同目的采集。
公交系统关心一辆车在哪停。
道路系统关心哪条线连哪条线。
城市规划数据关心土地和片区。
每一个系统都在描述同一座城,却不是为了描述同一个“城市”。
原既白还是开始设计统一结构。
他画了一套节点、道路、站点、线路和时间属性之间的关系,试图让几种数据都映射进去。第一版很快,第二版开始补异常,第三版又加入版本信息。他越来越觉得这件事有一种熟悉的美感:原本混乱的东西经过重新定义以后逐渐变得干净,每个对象都有位置,每种关系都有边界。到晚上,他甚至写出一个转换脚本,已经能把大部分道路和站点映射到新格式里。
他把结果发进群。
程砚半小时以后回了一句:
**挺漂亮。**
原既白看见这三个字,第一反应并不是高兴。
因为后面还有一句:
**但你把我们明天要跑的那段路删掉了。**
原既白愣了一下。
程砚发来一个路口编号。
那是数据里一个非常奇怪的地方:道路文件显示两条线相交,公交数据也有站点靠近,可拓扑信息里两条路并不连通。原既白在转换时把其中一条判断为旧数据,暂时标成异常,没有纳入主路网。
程砚问他为什么删。
原既白解释完,对方发来一张地图截图。路口实际存在,而且是目标区域里一条很重要的支路。
“那原始拓扑错了。”原既白说。
程砚回:
**也不一定。那下面可能有高差。**
几分钟以后,谢以宁又发了一张街景截图。
原来两条路虽然平面投影相交,实际一条从另一条上方跨过去,中间没有匝道,所以原始拓扑“不连通”反而可能是对的;真正有问题的是公交站点文件,其中一个站名仍然沿用几年前道路改造前的位置。原既白重新看自己设计的统一结构,第一次发现它并不是“过于粗糙”,恰恰相反,它过于完整,以至于在数据证据不足的时候替现实做了一次决定。
如果只看平面坐标,两条路应该相交。
如果只看公交站点,它们似乎也应该连接。
如果只看拓扑,又不连。
三种来源彼此冲突。
他为了得到一个可用的系统,选择了其中一种解释。
而且选得很自然。
程砚没有批评他,只说先别修大框架,明天大家一起把目标区域十几个路口人工核一下。“我们现在不是做全城数字底座。”他说,“先确认这十几个路口到底怎么长。”
原既白盯着那句话看了一会儿。
**怎么长。**
不是“怎么编码”。
不是“怎么统一”。
是现实里到底长什么样。
他把自己写了半天的转换脚本留着,没有继续改。
第二天上午,七个人第一次开视频会议。
程砚和群里聊天时差不多,语速快,头发有点乱,背后不是书架,而是一面贴满便签纸的白墙。谢以宁坐在一个光线很好的房间里,桌上摊着纸质城市地图。她来自那座项目城市本地,对十几个目标路口里至少一半有生活经验,真正开始核查以后,很多其他人只会从数据看出来的异常,她一眼就知道现实原因。某条路在地图上是双向,实际上早晚高峰有临时交通管制;一个公交站数据上还存在,本地人却知道因为修地铁已经迁移几百米;另一条看起来很宽的主干道,真正最堵的不是车道数不够,而是旁边一所学校每天放学时大量家长临时停车。
这些信息原既白几乎都没有。
公开数据里当然可能找到一部分。
可不是自动躺在那里等他读取。
有些来自城市公告,有些来自新闻,有些甚至只是本地人在那里生活几年以后自然知道的常识。
他第一次对“真实数据”这个词产生了明显的不信任。
以前高中做程序,数据通常已经有人整理过;竞赛题里的条件更不必说,题目告诉你什么,默认就是世界的全部。现在他们想模拟一块真实城区,却发现最难的不是公式,而是根本不知道哪些因素已经进入数据,哪些还在数据外面。
会议开到第二个小时,程砚把原既白昨天那套统一结构投到屏幕上。
“这个不是不用。”他说,“以后肯定会用。但我建议先缩。”
原既白问:“缩到什么程度?”
“只定义我们现在确认得了的。”
这句话让他有一点不舒服。
不是因为反对,而是因为它违背了他很深的一种习惯。一个系统如果只定义眼前能确认的东西,很容易不断长补丁,最后失去整体。可反过来,如果先定义一个足够漂亮的整体,再把现实塞进去,也可能在第一步就把还没弄清的东西错误归类。
他没有立即同意,也没有坚持。
会议结束以后,把那套结构复制了一份。
原文件保留。
新文件删掉将近一半字段。
不是因为那些字段没价值,而是暂时没有足够证据让它们成为事实。
做完以后,他给江遥发了一张前后对比图。
江遥正好在读第二章科学史。
她看了半天,问:
**你删这么多?**
原既白回:
**先不替数据决定。**
江遥过了一会儿发来:
**有进步。**
他看到这三个字有一点不服。
**你最近也开始给我当老师了?**
江遥没有回。
十分钟以后发来一张自己书页的照片,上面密密麻麻都是铅笔问号,旁边写着一句:
**我今天也没资格。**
原既白笑了一下。
---
江遥第二次参加读书会时没有领读。
她原本以为不负责讲会轻松很多,真正坐进去以后却发现,作为听的人反而更容易暴露自己不知道什么。第二章的领读者是那个喜欢物理史的男生,叫孟川,来自北方另一座大城市。他没有做精致幻灯片,只拿一张时间线和几幅古地图,讲的是测量、航海、国家治理和知识制度之间怎样互相推动。江遥本来以为重点会落在天文学和力学,结果孟川用了很长时间讲港口税收、土地测量和地图制作。
她一开始甚至有点不耐烦。
航海需要更准确的天文,测量需要数学,这些她当然能理解。可为什么税收和土地登记也值得讲那么久?
孟川举了一个很普通的例子:一个国家想知道自己拥有多少土地、从哪里征税、道路怎么修、边界在哪里,就必须把复杂现实变成可以登记和比较的形式。地图不只是“描绘世界”,有时也是管理世界的工具。画一条边界、给一个地方命名、把人口放进表格,都会让现实变得更可计算,却也可能让一些原本模糊的东西被迫变得确定。
江遥听到这里时,突然想起山里的旧路。
地图上仍然存在。
现实已经塌了。
也想起旧水文站里那个自动传感器。
以及原既白昨天发来的交通数据。
这种联系出现得太顺,她反而没有立刻发言。
过去她一旦想到一个跨领域的结构,往往会非常兴奋,现在越来越习惯先放着。几分钟以后,另一个女生提出一个完全不同的问题:地图到底是谁画给谁看的?如果同一个地方由军队画、商人画、当地居民画,什么被标出来、什么被省略,会不会完全不同?
这一下比江遥刚才那个“地图可能过时”的想法更远。
不是模型和现实之间有误差。
而是模型在诞生以前,就已经带着目的。
她在本子上写:
**表示不是透明的。**
写完又划了一道线。
没有删。
顾苓当天带来的材料不是书,而是两张画。
一张是古代山水,另一张是西方透视体系成熟以后的城市绘画。她没有把它们当艺术史课程讲,只让大家看:两幅画都在表现空间,却根本不要求观看者以同一种方式站进去。江遥第一次真正认真看中国古画里的视点变化,发现一幅画里人似乎可以沿着山路移动,视角也跟着变化,并没有一个固定摄像机位置。她以前当然见过类似作品,却从来没问过为什么这样的画仍然“成立”。
有人说西方透视更科学。
顾苓没反驳,只问:
“更适合什么?”
屏幕里的九个人安静了一阵。
江遥忽然发现这个问题和实验误差很像。工具不是抽象地“更准确”,而是相对于某种目的更有力量。固定透视非常适合从一个观察点重建空间关系,可如果想把人在山中移动时连续看见的东西放进一幅画,另一个传统未必是在做同一道题。
她没有把这个想法说出来。
只是第一次觉得,艺术不是科学之外的一种装饰。
它也在解决表示问题。
只是保存的东西不一样。
读书会结束后,顾苓问她开学后的美术馆展览还去不去。江遥说去,对方顺手问她平时有没有看展习惯。
“没有。”
“小时候呢?”
“也很少。”
顾苓停了一下,像意识到这个问题可能过于自然。
她说自己父母都不做艺术,但家离几家馆近,从小周末没事就去,很多东西其实也看不懂,只是习惯进去转。说完又问江遥县城有没有美术馆。
江遥想了一下。
有文化馆。
也有博物馆。
但“周末没事去看展”从来不是她家庭生活里的默认选项。小时候周末更多是补作业、去外婆家、跟同学玩,后来学习越来越忙,真正离开县城也主要为了比赛和考试。
顾苓没有说“那你以后可以多看”。
这反而让江遥舒服。
两个人聊到这里便散了。
可晚上洗澡时,她忽然想起一件很小的事。初中有一次学校组织去市博物馆,她和几个同学一路最期待的是结束以后老师允许去商场吃东西,真正进馆以后几乎只是跟着队伍走。那时候没人告诉她“这样不对”,她自己也从来没觉得错。只是现在回想,才发现同一件事,如果从小有人带着去、允许慢慢看,和十几岁被学校集体带去完成一次活动,可能会形成完全不同的身体经验。
这种差异不能简单叫“知识差”。
更像一种世界使用方式的差别。
---
原既白的交通项目在第三天终于真正跑起来。
所谓“跑起来”,比他想象中寒酸得多。屏幕上只有十几个节点、几条道路和一批用小点表示的车辆。模型没有精美界面,数据也只覆盖一个很短的时间段,甚至信号灯规则都是先用简化版本。第一遍运行时,车辆很快在一个路口堆成一团,所有人都以为是拥堵自然形成,检查半天才发现是他们把一条单行路方向写反。
第二遍,公交车穿过了一个不存在的连接。
第三遍,模型终于没有明显错误,却顺畅得离谱。
现实里那个区域早高峰明明经常拥堵,模拟中车辆却几乎没有真正积压。
程砚盯着结果看了很久,说了一句:“我们做了一个比现实文明的城市。”
没人笑。
因为大家都已经知道为什么。
数据里没有临时停车。
没有家长送学生。
没有电动车突然进入机动车道。
没有施工车占道。
没有司机看到前面黄灯还想抢一下。
也没有某个路口因为下雨以后大家普遍开得更慢。
模型里的车辆严格遵守规则。
每一个人都知道自己去哪。
这种城市当然顺。
谢以宁把一张早高峰街景截图发到群里。学校门口两侧临停车辆占掉接近半条路,公交车被堵在后面,行人从车缝里穿过去。照片明显来自普通手机,没有任何数据意义上的漂亮结构,却比他们跑了半天的动画更接近问题本身。
原既白盯着那张图。
如果要让模型更真实,最直接办法当然是加行为规则:一定比例车辆临停、换道、减速,某些时段加入行人流,甚至模拟违规行为。他脑子里几乎立刻开始构造。
程砚却说:“先别加。”
原既白问为什么。
“我们连临停有多少都不知道。”
“可以估。”
“怎么估?”
“先设范围。”
程砚没有反对,却问设多大。百分之五?百分之二十?学校放学前十五分钟和早高峰一样吗?雨天又是多少?如果任何一个数字都来自直觉,模型最后也能跑出“像真的”拥堵,可那不代表他们真的理解为什么堵。
几个人讨论了很久,最后决定先不增加复杂行为,而是找能够合法获得的街景、公开交通视频和本地交通公告,做很粗的现场分类。谢以宁提出,如果开学前有人在本地,可以直接去路口看两天。
她自己就在本地。
程砚也在。
两个人约好第二天早上七点去。
原既白看到这里,第一次有一种很具体的距离感。
如果自己也住在那座超级城市,他现在可以直接说“我去”。
可县城到那里几百公里。
为了一个还没开学的新生小项目专门跑过去,显然不现实。
他只能等别人把现场带回来。
这种“不能去”并不是能力差,也不是网络解决不了的绝对障碍,却让他第一次意识到,地理本身仍然分配经验。超级城市的学生从小拥有的不只是更好的学校,而是许多东西就在身边:大学、实验室、博物馆、真实公司、城市项目、公开讲座。一个机会如果步行二十分钟可达,和坐四小时火车才能到,长期下来根本不是同一个概率。
他没有沉浸在这种差距里。
反而开始想,自己在县城有什么是程砚他们看不到的。
这个问题比“怎样补齐”更难。
他走到阳台。
楼下奶奶正一个人在小区花坛旁慢慢走。母亲从窗边探头看过几次,却没有下楼跟。老人走到第三个路口时停了一会儿,抬头看楼号牌,随后转回正确方向。
原既白看着她。
突然想到交通项目里那个最容易被忽略的问题:
模型里的每一个人都知道目的地。
现实里不是。
这个念头让他立刻警觉。
因为奶奶不是一个“交通异常样本”。
他不喜欢自己脑子里把生活迅速转换成模型的方式。
原既白关上电脑,下楼。
走到花坛边时,奶奶正坐在长椅上休息。她看见他,问怎么不在家学习。原既白说没有学习,在做一个大学同学的小项目。老人听了一半,大概没明白,只问是不是考试。
“不是。”
“那做了有什么用?”
原既白一时答不上来。
现在确实没有什么用。
只是几个还没入学的学生想先做一点东西。
奶奶点点头,像接受了这种没有用的事。两个人坐了一会儿,她突然指着小区另一栋楼问:“我们以前是不是住那里?”
原既白顺着看过去。
不是。
他们一直住现在这栋。
他没有马上纠正,先问她为什么觉得是。奶奶说那边阳台像,楼下也有一棵树。原既白这才发现,两栋楼从某个角度看确实很相似,颜色、窗户排列甚至入口雨棚都差不多。
“不是那栋。”他说,“我们住这边。”
奶奶看了看。
“哦。”
没有争。
坐了几分钟后,她站起来,说回去。
原既白没有扶她。
只和她一起走。
回到楼下时,他注意到家里以前贴在入口附近的那张六桌大合照已经有些褪色。那是为了帮助奶奶辨认楼栋特意选的一张熟悉照片,尺寸很大,最开始效果很好。最近她却开始偶尔忽略。
他站在入口处看了一会儿。
当天晚上,交通项目群里已经收到程砚发来的消息:
**明早现场看路口,谁还有想确认的东西发过来。**
其他人陆续列问题。
车道实际使用。
公交进站时间。
临停位置。
行人过街。
原既白打开输入框,原本也准备写几条。
手停了一会儿。
最后发的是:
**能不能顺便看看,现场有哪些信息是地图和交通数据里完全没有的?不用分类,先拍。**
程砚很快回:
**这个范围很大。**
原既白看着那句话。
确实很大。
过了一会儿,程砚又发:
**行。**
项目群里一共七个人,还没有谁真正见过谁。除了程砚,其他几个人来自不同城市,也都是清大新生,其中两个学计算方向,一个偏数学,一个准备读自动化,还有一个女生叫谢以宁,高中做过城市规划相关的社会调查。最初的目标并不大:拿公开道路数据、公交站点和一部分能够合法获得的匿名出行统计,先搭出一个极小的城区仿真,看看高峰时段几条主要道路拥堵怎样形成,再尝试改变信号灯或者公交班次,观察系统响应。程砚在群里反复强调“先做小”,甚至把第一阶段限制在十几个路口。可原既白看到原始数据以后,第一个感觉仍然是:如果底层结构不统一,后面所有工作都会不断返工。
他花了一个上午读数据说明。
文件来源不止一个,路网一套,公交线路一套,站点信息又是一套。看起来都是同一座城市,坐标格式却有两种;同一条路在不同文件里名称略有区别,有的带方向,有的不带;部分公交站沿用了旧名称,而道路数据已经更新;更麻烦的是,一些路口只有几何位置,没有明确的拓扑关系,需要从线段相交和道路方向自己恢复。原既白最开始还觉得这些都属于“清洗问题”,真正做了两个小时,才发现“清洗”这个词过于轻描淡写。它听起来像把脏东西去掉,剩下的就是真实;可这里很多差异不是脏,而是数据最初就为了不同目的采集。
公交系统关心一辆车在哪停。
道路系统关心哪条线连哪条线。
城市规划数据关心土地和片区。
每一个系统都在描述同一座城,却不是为了描述同一个“城市”。
原既白还是开始设计统一结构。
他画了一套节点、道路、站点、线路和时间属性之间的关系,试图让几种数据都映射进去。第一版很快,第二版开始补异常,第三版又加入版本信息。他越来越觉得这件事有一种熟悉的美感:原本混乱的东西经过重新定义以后逐渐变得干净,每个对象都有位置,每种关系都有边界。到晚上,他甚至写出一个转换脚本,已经能把大部分道路和站点映射到新格式里。
他把结果发进群。
程砚半小时以后回了一句:
**挺漂亮。**
原既白看见这三个字,第一反应并不是高兴。
因为后面还有一句:
**但你把我们明天要跑的那段路删掉了。**
原既白愣了一下。
程砚发来一个路口编号。
那是数据里一个非常奇怪的地方:道路文件显示两条线相交,公交数据也有站点靠近,可拓扑信息里两条路并不连通。原既白在转换时把其中一条判断为旧数据,暂时标成异常,没有纳入主路网。
程砚问他为什么删。
原既白解释完,对方发来一张地图截图。路口实际存在,而且是目标区域里一条很重要的支路。
“那原始拓扑错了。”原既白说。
程砚回:
**也不一定。那下面可能有高差。**
几分钟以后,谢以宁又发了一张街景截图。
原来两条路虽然平面投影相交,实际一条从另一条上方跨过去,中间没有匝道,所以原始拓扑“不连通”反而可能是对的;真正有问题的是公交站点文件,其中一个站名仍然沿用几年前道路改造前的位置。原既白重新看自己设计的统一结构,第一次发现它并不是“过于粗糙”,恰恰相反,它过于完整,以至于在数据证据不足的时候替现实做了一次决定。
如果只看平面坐标,两条路应该相交。
如果只看公交站点,它们似乎也应该连接。
如果只看拓扑,又不连。
三种来源彼此冲突。
他为了得到一个可用的系统,选择了其中一种解释。
而且选得很自然。
程砚没有批评他,只说先别修大框架,明天大家一起把目标区域十几个路口人工核一下。“我们现在不是做全城数字底座。”他说,“先确认这十几个路口到底怎么长。”
原既白盯着那句话看了一会儿。
**怎么长。**
不是“怎么编码”。
不是“怎么统一”。
是现实里到底长什么样。
他把自己写了半天的转换脚本留着,没有继续改。
第二天上午,七个人第一次开视频会议。
程砚和群里聊天时差不多,语速快,头发有点乱,背后不是书架,而是一面贴满便签纸的白墙。谢以宁坐在一个光线很好的房间里,桌上摊着纸质城市地图。她来自那座项目城市本地,对十几个目标路口里至少一半有生活经验,真正开始核查以后,很多其他人只会从数据看出来的异常,她一眼就知道现实原因。某条路在地图上是双向,实际上早晚高峰有临时交通管制;一个公交站数据上还存在,本地人却知道因为修地铁已经迁移几百米;另一条看起来很宽的主干道,真正最堵的不是车道数不够,而是旁边一所学校每天放学时大量家长临时停车。
这些信息原既白几乎都没有。
公开数据里当然可能找到一部分。
可不是自动躺在那里等他读取。
有些来自城市公告,有些来自新闻,有些甚至只是本地人在那里生活几年以后自然知道的常识。
他第一次对“真实数据”这个词产生了明显的不信任。
以前高中做程序,数据通常已经有人整理过;竞赛题里的条件更不必说,题目告诉你什么,默认就是世界的全部。现在他们想模拟一块真实城区,却发现最难的不是公式,而是根本不知道哪些因素已经进入数据,哪些还在数据外面。
会议开到第二个小时,程砚把原既白昨天那套统一结构投到屏幕上。
“这个不是不用。”他说,“以后肯定会用。但我建议先缩。”
原既白问:“缩到什么程度?”
“只定义我们现在确认得了的。”
这句话让他有一点不舒服。
不是因为反对,而是因为它违背了他很深的一种习惯。一个系统如果只定义眼前能确认的东西,很容易不断长补丁,最后失去整体。可反过来,如果先定义一个足够漂亮的整体,再把现实塞进去,也可能在第一步就把还没弄清的东西错误归类。
他没有立即同意,也没有坚持。
会议结束以后,把那套结构复制了一份。
原文件保留。
新文件删掉将近一半字段。
不是因为那些字段没价值,而是暂时没有足够证据让它们成为事实。
做完以后,他给江遥发了一张前后对比图。
江遥正好在读第二章科学史。
她看了半天,问:
**你删这么多?**
原既白回:
**先不替数据决定。**
江遥过了一会儿发来:
**有进步。**
他看到这三个字有一点不服。
**你最近也开始给我当老师了?**
江遥没有回。
十分钟以后发来一张自己书页的照片,上面密密麻麻都是铅笔问号,旁边写着一句:
**我今天也没资格。**
原既白笑了一下。
---
江遥第二次参加读书会时没有领读。
她原本以为不负责讲会轻松很多,真正坐进去以后却发现,作为听的人反而更容易暴露自己不知道什么。第二章的领读者是那个喜欢物理史的男生,叫孟川,来自北方另一座大城市。他没有做精致幻灯片,只拿一张时间线和几幅古地图,讲的是测量、航海、国家治理和知识制度之间怎样互相推动。江遥本来以为重点会落在天文学和力学,结果孟川用了很长时间讲港口税收、土地测量和地图制作。
她一开始甚至有点不耐烦。
航海需要更准确的天文,测量需要数学,这些她当然能理解。可为什么税收和土地登记也值得讲那么久?
孟川举了一个很普通的例子:一个国家想知道自己拥有多少土地、从哪里征税、道路怎么修、边界在哪里,就必须把复杂现实变成可以登记和比较的形式。地图不只是“描绘世界”,有时也是管理世界的工具。画一条边界、给一个地方命名、把人口放进表格,都会让现实变得更可计算,却也可能让一些原本模糊的东西被迫变得确定。
江遥听到这里时,突然想起山里的旧路。
地图上仍然存在。
现实已经塌了。
也想起旧水文站里那个自动传感器。
以及原既白昨天发来的交通数据。
这种联系出现得太顺,她反而没有立刻发言。
过去她一旦想到一个跨领域的结构,往往会非常兴奋,现在越来越习惯先放着。几分钟以后,另一个女生提出一个完全不同的问题:地图到底是谁画给谁看的?如果同一个地方由军队画、商人画、当地居民画,什么被标出来、什么被省略,会不会完全不同?
这一下比江遥刚才那个“地图可能过时”的想法更远。
不是模型和现实之间有误差。
而是模型在诞生以前,就已经带着目的。
她在本子上写:
**表示不是透明的。**
写完又划了一道线。
没有删。
顾苓当天带来的材料不是书,而是两张画。
一张是古代山水,另一张是西方透视体系成熟以后的城市绘画。她没有把它们当艺术史课程讲,只让大家看:两幅画都在表现空间,却根本不要求观看者以同一种方式站进去。江遥第一次真正认真看中国古画里的视点变化,发现一幅画里人似乎可以沿着山路移动,视角也跟着变化,并没有一个固定摄像机位置。她以前当然见过类似作品,却从来没问过为什么这样的画仍然“成立”。
有人说西方透视更科学。
顾苓没反驳,只问:
“更适合什么?”
屏幕里的九个人安静了一阵。
江遥忽然发现这个问题和实验误差很像。工具不是抽象地“更准确”,而是相对于某种目的更有力量。固定透视非常适合从一个观察点重建空间关系,可如果想把人在山中移动时连续看见的东西放进一幅画,另一个传统未必是在做同一道题。
她没有把这个想法说出来。
只是第一次觉得,艺术不是科学之外的一种装饰。
它也在解决表示问题。
只是保存的东西不一样。
读书会结束后,顾苓问她开学后的美术馆展览还去不去。江遥说去,对方顺手问她平时有没有看展习惯。
“没有。”
“小时候呢?”
“也很少。”
顾苓停了一下,像意识到这个问题可能过于自然。
她说自己父母都不做艺术,但家离几家馆近,从小周末没事就去,很多东西其实也看不懂,只是习惯进去转。说完又问江遥县城有没有美术馆。
江遥想了一下。
有文化馆。
也有博物馆。
但“周末没事去看展”从来不是她家庭生活里的默认选项。小时候周末更多是补作业、去外婆家、跟同学玩,后来学习越来越忙,真正离开县城也主要为了比赛和考试。
顾苓没有说“那你以后可以多看”。
这反而让江遥舒服。
两个人聊到这里便散了。
可晚上洗澡时,她忽然想起一件很小的事。初中有一次学校组织去市博物馆,她和几个同学一路最期待的是结束以后老师允许去商场吃东西,真正进馆以后几乎只是跟着队伍走。那时候没人告诉她“这样不对”,她自己也从来没觉得错。只是现在回想,才发现同一件事,如果从小有人带着去、允许慢慢看,和十几岁被学校集体带去完成一次活动,可能会形成完全不同的身体经验。
这种差异不能简单叫“知识差”。
更像一种世界使用方式的差别。
---
原既白的交通项目在第三天终于真正跑起来。
所谓“跑起来”,比他想象中寒酸得多。屏幕上只有十几个节点、几条道路和一批用小点表示的车辆。模型没有精美界面,数据也只覆盖一个很短的时间段,甚至信号灯规则都是先用简化版本。第一遍运行时,车辆很快在一个路口堆成一团,所有人都以为是拥堵自然形成,检查半天才发现是他们把一条单行路方向写反。
第二遍,公交车穿过了一个不存在的连接。
第三遍,模型终于没有明显错误,却顺畅得离谱。
现实里那个区域早高峰明明经常拥堵,模拟中车辆却几乎没有真正积压。
程砚盯着结果看了很久,说了一句:“我们做了一个比现实文明的城市。”
没人笑。
因为大家都已经知道为什么。
数据里没有临时停车。
没有家长送学生。
没有电动车突然进入机动车道。
没有施工车占道。
没有司机看到前面黄灯还想抢一下。
也没有某个路口因为下雨以后大家普遍开得更慢。
模型里的车辆严格遵守规则。
每一个人都知道自己去哪。
这种城市当然顺。
谢以宁把一张早高峰街景截图发到群里。学校门口两侧临停车辆占掉接近半条路,公交车被堵在后面,行人从车缝里穿过去。照片明显来自普通手机,没有任何数据意义上的漂亮结构,却比他们跑了半天的动画更接近问题本身。
原既白盯着那张图。
如果要让模型更真实,最直接办法当然是加行为规则:一定比例车辆临停、换道、减速,某些时段加入行人流,甚至模拟违规行为。他脑子里几乎立刻开始构造。
程砚却说:“先别加。”
原既白问为什么。
“我们连临停有多少都不知道。”
“可以估。”
“怎么估?”
“先设范围。”
程砚没有反对,却问设多大。百分之五?百分之二十?学校放学前十五分钟和早高峰一样吗?雨天又是多少?如果任何一个数字都来自直觉,模型最后也能跑出“像真的”拥堵,可那不代表他们真的理解为什么堵。
几个人讨论了很久,最后决定先不增加复杂行为,而是找能够合法获得的街景、公开交通视频和本地交通公告,做很粗的现场分类。谢以宁提出,如果开学前有人在本地,可以直接去路口看两天。
她自己就在本地。
程砚也在。
两个人约好第二天早上七点去。
原既白看到这里,第一次有一种很具体的距离感。
如果自己也住在那座超级城市,他现在可以直接说“我去”。
可县城到那里几百公里。
为了一个还没开学的新生小项目专门跑过去,显然不现实。
他只能等别人把现场带回来。
这种“不能去”并不是能力差,也不是网络解决不了的绝对障碍,却让他第一次意识到,地理本身仍然分配经验。超级城市的学生从小拥有的不只是更好的学校,而是许多东西就在身边:大学、实验室、博物馆、真实公司、城市项目、公开讲座。一个机会如果步行二十分钟可达,和坐四小时火车才能到,长期下来根本不是同一个概率。
他没有沉浸在这种差距里。
反而开始想,自己在县城有什么是程砚他们看不到的。
这个问题比“怎样补齐”更难。
他走到阳台。
楼下奶奶正一个人在小区花坛旁慢慢走。母亲从窗边探头看过几次,却没有下楼跟。老人走到第三个路口时停了一会儿,抬头看楼号牌,随后转回正确方向。
原既白看着她。
突然想到交通项目里那个最容易被忽略的问题:
模型里的每一个人都知道目的地。
现实里不是。
这个念头让他立刻警觉。
因为奶奶不是一个“交通异常样本”。
他不喜欢自己脑子里把生活迅速转换成模型的方式。
原既白关上电脑,下楼。
走到花坛边时,奶奶正坐在长椅上休息。她看见他,问怎么不在家学习。原既白说没有学习,在做一个大学同学的小项目。老人听了一半,大概没明白,只问是不是考试。
“不是。”
“那做了有什么用?”
原既白一时答不上来。
现在确实没有什么用。
只是几个还没入学的学生想先做一点东西。
奶奶点点头,像接受了这种没有用的事。两个人坐了一会儿,她突然指着小区另一栋楼问:“我们以前是不是住那里?”
原既白顺着看过去。
不是。
他们一直住现在这栋。
他没有马上纠正,先问她为什么觉得是。奶奶说那边阳台像,楼下也有一棵树。原既白这才发现,两栋楼从某个角度看确实很相似,颜色、窗户排列甚至入口雨棚都差不多。
“不是那栋。”他说,“我们住这边。”
奶奶看了看。
“哦。”
没有争。
坐了几分钟后,她站起来,说回去。
原既白没有扶她。
只和她一起走。
回到楼下时,他注意到家里以前贴在入口附近的那张六桌大合照已经有些褪色。那是为了帮助奶奶辨认楼栋特意选的一张熟悉照片,尺寸很大,最开始效果很好。最近她却开始偶尔忽略。
他站在入口处看了一会儿。
当天晚上,交通项目群里已经收到程砚发来的消息:
**明早现场看路口,谁还有想确认的东西发过来。**
其他人陆续列问题。
车道实际使用。
公交进站时间。
临停位置。
行人过街。
原既白打开输入框,原本也准备写几条。
手停了一会儿。
最后发的是:
**能不能顺便看看,现场有哪些信息是地图和交通数据里完全没有的?不用分类,先拍。**
程砚很快回:
**这个范围很大。**
原既白看着那句话。
确实很大。
过了一会儿,程砚又发:
**行。**