屏幕的光蓝莹莹的,映着陈默的脸。
他敲下最后一个字符,保存文档。凌晨三点,屋里静得能听见电流声。眼皮沉得像坠了铅,他往后靠,椅背发出轻微的呻吟。
文档里列满了条目。
重构计划分四个阶段,每阶段拆成具体任务。时间精确到小时,旁边标注着难点和备用方案。密密麻麻的字,看久了像蚂蚁在爬。
他关掉文档,揉了揉太阳穴。
指尖冰凉,按在皮肤上有点刺痛。系统面板悄无声息地滑出来,悬在屏幕上方。精神力状态条是浅黄色,旁边有个小小的叹号。
“建议:四小时深度睡眠。”
陈默关了面板。他站起来,腿麻了,扶着桌子站了会儿。走到窗边,外面漆黑一片,只有远处高架桥上的车灯连成一条流动的光带。
他看了几分钟,拉上窗帘。
躺到床上,没脱衣服。被子有股陈旧的气味,像晒不干的棉絮。他侧过身,脸埋进枕头里。
呼吸慢慢变沉。
梦里全是代码。函数在跳,变量在闪,错误提示像红色的虫子往外涌。他伸手去抓,抓了个空。
闹钟在六点半响起。
声音尖利,像刀片划玻璃。陈默猛地睁开眼,盯着天花板上的裂纹看了三秒。伸手按掉闹钟,屋里恢复安静。
他坐起来,头重脚轻。
洗漱时冷水泼在脸上,才清醒些。镜子里的人眼圈发黑,下巴上的胡茬冒出一层青灰。他拿起剃须刀,嗡嗡声在狭小的卫生间里回荡。
泡沫是薄荷味的,很冲。
刮完胡子,皮肤有点刺痒。他用毛巾擦干,走到厨房。冰箱里只剩下两个鸡蛋和半盒牛奶。
他煎了蛋,就着牛奶喝下去。
味道很淡,像在嚼纸。吃完收拾干净,碗筷沥在架子上。水滴答滴答,节奏很慢。
上午八点,他坐到电脑前。
打开昨天列的文档,从头看一遍。手指在触摸板上滑动,光标一行行下移。看到第三阶段时,他停住了。
有个依赖项没考虑到。
他皱眉,快速新建一个便签。写下问题,贴在屏幕边缘。黄色的便签纸,很醒目。
然后他开始写代码。
键盘声密集起来,嗒嗒嗒嗒。阳光从窗帘缝隙溜进来,在地板上切出一道窄窄的光带。光里有灰尘在跳舞,上下翻飞。
写到十一点,他停下来。
手有点抖,是咖啡因的作用。早上那杯速溶咖啡太浓了。他起身倒水,玻璃杯碰着水龙头,叮一声。
水很凉,灌下去喉咙发紧。
他走回电脑前,系统面板又跳出来。这次没有警告,只有一行小字:“推演模式就绪,是否预演对话场景?”
陈默盯着那行字。
手指在桌面上敲了敲。一下,两下。他点了“是”。
视野边缘泛起淡蓝色的光晕。
像隔着一层毛玻璃,现实世界的轮廓变得模糊。耳边响起咖啡馆的背景音:隐约的音乐,杯碟碰撞声,远处的人语。
沈清澜坐在对面。
她的脸有点模糊,但眼神很清晰。灰色针织衫,头发松松挽着。手指捏着咖啡勺,轻轻搅动。
“开始吧。”她说。
声音透过推演传来,带着细微的失真。陈默吸了口气,开始讲解架构思路。语速平稳,重点突出。
讲到第三个模块时,沈清澜打断了他。
“这里,”她手指虚点,“和‘灵瞳’的处理逻辑很像。”问题尖锐,直指核心。
陈默顿了顿。
“借鉴了思路,”他说,“但实现完全不同。”他调出对比图,数据一行行展开。“他们的卷积核是固定的,我这里用了自适应参数。”
沈清澜身体前倾。
“证明给我看。”她说。推演里的她眼神更专注,像要穿透屏幕。
陈默调出测试结果。
图表跳出来,曲线分明。沈清澜看了很久,手指在桌上轻轻敲击。笃,笃,笃。节奏很慢。
“继续。”她说。
陈默往下讲。讲到性能优化部分时,他卡壳了。有个数据记不清,临时翻文档又显得不专业。
推演自动暂停。
蓝色的提示框浮出来:“关键数据缺失,建议标记。”陈默呼出口气,退出推演。
现实重新清晰起来。
电脑屏幕亮着,代码停在刚才的位置。他新建一个备忘录,把那个数据点标成红色。然后继续写。
下午一点,他煮了碗面。
清汤挂面,撒了点盐。热气扑到脸上,眼睛有点湿。他低头吃,面条滑进喉咙,没什么味道。
吃完洗了碗,手被热水烫得发红。
他用冷水冲了冲,擦干。回到电脑前,下午的工作是重构错误处理模块。这部分最枯燥,也最容易出错。
他戴上耳机,放了点白噪音。
雨声,淅淅沥沥的。键盘声混在里面,变得柔和了些。写到一半,手机震了一下。
是天气预报。
明天下午晴,气温十八度。他扫了一眼,关掉。手指没停,继续敲。
小主,这个章节后面还有哦,请点击下一页继续阅读,后面更精彩!
窗外天色渐渐暗下来。
傍晚五点,他保存所有进度。站起来活动肩膀,骨头嘎巴响了两声。走到窗边,推开窗户。
冷空气涌进来,带着街边的油烟味。
楼下小吃摊亮起灯,橙黄的光晕开在暮色里。吆喝声断断续续,听着有点远。
他看了会儿,关窗。
晚上简单热了剩饭,就着咸菜吃完。洗完澡出来,头发湿漉漉地滴着水。他用毛巾胡乱擦了擦,坐到书桌前。
明天要穿的衣服已经拿出来。
那件稍正式的外套,熨过,挂在椅背上。他摸了摸布料,质感粗糙,但版型还行。
背包也收拾好了。
电脑,充电器,演示用的草图,还有一支笔。拉链拉上,放在门口鞋柜上。
他躺到床上,关灯。
黑暗里,脑子反而清醒。推演的画面一帧帧回放:沈清澜的表情,可能的问题,自己的应答。
又过了一遍。
确认没有遗漏,他才放松下来。闭上眼睛,数自己的呼吸。一,二,三。数到五十几,睡着了。
这次没有梦。
醒来看手机,早上七点。天阴着,云层很厚。他起床,换好衣服。动作很慢,每个扣子都扣整齐。
吃早饭时喝了杯牛奶。
牛奶有点腥,他皱了皱眉,还是喝完了。洗好杯子,擦干手。走到门口,背上背包。
拉链声清脆。
他打开门,楼道里的声控灯应声亮起。昏黄的光,一级级台阶照下去。脚步声在空旷的楼梯间回荡。
走出单元门,冷风扑面。
他拉高外套拉链,手插进口袋。巷子里的积水结了层薄冰,踩上去咯吱响。早点摊的油锅冒着白汽,香味飘过来。
他没停,径直往前走。
公交站人不多,几个上班族缩着脖子等车。他站在最边上,看站牌上的线路图。
车来了,他投币上车。
后排靠窗位置空着,他坐下。背包抱在怀里,有点沉。车开动,窗外的街景开始后退。
商店陆续开门,卷帘门哗啦啦响。
他靠在玻璃上,额头贴着冰凉。眼睛闭着,但没睡。脑子里最后过一遍演示顺序。
车摇摇晃晃,像船。
到站时刚好两点二十。他下车,站牌对面就是蓝山咖啡馆。绿色招牌,字体很秀气。
他穿过马路,推门进去。
铃铛响,声音清脆。暖意混着咖啡香涌过来,他深吸了一口。店里人不多,靠窗位置都空着。
他挑了最里面的角落。
放下背包,脱掉外套搭在椅背上。服务员走过来,是个年轻女孩,围裙洗得发白。
“先生喝点什么?”
“美式,热的。”陈默说。女孩点头,转身离开。他环顾四周。
木制桌椅,暖色灯光,墙上挂着抽象画。音乐是轻爵士,萨克斯风悠悠地吹。背景音里有磨豆机的嗡嗡声,很轻。
他拿出电脑,开机。
屏幕亮起,他点开演示文件。检查最后一遍,参数都正常。合上电脑,放在桌上。
两点四十。
他端起水杯,喝了一口。水是柠檬味的,微酸。手指在桌面上无意识地画圈,一圈,又一圈。
门又被推开。
铃铛响。陈默抬头,沈清澜走进来。她今天穿了件浅灰色的毛衣,黑色长裤,头发松散地披着。
肩上挎着个帆布包,看起来沉甸甸的。
她扫视店内,目光落到陈默这边。没有挥手,只是微微点头。陈默也点头回应。
她走过来,脚步很稳。
拉开椅子坐下,帆布包放在脚边。动作自然,像来过很多次。服务员过来,她抬眼。
“拿铁,少奶泡。”
声音平淡,没有起伏。服务员记下,离开。沈清澜这才看向陈默。
“没迟到。”她说。
“我也刚到。”陈默说。他注意到她眼下有淡淡的青色,像没睡好。
沈清澜从帆布包里拿出笔记本电脑。深灰色金属外壳,边角有点磨损。她打开,按下开机键。
屏幕亮起,是纯黑的背景。
没有壁纸,只有几个文件夹图标。她点开一个,里面全是技术文档。光标快速移动,打开一个pdf。
“你的架构图我看了。”她开门见山。
陈默坐直身体。“嗯。”
“第三章第二节,”她手指虚点在屏幕上,“关于动态阈值的设定,解释一下。”
问题来得突然。
陈默吸了口气。他从背包里拿出打印的草图,铺在桌上。手指点着图表上的曲线。
“这里,”他说,“光照变化超过百分之三十,阈值自动调整。”他翻到下一页,“基于历史数据的滑动窗口计算,权重是……”
他讲了三分多钟。
语速平稳,数据准确。沈清澜听着,眼睛盯着草图。偶尔点一下头,幅度很小。
讲完,她沉默了几秒。
手指在触摸板上滑动,翻到下一页文档。“这个算法的复杂度,”她说,“在实际硬件上跑过吗?”
“模拟环境跑过。”陈默说,“树莓派4b,帧率能到十五。”
“实时性不够。”
“硬件限制。”陈默坦白,“如果用更好的gpu,可以提到三十以上。”
沈清澜抬眼看他。
“你知道市面上的安防摄像头用什么芯片吗?”她问,语气里听不出情绪。
陈默顿了顿。“知道。”
“那你还用这么重的模型?”
“模型可以裁剪。”陈默说,他调出另一个文件,“轻量版参数量只有百分之四十,精度损失控制在三个点以内。”
沈清澜身体前倾。
她盯着屏幕,手指放大图表。看了足足一分钟,才开口。“裁剪方案谁做的?”
“我。”陈默说。
“用了什么工具?”
“自己写的脚本。”陈默点开代码,“基于梯度重要性剪枝,结合了通道级和层级的评估。”
沈清澜接过鼠标。
她快速浏览代码,滚轮滑动发出轻微的摩擦声。眉头微微皱着,嘴唇抿成一条直线。
咖啡馆里音乐换了。
钢琴曲,旋律很舒缓。但这一桌的气氛绷着,像拉紧的弦。
“这里,”沈清澜停在一个函数上,“为什么用自定义的评估函数?标准库里有现成的。”
“标准库的评估太粗糙。”陈默说,“我这个考虑了层间依赖,效果更好。”
他调出对比数据。
两行数字并排,差距明显。沈清澜盯着看,手指在桌面上敲了敲。笃,笃。两声。
“证明。”她说。
陈默早有准备。他打开测试日志,里面记录了十几组对比实验。数据详细,图表清晰。
沈清澜一页页翻过去。
翻到最后一页,她停下来。抬头看陈默,眼神很复杂。像在审视,又像在评估。
“你花了多少时间做这些?”她问。
“两周。”陈默说,“白天写核心算法,晚上做优化和测试。”
“不睡觉?”
“睡。”陈默顿了顿,“睡得少。”
沈清澜没接话。她端起刚送来的拿铁,喝了一小口。杯沿留下浅浅的唇印,淡淡的粉色。
放下杯子,她靠回椅背。
“演示我看过了。”她说,“技术上有亮点,尤其是剪枝方案。”停顿一下,“但工程上还是糙。”
陈默点头。“我知道。”
“知道不改?”
“时间不够。”陈默实话实说,“先保证算法核心跑通,工程化可以后续补。”
沈清澜沉默。
她看着窗外,外面有行人匆匆走过。一个母亲牵着孩子,孩子手里拿着气球,红色的。
看了几秒,她转回头。
“如果给你资源,”她说,“你能做到什么程度?”
问题很直接。
陈默心里紧了一下。他握了握放在桌下的手,掌心有点湿。“要看什么资源。”
“人,钱,时间。”沈清澜说,“三个人,五十万,六个月。”
陈默快速心算。
三个人包括他自己,一个后端,一个前端。五十万够发半年工资和服务器费用。六个月,够做出可商用的原型。
“能做到产品级。”他说。
“具体点。”
“完成算法工程化,开发管理后台,支持主流摄像头接入,误报率控制在千分之五以下。”陈默语速加快,“如果有真实场景数据做训练,效果还能提升。”
沈清澜听着,没打断。
等他说完,她才开口。“数据我可以提供。”顿了顿,“脱敏过的。”
陈默心跳漏了一拍。
“但有个条件。”沈清澜说,眼神锐利起来,“你得告诉我,为什么选这个方向。”
问题超出了技术范畴。
陈默手指收拢。他端起已经凉掉的美式,喝了一口。苦味在舌尖蔓延,一直苦到喉咙。
“因为‘灵瞳’做得不够好。”他说。
沈清澜挑眉。“就这?”
“不够。”陈默放下杯子,“他们太看重商业落地,牺牲了技术上限。”他顿了顿,“我想做更好的。”
“更好的定义是什么?”
“更准,更快,更智能。”陈默说,“在极端场景下也能用,不只是晴天白天的监控。”
沈清澜没说话。
她拿起咖啡勺,轻轻搅动杯里的奶泡。勺子碰着杯壁,叮叮轻响。搅了十几圈,停下。
“赵志刚知道你在做这个吗?”她突然问。
陈默后背一僵。
“不知道。”他说。
“如果他知道呢?”
“他会想办法阻止。”陈默声音很平,“或者,想办法占为己有。”
沈清澜扯了扯嘴角。
很淡的弧度,像嘲讽,又像无奈。“你看得挺清楚。”她说,语气里多了点别的东西。
陈默没接话。
他等着。等下一个问题,或者判决。咖啡馆里的音乐又换了一首,还是爵士,节奏慢悠悠的。
窗外的云散开一点,阳光漏下来。
光斜斜照进店里,落在他们这桌的桌角。木纹被照亮,一圈圈的年轮清晰可见。
沈清澜合上电脑。
啪一声,很轻。她拿起帆布包,拉开拉链,从里面拿出一个文件夹。牛皮纸的,看起来很旧。
她把文件夹推到陈默面前。
“看看。”她说。
陈默打开。里面是几份技术报告,还有几张手写的笔记。字迹工整,但很密,像蚂蚁搬家。
他快速浏览。
越看心跳越快。这是“灵瞳”项目的内部评估报告,还有沈清澜自己做的分析。重点标注了算法的缺陷,数据标注的问题,还有工程上的硬伤。
翻到最后一页,是结论。
“技术路线存在根本性局限,建议重立项。”下面有沈清澜的签名,日期是三个月前。
报告被驳回了。
驳回意见只有一行字:“商业优先级高于技术理想。”签字人是赵志刚。
陈默抬起头。
沈清澜正看着他,眼神很静。“现在你知道了,”她说,“我为什么对‘灵瞳’没兴趣。”
陈默喉咙发干。
他合上文件夹,推回去。“谢谢。”
“不用谢。”沈清澜说,“我只是不想浪费时间。”她把文件夹收回包里,“你的算法虽然糙,但方向是对的。”
她顿了顿。
“两周时间,把演示版做到能用。”她说,“我会提供测试数据,你要给出完整的评估报告。”
陈默点头。“好。”
“还有,”沈清澜补充,“所有代码必须做好脱敏处理。不能有任何可能被追溯到你个人或原公司的痕迹。”
“明白。”
“最后一点。”沈清澜看着他,“在这期间,不要对任何人提起我们的接触。包括你之前的同事,朋友,任何人。”
陈默迎上她的目光。
“好。”他说。
沈清澜似乎松了口气,很细微的。她端起咖啡,把剩下的喝完。放下杯子,杯底在桌面上轻轻一磕。
“那就这样。”她站起来,背起帆布包。
陈默也站起来。
“两周后,”沈清澜说,“还是这里,下午三点。”她顿了顿,“别迟到。”
“不会。”陈默说。
沈清澜点点头,转身离开。脚步很快,灰色毛衣的背影很快消失在玻璃门外。铃铛响了一声,余音慢慢散去。
陈默站在原地。
桌上有两个咖啡杯,一个空着,一个还剩半杯凉掉的美式。阳光移到了桌中央,照亮了木纹的缝隙。
他慢慢坐下。
后背靠在椅背上,才发现肌肉一直绷着。他长长吐出一口气,胸口有什么东西松开了。
但又有什么东西系紧了。
他收起电脑,装进背包。拉链拉上,声音清脆。穿上外套,布料摩擦发出沙沙声。
走到柜台结账。
服务员说刚才那位女士已经付过了。陈默道了谢,推门出去。
外面阳光很好,照在脸上暖洋洋的。
他站了一会儿,让风吹过脸颊。然后背上包,往公交站走。脚步很稳,每一步都踩实。
等车时他拿出手机。
点开日历,标记两周后的日期。红色圆圈,旁边备注:咖啡馆,演示第二版。保存,锁屏。
车来了,他上车。
坐在靠窗位置,看外面街景。商店橱窗反射着阳光,亮得刺眼。行人来来往往,表情各异。
他闭上眼,休息。
脑子里已经开始规划:数据怎么处理,代码怎么重构,报告怎么写。一个个任务在脑内排列,像等待拼装的零件。
车摇摇晃晃,像摇篮。
他几乎要睡过去。但意识清醒,在清醒和迷糊的交界处,时间再次变慢。
慢到能听见自己的心跳。
平稳,有力,一下一下敲在胸腔里。像鼓点,为接下来的两周定下节奏。
车到站,他下车。
走回巷子时,天已经开始暗了。路灯还没亮,暮色像淡墨一样晕染开来。巷子里的油烟味更浓了,混杂着各家各户的饭菜香。
他上楼,开门。
屋里比外面暗,他顺手开灯。暖黄的光洒下来,照亮了桌面上的草稿纸和笔。
他放下背包,脱下外套。
走到电脑前,开机。屏幕亮起,蓝光照在脸上。他打开文档,新建一页。
标题写上:两周冲刺计划。
手指落在键盘上,开始敲击。嗒,嗒,嗒。声音在安静的屋里回荡,像某种宣言。
窗外天色完全黑了。
路灯亮起,飞蛾又开始扑腾。翅膀拍在玻璃上,啪啪轻响。像在催促,又像在伴奏。
陈默没抬头。
他专注地写着,一行行字跳上屏幕。任务,时间,目标。条理清晰,像他写过的那些代码。
等待结束了。
审视也通过了。接下来,是证明的时刻。他敲下最后一个句号,保存文档。
靠在椅背上,闭上眼睛。
黑暗里,他能看见那些还没写出的代码,还没跑通的测试,还没交付的成果。它们悬浮在意识深处,闪着微光。
像星图。
而他,正要启航。