《首富从AI浪潮开始》 第一章 你被优化了 208会议室很小。灯光很亮。 hrbp张薇坐在桌子对面,面前摆著一份列印好的协议和一瓶没开的矿泉水。 “路一,先喝水。” 韩路一没拿水。 张薇清了清嗓子:“公司最近在做组织架构调整,你这边的岗位需要优化……” 后面的话韩路一没怎么听。 无非就是那些:感谢你的贡献、公司的决定、n+1、竞业协议、祝你前程似锦。 每一句都是標准话术,每一个字都不带温度。 “补偿方案在这里,你看一下。”张薇把协议推过来。 韩路一翻了翻:数字、条款、签名栏。 五年。 校招进来的p5,一路卷到p7,多少次周末赶代码,多少次通宵盯著新版本上线。 一张纸就结束了。 签完,站起来往外走。 走廊很长,白色的灯管在头顶排成一排。 走出208会议室大概第五步的时候,他突然开始头痛。 不是普通的头痛。 是那种从太阳穴开始,像有人拿锥子往里钻的剧痛,韩路一脚步一个趔趄,右手撑住了墙壁。 他的视野里出现了裂纹。 不,不是视野,整个世界都出现了裂纹,就像一块屏幕被用力按了一下,液晶面板底下的像素点全部扭曲了。 然后世界破碎了。 本书首发 看书就来 101 看书网,101??????.??????超给力 ,提供给你无错章节,无乱序章节的阅读体验 又重组了。 整个走廊都变了。 墙壁、天花板、脚下的地砖,所有东西的表面都浮现出一层半透明的光,像是有人在现实世界上覆盖了一层ar图层,无数行代码和数据以极快的速度滚动著。 韩路一死死扶著墙,大口喘著气。 视野正中央,一个框体弹了出来。 【现实代码视界已激活】 【lv.1|精力:100/100】 “……什么?” 韩路一以为自己出了幻觉,被裁员裁出精神问题了? 但那个面板就悬在他视野中央,清清楚楚,他试著伸手去碰,但手穿过了光影,什么也没摸到。 他眨了几下眼,面板还在。 右上角的数字在慢慢跳动:99……98……97…… 精力值在往下掉。 这时候208会议室的门开了,张薇抱著一叠文件走出来,差点撞到靠墙站著的韩路一。 “哎,路一?没事吧?你脸色不太好……” 她话没说完,韩路一抬头看到张薇的头顶浮著一个半透明的数据面板。 【张薇|29岁|hrbp(p6)】 就这么一行字,悬在她头顶大概十公分的位置,半透明的,像游戏里的名牌。 当韩路一把注意力集中到那里的时候,像是有人点开了一个摺叠菜单,更多信息被打开了—— 【当前任务:完成7人裁员面谈(已完成3/7)】 【情绪:疲惫(隱藏:心虚)】 【warning:补偿方案存在两个漏洞:1工龄计算遗漏2021年7-9月实习转正衔接期;2加班补偿基数误用税前工资而非应发工资|差额¥47832】 韩路一盯著那个数字看了两秒。 四万七千八百三十二块。 忽然鼻子里一热,有什么东西流下来了,他抬手一抹,指尖是红色的,鼻血。 精力值:92……91…… 张薇嚇了一跳:“你流鼻血了!要不要去医务室?” “不用。”韩路一用手背擦了一下鼻子,“张姐,等一下。” 他把刚才签好的协议从口袋里掏出来。 “补偿方案我又看了一眼。” 张薇愣了一下:“你都签了啊……” 韩路一的声音很平静:“劳动法第四十七条,工作年限计算有问题,我2021年7月实习转正,系统记录的入职日期是10月,中间三个月的衔接期你们没算。” 张薇脸上的表情微妙地变了一下。 韩路一继续说:“另外,加班补偿的基数你们用的是税前工资,但按照劳动合同法实施条例,应该用应发工资,包含绩效和补贴部分,这两个加起来,差了不少。” 张薇没接话,但她手里的文件夹握紧了一点。 韩路一看著她头顶的面板。 【情绪变化:疲惫→紧张】 韩路一把协议放在张薇面前:“数字不对,咱们重新算一下,按法条来就行。” 张薇沉默了几秒,然后说:“你等一下,我核实一下。” 她转身回了会议室,关上门。 韩路一靠在走廊的墙壁上,看著视野里跳动的数字和飘浮的代码流,精力值还在掉:85……84…… 太阳穴还在一抽一抽地疼,但他的嘴角翘了一下。 五分钟后,张薇出来了,表情有点僵硬。 “路一,你说的情况……確实存在,我跟薪酬组確认了,补偿金额需要调整。” 她递过来一份新列印的协议,手指点了一下最后的数字。 比原来多了四万七千八百三十二块。 韩路一拿起笔签了字。 “谢谢张姐。” 他把新协议折好放进口袋,转身的时候,看到走廊尽头站著一个人。 是陈博文,他端著一杯咖啡靠在墙边,表情似笑非笑。 以前见到这张脸,韩路一心里只有一个字:忍。 陈博文是韩路一的直属领导,海归硕士,空降p8。两个月前,他拿韩路一写了六个月的推荐系统演进做了场漂亮的匯报,转化率提升37%,留存涨了5.2个百分点。代码仓库里两千三百多次提交,百分之九十一来自韩路一的帐號,但ppt署名“陈博文团队”,台下的vp王志远听得频频点头。 年终述职,陈博文拿了部门唯一的3.75,韩路一被评3.25,反馈就五个字:配合度不够。 然后项目被接手,人被踢去外包组,最后hr下场收人,一条龙。 韩路一看向他。 陈博文头顶的数据面板亮了起来。 【陈博文|33岁|算法部总监(p8)】 【情绪:轻蔑(隱藏:恐惧)】 【当前负责项目:推荐系统v3.2|上线后转化率持续下降(-0.3%/日)|团队未定位原因】 【warning:该对象存在3个严重bug(当前等级不足)】 “路一,辛苦你了,好好休息一阵,”陈博文的表情恰到好处地遗憾,“有什么需要帮忙的,跟我说。” 韩路一笑了笑。 他把工牌从脖子上取下来,放在旁边的前台桌上。 “对了,”他像是想起什么似的,“转化率是不是在掉?” 陈博文端咖啡的手顿了一下。 韩路一掏出手机看了一眼时间。 “上线后应该每天掉零点几,你最近拉周线看过没?” 陈博文脸上的笑容不见了。 “你怎么知道的?” “是我写的。”韩路一把手机放回兜里,“陈哥,加油。” “韩路一!你什么意思!?” 韩路一没理他,摆摆手走了。 走出鼎盛集团大楼的旋转门,二月的冷风扑面而来。他站在台阶上,深吸了一口气。 精力值:61/100。 头还在疼。 鼻血干了以后上嘴唇痒痒的。 视野里依然飘著那些半透明的数据和代码,路上每个行人的头顶都顶著一块小小的面板,他试著集中注意力想要关掉这东西—— 面板消失了。 世界恢復了正常。 韩路一伸手摸了摸口袋里的新协议。 被裁了。 多拿了將近五万块。 眼睛好像出了什么大问题。 他把这三件事在脑子里排列了一下,发现自己居然想笑。 然后他真的笑了。 站在二月的冷风里,一个刚被裁员的二十六岁程式设计师,鼻子下面还有干掉的血痂,对著灰濛濛的天空笑出了声。 路过的保安看了他一眼。 韩路一收住笑,拿出手机叫了一辆车。 打车软体弹出预估价格:38元。 但是他的脑子里想的是另外两个问题—— 精力值归零了会怎样? 陈博文那三个严重bug是什么? 手机震了一下,推送弹窗:《快闪科技完成b轮融资10亿,估值破百亿》,韩路一瞥了一眼,划掉了。 十个亿。 跟他没关係。 第二章 这个世界,有Bug 计程车上,韩路一靠著后座闭眼假寐。 司机在前面骂骂咧咧地吐槽交通,导航的电子女声冷冰冰地说“前方五百米右转”。 到家了。 浦东老小区,六层楼梯房,他住五楼,没电梯,每天爬楼就当健身了。月租四千五,在海城算便宜的。 进屋鞋都没换,他就打开了电脑。 程式设计师遇到了未知的新功能,第一反应只有一个。 测试。 新建文档,文件名:rcv_test_log_v_0_1.md 开启视界。 世界再次变了。 房间里每个物体的表面都浮现出淡淡的数据光层,墙壁有建筑信息,桌子有材质数据,就连角落里那袋没扔的外卖垃圾都標著【有机废弃物|存放时间:3天|建议:立即处理】。 韩路一瞥了一眼那个提示,默默把垃圾袋拎去了门口。 然后回来坐下,开始记录。 精力值:67/100,比出公司大门的时候恢復了6点,大约每分钟0.15。 他在文档里敲下第一行数据,接著花了十来分钟测试视界的被动和主动两种模式,被动掛著每分钟耗1点,聚焦扫描跳到3-4点。 等一下—— 他心跳加速,掏出手机打开理財软体,眼前泛起一道绿光。 【小豆v10|智慧型手机|运行中】 【异常:系统安全补丁过期(未修补)】 屏幕上的k线图、涨跌幅、成交量,面板一个字都没提。 他又试了基金、期货、数字货幣,面板稳如泰山,只认手机本体,对屏幕上的金融数据视而不见。 看来不能用来炒股。 失望之下,他把视界对准了电脑屏幕。 屏幕上还开著一个开源推荐系统,他业余时间在github上维护的,star两万多,好几家小公司拿去部署了。视界扫描了大约十秒钟,整个代码结构在他视野中展开。 bug標红,冗余代码標黄,优化空间標蓝。 韩路一皱了皱眉。 找bug、標红代码、提示边界条件,这不就是代码审查工具乾的活吗?2026年了,这种功能烂大街了。就算视界的准確率更高、速度更快,本质上也只是一个增强版的静態分析,算不上质变。 但每一个红色標记旁边,还悬浮著一层东西。 韩路一凑近屏幕,逐字看清了。 【bug|推荐权重溢出】 【触发场景:用户连续刷新>50次时权重累加溢出】 【影响范围:日均触发约12万次|涉及用户约8.3万人】 【业务损失:推荐精度下降,聚合估损≈日均62000元】 韩路一瞬间坐直了。 日均损失六万二。 这不是代码层面的信息,代码里写的是一个数据溢出,任何ai分析工具都能找出来,但“日均触发12万次”“影响8.3万用户”“每天亏六万二”,这些数据从哪来的? 这是开源项目,他自己都不知道有谁部署了这套系统。 这是现实世界的运行数据。 而视界能看到。 他正要关掉扫描,手机闪出一行金色提示—— 【warning:外部实体异常,快闪科技|检测到重大bug:核心运营数据严重异常|修復可获得大量经验|详情需深度扫描】 韩路一愣住了。 快闪科技,刚才打车的时候手机推送的那条,b轮融资十个亿,估值破百亿的那个快闪科技。 十个亿的公司,核心数据有重大bug? 精力值哗哗往下掉,他赶紧关闭视界,在文档里写下: “不能用於金融投机。” “代码扫描:bug定位,能看到bug在真实世界中的影响。” 又加了一行:“快闪科技,核心运营数据严重异常,需要深度扫描,大量经验。” 他关上电脑,靠在椅子上。 窗外的天已经快黑了,二月的海城日落早,才五点出头就暗下来了。 肚子叫了一声。 韩路一这才想起来,自己今天只吃了一顿早饭。 他起身下楼买饭。 走到二楼楼道拐角,听到下面传来动静。 有人在上楼,走得很慢。脚步声沉闷,中间夹著一个小孩子的哼唧声。 韩路一往下走了几步。 一个女人左手拎著两大袋超市购物袋,右手抱著一个小女孩,正吃力地往上爬。购物袋太重,塑料提手勒得她手指发白。怀里的小女孩大概四五岁的样子,脸上掛著没干的泪痕,脑袋靠在女人肩窝里。 韩路一迎面下来的时候,女人抬起头看了他一眼。 视界还开著。 面板自动弹了出来。 【林晚晴|30岁|自由插画师】 只有这么一行,简洁的基础名牌,悬在她头顶。 但他的目光多停了一秒,面板下方自动展开了更多信息—— 【情绪:疲惫(隱藏:焦虑)】 【warning:该对象存在1个待修復bug,家庭纠纷(详情需lv.2解锁)】 韩路一伸出手:“我帮你拎。” 林晚晴愣了一下。 “谢谢。”她把购物袋递过来。 韩路一接过来,挺沉的,两袋加起来估计有三十斤。米、食用油、一堆蔬菜水果,还有两盒儿童牛奶。 两个人一前一后上楼。 “你是……502的吧?”林晚晴先开口了。 韩路一点了点头。 “我501。”她笑了一下,“搬来两年了,好像第一次说话。” 韩路一確实一点印象都没有,以前每天早上六点出门,晚上十一二点到家,周末还经常去公司加班,別说邻居了,这栋楼的楼管叫什么他都不知道。 “我以前工作忙,不常在家。”他说。 “现在不忙了?” “现在……不太忙。” 林晚晴没追问。 到了五楼,两家门对门,韩路一把购物袋放在501门口。 这时候怀里的小女孩突然抬起头,瞪著一双圆溜溜的大眼睛看韩路一。 泪痕还没干,睫毛上掛著水珠,但她已经不哭了,神情里多了一种小孩子特有的好奇。 “大哥哥。”她突然说。 “嗯?” 小女孩歪著脑袋,认真地看了韩路一好几秒。 “你眼睛好亮。” 韩路一心里“咯噔”一下。 视界还开著。 他不动声色地关掉了视界,面板消失,代码流消退,世界恢復正常。 小女孩又看了他两秒,然后兴趣转移了,把脑袋重新埋回妈妈肩膀上。 林晚晴没注意到这个细节,腾出一只手摸钥匙开门。 “谢谢你啊。”她回过头来。 韩路一注意到她犹豫了一下,大概是在想怎么称呼。 “我姓韩,韩路一。” “我叫林晚晴,这是我女儿,朵朵。” 林朵朵闷在妈妈肩膀上闷闷地说了句“朵朵”,算是自我介绍了。 韩路一笑了一下:“朵朵你好。” 林晚晴又道了一次谢,进了门。 门关上的那一刻,韩路一站在走廊里,脑子里回放著刚才面板上那行黄色的警告。 【warning:该对象存在1个待修復bug家庭纠纷(详情需lv.2解锁)】 lv.2。 他想起文档里那行字:快闪科技,核心运营数据严重异常,修復可获得大量经验。 第三章 415%的谎言 等林晚晴关上门,韩路一又打开视界。 视野右上角的数据面板亮起来: 【lv.1|精力:53/100】 【经验值:12/200】 离升级差的有点远。 他关掉视界,下楼买了份黄燜鸡米饭,边吃边想事情。 晚上九点,他洗了澡,躺在床上。 今天的经歷很魔幻,脑子太乱,先睡,让后台跑一遍gc。 闹钟设在早上七点。 第二天。 韩路一是被阳光晃醒的,比闹钟还早了十分钟。 睁开眼,开视界。 【精力值:100/100】 洗漱完毕,泡了一杯速溶咖啡,坐到电脑前。 打开某个自由开发者接单平台。 以前他偶尔会在上面接点私活,赚个零花钱。但那时候是纯凭技术和经验筛选项目,效率一般。 现在不一样了。 视界开启。 平台页面上的每一条外包需求旁边,都多了一层数据面板。 第一条:某社交app的数据接口开发。 【甲方信誉评分:31/100|实际预算:低於標价60%|隱藏需求:要求免费维护半年|赖帐概率:67%】 韩路一嘴角抽了一下,赖帐概率百分之六十七,之前就接过这种单子,验收完了对方消失,尾款永远在路上。 第二条:某教育公司的ai课程推荐算法。 【甲方信誉评分:88/100|实际预算:与標价一致|隱藏需求:无|赖帐概率:1%】 这不就是开全图吗? 他挑了几个高信誉、低赖帐率的单子,开始干活。 视界的代码扫描功能在这时候展现出了恐怖的效率。 第一个单子,电商后台优化,打开代码,扫描三秒,所有性能瓶颈和潜在bug以高亮色块的形式浮现出来。別人要花一天理解的代码架构,他看一眼就全明白了。 四十分钟,搞定。提交修復报告的时候,甲方过了好一会儿才回:这么快?你们是多少人的团队啊? 第二个单子,ai推荐算法,稍微复杂一点,但这是他的老本行了,一个小时完成。 第三个单子,资料库迁移脚本,最简单的那种,半小时。 三个单子,一上午。 平台帐户余额提示:+8200元。 以前在鼎盛的时候,税后月薪五万出头,一个工作日算两千多块。 半天赚了差不多四天的钱。 韩路一靠在椅子背上,看著那个数字。 在鼎盛卷了五年,没有过这种手感。 精力值掉到了51,代码扫描的消耗不低,三个单子加起来用了將近一半。但钱已经到帐了,剩下的时间可以关掉视界慢慢恢復。 他伸了个懒腰,关掉接单平台,打开了瀏览器。 昨天视界扫到的那条提示一直在他脑子里,快闪科技,核心运营数据严重异常,修復可获得大量经验。 他搜了一下快闪科技,打开官网,开了视界。 就一秒。 视野里“啪”地炸开一片刺目的红。 整个页面都被一层红色覆盖了。 一行巨大的警告浮现在正中央。 【严重异常!!!】 【该公司公开dau数据与系统推算真实数据偏差率>400%】 【数据造假概率:99.7%】 【关联风险:用户隱私数据异常调用,详情需主动扫描】 四倍。 dau造假四倍,十个亿融资,建在这种数据上。 他拿起手机,在应用商店搜“快闪”,下载,安装。 先扫快闪的公开资料,官网、应用商店页面、公开的融资新闻稿。 视界叠上去的数据图层把每一组公开数据都標註了“真实偏差”。 註册用户:官方宣称8000万。 【系统推算真实值:约2300万|偏差率:248%】 月活用户:官方宣称6000万。 【系统推算真实值:约1400万|偏差率:329%】 日活用户:官方宣称3500万。 【系统推算真实值:约680万|偏差率:415%】 每一组数据旁边都掛著红色標籤。 韩路一的目光在三行数字之间来回扫了两遍。 等等。 表面上看,8000万註册、3500万日活,日活率43%,完全合理。 但视界给出的真实註册只有2300万。 3500万日活,2300万真实註册,日活比真实用户总数还多出一千多万。 就算每个真实用户天天登录,也凑不出3500万,多出来的人从哪来的? 精力值在快速下降,50,46,42…… 韩路一带著这个问题加快了速度,他拿起手机,打开刚下载的快闪app,隨手刷了几条视频。 视界同时在扫描底层数据的流动。 视界扫描了十五秒,弹出一连串红色警告。 【严重异常1|app实际读取:通讯录、简讯记录、gps轨跡|用户协议声明范围:基本设备信息|超范围採集】 通讯录、简讯记录、gps轨跡,快闪在偷2300万用户的一切。 视界继续深入,后端架构的轮廓像洋葱一样一层层剥开,一个隱藏极深的模块浮出水面。 【严重异常2|检测到“用户行为模擬引擎”|输入:真实用户隱私数据(行为模式/社交关係/地理轨跡)|输出:批量虚擬活跃帐户|当前虚擬帐户规模:约2800万】 韩路一的脊背一凉。 但视界还没扫完。又一条红色警告弹出来,这次刺眼得让他眯了下眼。 【严重异常3|检测到“境外数据传输通道”|数据偽装为cdn图片流量外传|中转节点:三层跳板,落地东南亚|流向:灰色產业链】 拼图的最后一块落进去了。 快闪偷来的隱私数据是原料,2300万真实用户的行为模式被餵进模擬引擎,批量造出了2800万以假乱真的“活跃用户”。这些虚擬帐户会刷视频、点讚、留言,行为模式照搬真人,从外面几乎看不出破绽。 与此同时,同一批数据还在经多层跳板流向境外。通讯录、简讯、gps轨跡——这些东西到了灰產手里能干什么,韩路一想都不敢想吗,仿冒身份、精准诈骗、大数据杀熟,每一条都是真金白银的生意。 680万真人加上2800万幽灵,凑成了3500万日活的漂亮数字。 一条完美的造假链:偷数据→仿真人→充日活→骗融资,而数据本身还被卖了第二遍。 十个亿的融资是骗来的,还赚著卖隱私给灰產的黑心钱,两头吃。 这些信息的衝击力太大了,韩路一关掉视界,缓了好一会儿。 他打开了一个新的文本文件,把刚才看到的所有信息凭记忆敲了进去:数据偏差、隱私窃取、境外流出、行为模擬引擎、造假链条,分条列明。 全部记完之后,他看著这份文件沉默了一会儿。 这份东西的来源没法解释。 他需要一条乾净的证据链,每一步都经得起追问。 韩路一开始收集证据。 先做apk逆向,快闪的安装包反编译后,可以看到资料库接口,用户id是自增主键,最大值停在2300万附近。官方宣称8000万註册,差了三倍多。 再掛代理抓包,手机连上笔记本的抓包工具,打开快闪隨便刷了几分钟,网络请求一条条列出来,从中抓出几条极隱蔽的指向新加坡ip的加密请求。 最后写爬虫,一段脚本抓取快闪公开页面上“活跃用户”的行为数据,跑了半小时,结果出来了,大量帐號的点讚间隔、瀏览路径、活跃时段高度雷同,呈明显的机器生成特徵。 三份证据保存好,这才是能摆上檯面的东西。 韩路一再次点进快闪官网的“关於我们”页面。 联合创始人兼cto:周明哲。 这张脸他见过,去年鼎盛年会,王志远那桌,坐他右手边的那个人,陈博文还过去敬了酒。 vp请外面的人来年会太常见了,他当时没在意,但现在这张脸出现在快闪的cto栏里,韩路一心里划了一个小小的问號。 韩路一面前摆著两条路。 第一条:当没看见,把刚才的东西都刪掉,没有任何风险。 第二条:把这些东西捅出去。 怎么选? 快闪背后是十个亿的融资、头部vc的站台、专属法务团队。他有什么?一份不能说明来源的证据。 但如果不管—— 2300万人的隱私每天都在流向深渊,变成对你嘘寒问暖的杀猪盘、变成能报出你身份证號的“客服退款”、变成自称广东公安的“陈警官”。 想到这,他拿起手机,翻开微信,找到一个名叫【404寢室】的群聊。 窗外天已经黑了,手机屏幕的光映在他脸上。 一个刚失业的程式设计师,去对抗一家百亿估值的公司。 听起来像个笑话。 但…… 韩路一打了一行字:“晚上出来搓一顿,我请,有正事。” 第四章 堂吉訶德的衝锋 马小飞三秒內回覆:“???老韩你主动请客?说吧让我干谁?我两肋插刀!” 张浩然慢了两分钟:“下班后可以,老地方?” “老地方。” 老地方是大学城旁边一家叫“再来一串”的烧烤摊。 老板换了三任,烤串的味道换了三个风格,但404寢室的三个人每次聚会都来这儿。 晚上七点半,三个人坐在露天的塑料凳上,面前摆著六十串烤肉、一盆小龙虾和三瓶啤酒。 “先说正事。”马小飞举起啤酒瓶指著韩路一,“老韩,你被鼎盛优化了?” “嗯,昨天的事。” “臥槽!”马小飞表情夸张到像在演小品,“你p7啊!你一个p7的算法工程师被优化了?鼎盛是疯了吗?” “陈博文把我的项目摘了。” “操他……”马小飞拍了一下桌子,小龙虾汤溅出来两滴,“这种人你不告他?” 张浩然在旁边默默剥虾,声音不大:“告不了,项目归属公司,署名权这个东西在大厂基本是灰色地带。” “那也太他妈欺负人了!” 韩路一笑了笑,喝了一口啤酒,他打开视界,好奇两个兄弟的面板长什么样。 马小飞的面板弹出来了。 【马小飞|26岁|自媒体博主/自由摄影师】 【情绪:义愤】 【隱藏情绪:嫉妒(韩路一居然还是不禿)】 【核心焦虑:帐號涨粉瓶颈期】 本书首发 101 看书网解闷好,????????????.??????超顺畅 ,提供给你无错章节,无乱序章节的阅读体验 【粉丝总量:4.7万|当月收入:¥8200】 韩路一差点没绷住,嫉妒他不禿。 再看张浩然。 【张浩然|26岁|海城兴隆银行信息技术部主管】 【情绪:担忧(为韩路一)】 【隱藏情绪:无】 【核心焦虑:月底房贷¥11400】 韩路一关掉视界,笑著又喝了一口。 “不说我了。”他把话题引开,“小飞,你最近在追什么选题?” 马小飞来了精神,咬牙切齿的精神。 “你不说我还想说呢,快闪你知道吧?那个短视频app。” “快闪怎么了?” “我被那帮孙子坑了,”马小飞把啤酒瓶往桌上一顿,“坑惨了。” 韩路一夹虾的手停了一下:“怎么回事?” “上个月我接了一单推广,一个护肤品牌找我在快闪上投信息流gg,品牌方出预算,我负责內容和投放。”马小飞越说脸越黑,“我跟你讲,我把这单当翻身仗来打的,自己贴了一万二的製作费,拍了三条视频,熬了半个月。” “然后呢?” “然后投上去,效果稀烂。快闪官方说月活八千万,按他们公布的流量模型,我那条gg至少应该有五十万曝光,结果实际只有八万。八万!转化率更离谱,品牌方预期的roi完全没达到。” 马小飞一口啤酒灌下去:“品牌方觉得是我內容做得烂,尾款两万块直接不付了。我找快闪客服投诉数据有问题,你猜人家怎么说?“投放效果受多种因素影响,建议优化內容质量。”” “尾款没追回来?”张浩然问。 “追个屁。品牌方说没达到kpi就是没达到,合同里白纸黑字写著。我总不能告诉人家“快闪数据注水所以效果差”吧?我拿什么证明?”马小飞搓了搓脸,“一万二製作费打水漂,两万尾款没了,三万二!我一个月才赚八千多!” 韩路一看著他的表情,感觉他都快吐血了。 “后来我不死心,又花了一个星期扒他们的公开数据。cpm、用户活跃曲线、gg填充率,全都对不上。”马小飞压低声音,“老韩我跟你说,他们的数据至少注了三倍水,但我没有技术能力去证明,只能从投放数据反推,不够硬。我要是发出去,快闪法务分分钟告我誹谤。” 实际是四倍以上。 张浩然在旁边开口了:“快闪b轮的领投方是星辰资本和云帆创投,这两家都不是小机构,尽调应该做过了,如果数据真有这么大的水分,投资方不可能看不出来。” “那就是投资方也被骗了唄。”马小飞说。 “或者投资方知道,但装不知道。”张浩然用筷子点了点桌面,“击鼓传花,只要能在下一轮之前把估值做上去,接盘的不是他们就行。” 韩路一想起下午在快闪团队页看到的那张脸,问了一句:“快闪的cto周明哲,你听说过吗?” 张浩然剥虾的手停了。“周明哲?”他皱了下眉,“这名字……等等,他是不是之前在鼎盛?” “嗯,年会我见过他,坐王志远那桌。” “对。”张浩然放下筷子,“他是王志远带出来的,2023年从鼎盛离职的,之前在王志远手底下干了三年技术,走的时候鼎盛內部还有人议论。” 马小飞在旁边听得两只眼睛越瞪越大:“等一下,快闪的cto是鼎盛vp的老部下?” “大厂的人出去创业太常见了。”张浩然说,但他顿了一下,语气变得谨慎,“不过我上个月帮行里做合规审查的时候,扫到过快闪天使轮的一笔投资,走的壳公司,结构上像个人投资通道,不像正规机构行为。” 他没继续说。 韩路一喝了口啤酒,快闪的水,比他想的要深。 他看向张浩然,这人平时话不多,但看问题的角度总是很准。 “假设,”韩路一斟酌著用词,“假设有人拿到了快闪数据造假或者盗取隱私的硬证据,技术层面的那种,怎么处理比较稳妥?” 张浩然抬头看了他一眼。 “除非是竞对的那几个大公司,普通人要举报他们不是以卵击石吗?人家法务也不是吃素的……” 话没说完,马小飞停下来,也看了他一眼。 “老韩,”马小飞放下啤酒瓶,“你是不是知道点什么?” “我隨便假设。” “你这个表情可不太隨便。” 韩路一没接话,喝了口啤酒。 张浩然想了想,说:“如果真有硬证据,直接举报不是最优选择,快闪估值百亿,法务团队肯定有准备的,最稳妥的做法是走匿名渠道,找专业媒体,但在这之前——” 他从手机里翻出一张电子名片,推到韩路一面前。 “得先找个靠谱的律师,搞清楚法律风险。” 名片上写著:顾司玥,海城博衡律师事务所,高级合伙人。 “这是?”韩路一问。 “我们银行的外聘法律顾问之一,做网际网路和智慧財產权诉讼的,非常厉害。”张浩然说,“人有点冷,但专业能力没得说。” 韩路一把名片存了下来。 马小飞在旁边看看这个看看那个,觉得自己成了一条嗅觉敏锐的自媒体猎犬:“你们俩这什么眼神?到底怎么回事?老韩你是真的有料对不对?” “我真的是隨便假设。” “我信你是秦始皇。” “说真的老韩,你接下来打算干嘛?”马小飞问。 “先接点私活,”韩路一说的是实话,“然后看看有没有什么想做的。” “你这技术水平,出去创业分分钟的事。” “创业这东西不是光有技术就行的。” “行了行了,”马小飞站起来去结帐,“今天算我请,改天你发財了记得带上兄弟。” “不是说我请吗?” “你刚失业呢你请什么请!”马小飞把他摁回塑料凳上,“这种时候还跟我抢买单?给我省省吧老韩。” 韩路一笑了笑,没再爭。 回到家,韩路一坐到电脑前,打开了下午记录快闪问题的那个文本文件。 张浩然说得对,先找律师。 韩路一拿起手机,翻到张浩然发来的那张电子名片。 顾司玥,海城博衡律师事务所。 打开博衡律师事务所的官网,找到了在线预约页面,填了一个明天上午的諮询预约。 姓名:韩路一。 諮询方向:网际网路企业数据合规。 备註:涉及用户隱私安全的技术举报需要法律评估。 发送。 第五章 两千三百万分之一 博衡律师事务所在陆家嘴一栋写字楼。 韩路一站在大堂的楼层指示牌前,看了一眼手錶,上午十点差两分钟。他今天特意换了件乾净的衬衫,头髮也拢了拢,陆家嘴的律所,穿运动服进去不太合適。 电梯停在十九楼。 前台是全透明玻璃墙设计,黑胡桃木前台上摆著一枝白色马蹄莲,墙上掛著一排律师照片和执业资质,金色铭牌刻著“博衡律师事务所”。 “您好,请问有预约吗?” “韩路一,预约了十点的諮询,顾司玥律师。” 前台翻了一下电脑,点点头:“顾律师在会议室等您了,这边请。” 来到会议室门前,前台敲了敲虚掩的门。 “顾律师,您十点的客人到了。” 会议室不大,一张六人位的会议桌,窗外能看到半截陆家嘴的天际线,桌子一头坐著一个人。 她身穿黑色西装,白衬衫,黑色长直发在脑后束成一个低马尾,几乎没有碎发,细框眼镜下面是一张线条分明的脸,很白,嘴唇抿成一条直线。 整个人像一份排版严谨的法律文书。 顾司玥从笔记本电脑后面抬起头,看了他一眼,站起来,没有笑容,只是微微点了一下头,伸手示意她对面的座位,整套动作加起来不超过两秒,然后重新坐下。 “请坐。” 韩路一坐下来。张浩然说“有点冷”,这叫有点? “顾律师,我——” 【记住全网最快小説站 海量小说在 101 看书网,101??????.??????等你寻 】 “韩路一,前鼎盛集团算法工程师,p7,今年二月被裁员,諮询方向数据合规,备註写的技术举报。“她翻了一页本子,“你的公开背景我查过了。“ 韩路一眨了一下眼:“……效率挺高,我连自我介绍都省了。” “諮询按小时收费,”顾司玥合上笔记本电脑,终於正眼看他,“说吧,什么情况。” 韩路一开了视界。 数据面板在顾司玥身上浮现。 【顾司玥|28岁|博衡律师事务所高级合伙人】 他多看了一眼,面板展开了详情。 【情绪:公事公办(隱藏:略微好奇)】 【评价:又一个程式设计师?】 【逻辑推理能力:异常值(outlier)】 又一个程式设计师?这五个字配上问號,信息量很大。说明找她諮询的程式设计师不少,而且她对这个群体的整体评价不太高。 视界给人打標籤,韩路一见过“优秀““较强“,没见过直接標“异常值“的。这是数据偏离正常分布太远,视界不好给评分了。 他关掉视界。 “我在一个公开渠道下载的app上,发现了一些数据异常。” “哪个app?” “快闪。” 顾司玥的表情没有任何变化,拿起了桌上的笔。 韩路一提前准备好了一份说辞,他不能暴露金手指,所以要把“视界扫描”包装成“技术分析”,好在他確实有技术能力支撑这个说法。 “我下载快闪的app后,出於职业习惯做了一些技术层面的观察,app运行时的网络请求行为和它在用户协议中声明的数据採集范围有明显不一致。” “具体呢?” “两个层面,”韩路一竖起手指,“第一,隱私窃取,app实际读取通讯录、简讯记录、gps轨跡,但用户协议只声明了基本设备信息,严重超范围採集,而且这些隱私数据被加密后发往东南亚的ip。” “东南亚?”顾司玥把笔放下,身子靠近了桌面。 “第二,数据造假。”韩路一说,“我对apk做了反编译,用户id自增主键最大值约2300万,但官方宣称註册用户8000万。然后我用爬虫抓了公开页面的活跃用户数据,大量帐號的行为模式高度雷同,呈机器生成特徵。更离谱的是——官方宣称日活3500万,比真实註册还多,多出来的全是假的。” “影响范围?” “约2300万註册用户的隱私数据被窃取,b轮十个亿融资的估值基础全建在假数据上。” “你说的这些,有什么证据?” “apk抓包记录、爬虫数据、行为分析报告,全部做了脱敏处理,只涉及app公开行为,没碰过任何后端代码或者伺服器。” “你確定?” “確定,所有操作都在合法范围內——下载公开app,反编译公开安装包,抓取公开页面数据,都是正常的安全研究。” 顾司玥看了他几秒。 那几秒钟让韩路一有一种被x光扫描的感觉。 “假设你的技术能力是够的,但技术能力和法律安全是两回事,你知道快闪是什么体量的公司吗?”她开口道。 “b轮融资十个亿,估值一百亿。” “对,一百亿,法务团队至少二十人,还有外聘律所,你如果实名举报,他们有一百种方法让你后悔。” 顾司玥把双手放在本子上,手指交叉,看著他。 “我需要问你几个问题。” “请说。” “你跟快闪有劳动关係吗?” “没有。” “投资关係?竞业关係?商业纠纷?” “都没有。” “你不是快闪的员工,不是投资人,不是竞爭对手,甚至不是被快闪直接侵害过利益的当事人。”顾司玥的语速没有变,但每个字都在收紧,“你是一个刚被別的公司裁员的程式设计师,你现在要做的事,是去举报一家百亿估值的公司。” 她停顿了一下。 “为什么?” 这个问题问得很直接。 对一个律师来说,委託人的动机决定了这个案子值不值得接,一个没有利害关係的人要去戳百亿公司的眼睛,要么是傻,要么是圣人,要么是有没说出来的原因,三种都不好接。 “你说我不是被直接侵害过利益的当事人,这一点不对。”他说。 顾司玥微微抬了一下眉毛。 “我下载了快闪。”韩路一说,“我的手机里有我朋友的电话、我的聊天记录、我每天去了哪里,从我安装这个app的那一刻起,这些数据就被偷走了,被卖给不知道哪个灰色產业链。” 他停了一下。 “我就是那两千三百万人之一。” 顾司玥没说话。 “我一个兄弟是做自媒体的,上个月在快闪投了一单gg,因为数据注水,效果远低於预期,品牌方不付尾款,他自己贴了一万多的製作费,全打了水漂,他一个月才赚八千块。”韩路一的语气平静,“他没有技术能力去证明快闪造假,他能怎么办?找客服投诉?人家让他“优化內容质量”。” 顾司玥的手在本子上轻轻点了一下。 “我前天刚被公司裁员。”韩路一说,“原因我不多说了,大公司欺负小人物这种事,我刚经歷完一遍,快闪乾的是同一套,我是大公司,我掌握数据,用户是小人物,我想怎么用就怎么用,反正你们看不到。” 他看著顾司玥的眼睛。 “现在我看到了。” 会议室安静了几秒。 顾司玥看了他一会儿,然后她拿起笔,重新翻开本子。 “两千三百万人里,只有你一个人跑来找律师。” “两千三百万人里,有我一个就够了。” 第六章 七十二小时 “两千三百万人里,有我一个就够了。” 顾司玥没有评价这句话。 “数据造假是商业欺诈,罚款加赔偿,性质上是钱的事。”顾司玥的语速放慢了半拍,“但数据出境不一样。2300万用户的通讯录、gps轨跡未经安全评估流向境外,这是数据安全法和个人信息保护法的双重红线。直接责任人要追刑责,三到七年。下游数据流入诈骗链条的话,还得加一条侵犯公民个人信息罪,数罪併罚。” “你知道这意味著什么吗?”她盯著韩路一缓缓道,“这不是商业丑闻,这是刑事案件。” “所以我应该直接报公安?” “你来找我是对的。”顾司玥说,“我不建议直接报案。” “第一,百亿估值的公司,社会关係不会简单。报案材料递进去,从受理到立案到调查,每一步都有时间差。快闪的法务团队只需要一个电话,境外传输通道关掉,伺服器日誌清乾净,你的证据指向一堆空气。” “第二,报案流程里你的身份很难完全保密。快闪的律师有一百种合法手段拿到举报人信息,到时候会有人想让你的生活过不下去。” “要报,但不是你报。”顾司玥说,“网信办、工信部和网安的举报材料我来擬,以律师名义递,同时走媒体,让报导造势,两条线一起推,你可以隱身。” 韩路一点了点头。 顾司玥开始在本子上写字。 “方案分为三层。”她落笔极快,“第一,匿名举报;第二,证据公证,你的分析材料具备法律效力,转交给我;第三,法律防火墙,快闪找到你头上的任何接触都通过我中转。” 她抬起眼睛看著韩路一。 “按我说的做,他们找不到你,自作聪明的话,我也救不了你。” 韩路一开口道:“收费怎么算?” “諮询费每小时两千。”顾司玥合上笔记本,“后续业务打包给你一万。” 韩路一提前了解过了,这种业务一般是五到十万,一万的价格是超级折扣了,他偷偷打开视界。 【顾司玥|情绪变化:公事公办→微妙的认可|评价升级:有正义感的傻子】 “行,按你说的来。” 顾司玥站起来收东西,走到门口,她停下补充了一句。 “你有七十二小时。” 韩路一愣了一下。 “快闪下周二有投资人闭门会,b轮交割的最后环节,会前引爆最好。”她的语气严肃,“过了这个窗口,b轮融资一旦完成,举报的后果更不可控。” 韩路一算了一下,今天周五,周二闭门会,还有七十二小时。 “另外,事情做乾净,这家公司背后不简单。” 说完她推门出去了。 韩路一站在会议室里,回味著最后两句话,他这次见面得到的信息比想像的多得多。 倒计时开始了。 —— day 1 韩路一从律所出来,在地铁上用手机备忘录整理思路。回到家花了两个小时,把快闪的技术分析写成一份十二页的脱敏报告。数据不涉及任何非公开信息,但逻辑链完整,结论清晰,不懂技术的人也能看明白快闪在干什么。 完成后拆成两个版本,完整版给监管,精简版给媒体。 下午,公证处。 工作人员的脸色一边看报告一边变化,从礼貌微笑变成面无表情,又从面无表情变成反覆翻页確认。 “先生,您確定这份材料可以公开?” “確定,全部是公开可获取的信息。” 盖章,签字,公证书到手,一共花了四十分钟。 出了公证处,韩路一打了三通电话。 第一个,顾司玥。 “公证完了,举报材料什么时候递?” “今晚,匿名渠道已经安排好了,我的助理会联繫你。” 第二个,马小飞。 “举报快闪,你那有媒体的路子吗?” 电话那头安静了三秒,马小飞的声音切换成了韩路一很少听到的认真模式:“你有硬东西?” “已经公证了,法律程序都完善,但必须走正规媒体首发,自媒体发,快闪法务直接告你誹谤。” “我认识的36度的编辑老赵,我今天联繫他。老韩我跟你说,那帮孙子坑了我三万二,这事要是成了……” “我这可不是给你报私仇,这是2300万用户的隱私安全。” “行行行你高尚,但我也顺便报仇。” “对了,你別说是我,有律师替我出面。” 第三个,张浩然。 “能帮我从金融侧梳理一下快闪的融资链条吗?公开信息,看估值逻辑站不站得住。” 电话那头敲了两下键盘。“快闪?你要动手了?”张浩然哼了一声,“我早觉得他们的增长曲线有鬼,给我一天。” 三条线同时启动。 晚上九点,顾司玥发来消息:“举报材料已递出。从现在开始,不要主动联繫任何记者,不要发社交媒体,你对任何人说的每一句话,都默认可能被取证。” “明白。” ““任何人”包括你那两个朋友。” 韩路一看著这条消息,觉得这个律师过於稳健。 倒计时:48小时。 —— day 2 凌晨两点,马小飞转来老赵的消息。老赵看完材料,“声音都在抖”,还追问他那个律师朋友怎么有这种猛料。36度编辑团队已经连夜启动了交叉验证。 但紧跟著第二条消息让韩路一坐了起来。 老赵说:快闪的公关部似乎嗅到了什么,今天下午开始密集约行业媒体“沟通”,疑似在做舆论预案。如果不加速,对方可能抢先发闢谣声明把水搅浑。 韩路一打开快闪app,开了视界。 他的脸色变了。 快闪昨晚悄悄推送了一次热更新,更新日誌写的是“优化用户体验”,但视界清清楚楚地看到,隱私数据採集通道正在被逐步关闭,窃取用户隱私的接口有三个已经停用,剩下两个在做代码混淆。 他们在刪痕跡。 精力值掉了11点,韩路一关掉视界,给顾司玥发消息。 “快闪昨晚紧急更新app,在关闭隱私导出通道。他们开始销毁证据了。” 顾司玥三十秒后回了几个字:“提前十二小时。” 韩路一盯著这条消息。原计划周二早晨发布,现在要提前到周一晚上,留给36度的审稿时间又短了半天。 下午,张浩然的金融分析到了。一天就做完了,快闪的融资链条、股权结构、资金流向,全部用公开数据梳理清楚。结论:b轮估值的逻辑完全建立在注水数据上。数据一垮,估值就是空中楼阁。 三条线的材料齐了,就看36度审稿了。 倒计时:22小时。 —— day 3,上午。 韩路一把快闪紧急更新前后的数据对比截图发给顾司玥。销毁证据这个行为本身,就是最好的证据。匿名渠道追加提交。 上午十点,马小飞接到老赵的一条语音,就一句“內审过了”,后面跟著一声长长的呼气。一天半的交叉验证,三个匿名信源的补充採访,过了。张浩然的金融分析又马小飞同步转给老赵作辅助材料。 下午四点,404寢室群弹出一条消息,四个字。 “晚上八点。” 韩路一盯著屏幕,脖子酸得转不动,桌上摆著三杯外卖咖啡,喝的还剩半杯。 顾司玥发来最后一条:“准备好了?” “准备好了。” 韩路一关掉手机屏幕,窗外是海城的午后阳光,隔壁隱约传来林朵朵看动画片的声音,一切都很平静。 他起身,打算去床上闭两个小时的眼。 手机调了八点的闹钟。 第七章 引爆 晚上八点整。 韩路一坐在电脑前,刷新了一下36度科技频道的页面。 报导上线了。 標题:《独家调查:快闪科技核心运营数据涉嫌大规模造假,2300万用户隱私或遭泄露》。 他没有做任何事,没有转发,没有评论,没有在任何平台提一个字。 十分钟,科技圈的媒体炸锅了,马小飞在404寢室群里发了一串感嘆號,张浩然发了一个句號,韩路一没回。 三十分钟,微博热搜第九。 一个小时,热搜第三,话题阅读量破两亿,评论区以每秒刷新的速度在增长。 “2300万用户的隱私就这么偷?快闪你是认真的吗?” “星辰资本那帮人怕是睡不著了,b轮的钱还没捂热就炸了。” “数据还往境外送???这不是泄露,这是卖了吧?怪不得我最近老接到诈骗电话,精准报我名那种。” 两个小时,快闪科技官方发布紧急声明,措辞模糊,既不承认也不否认:“正在核实相关信息,將第一时间向公眾通报。” 翻译一下就是“我们在想怎么圆”。 三个小时,星辰资本发布简短声明:“已关注相关报导,正在与快闪管理层沟通。” 资本市场的反应比舆论更快,快闪的b轮交割暂停了,周二的投资人闭门会直接取消了。 韩路一打开报导页面,打开视界。 【该报导阅读量:287万(上升中)】 【舆论影响力评级:a】 【快闪科技估值实时波动:-22%(下降中)】 他关掉视界。 手机响了。 顾司玥。 “你看到新闻了?”韩路一接起来。 “看到了,写得很克制,全靠数据说话。”顾司玥的声音听不出什么波动,“法律层面你放心,他们查不到你。” 顾司玥在电话那头停了两秒。 “做得不错。” 然后掛了。 韩路一看著手机,花了几秒钟消化这四个字。顾司玥说“做得不错”,大概相当於马小飞说“臥槽牛逼”吧。 他笑了一下,放下手机。 评论区还在以每分钟两位数的速度增长。 与此同时,技术圈开始追查那份匿名技术分析的作者了。 有人在论坛上逐段分析报告的行文风格和技术视角,有人猜是某大厂的安全工程师,有人猜是竞品公司的人在搞事,有人甚至猜是快闪內部的吹哨人,“对底层技术架构太熟了,不像外部渗透”。 一个id叫“逆向工程老王”的用户发了一条长帖,从报告中对base64的吐槽方式、对数据管道的描述习惯、对隱私合规的技术理解深度三个维度做了画像分析,结论是:“作者大概率是一线大厂的后端或算法工程师,工作年限五年以上,对app行为分析有实战经验。” 距离猜到韩路一,还差几步。 但没有人往“刚被裁员的前鼎盛p7”这个方向想,一个失业程式设计师,被排除在所有人的视线之外,不在候选名单上。 韩路一把这个帖子收藏了,关掉了瀏览器。 顾司玥的话还在耳边,“法律层面你是乾净的,他们查不到你。” 人肉搜索可不走法律渠道。 他需要继续保持隱身。 就在这时候,视界自动弹开了。 整个视野里涌进一道巨大的系统提示,金色的,占据了他半个视野。 【重大漏洞修復协助完成】 【影响范围:2300万用户隱私安全】 【你的行动推动了该漏洞的公开和修復进程】 【经验值+200】 【当前经验值:212/200】 【升级条件已满足!】 【正在升级……lv.1→ lv.2】 眼前的世界碎裂了,像一台电脑强制重启,所有画面闪烁、断裂、重组,他感觉自己的大脑被格式化了一遍,然后重新安装了作业系统。 重启持续了几秒钟。 当一切稳定下来的时候,视界面板已经变了。 【升级完成】 【lv.2|精力:83/250】 韩路一盯著面板看了一会。 就这? 等级从1变成了2,精力上限翻了一倍多,然后……没了? 但他立刻发现了不同。 视野里的信息变多了,之前只能感知到身边几米的范围,现在整栋楼的数据都在往他眼睛里灌,隔壁林晚晴家里的面板隱约浮现在视野边缘,楼上楼下住户的数据以半透明图层的形式叠在空间里。 信息量比之前大了十倍不止,他赶紧关掉了全范围扫描,只保留近距离的被动感知。 还有一个更重要的变化。 他打开笔记本电脑,点进最近一个接单项目的代码仓库。 之前在lv.1看代码,bug的位置会亮红光,旁边飘一行简短的警告,標註错误类型。看到了,然后呢?还是得自己分析,自己想方案,自己改。 现在不一样了。 每一个红色標记后面,都跟著一整块展开的修復路径。改哪个文件、改哪一行、怎么改、改完之后有什么影响——全部列得清清楚楚,像一份写好的处方。 韩路一盯著屏幕上下滑动。 他隨便点开一个標记为严重的bug,是资料库连接池泄漏,之前他接单的时候已经手动修过了,但修復路径给出的方案比他的更优——不只是补上了泄漏,还顺带优化了连接池的回收策略。 如果升级之前他是拿著放大镜找虫子的人,现在他手里多了一本《害虫防治指南》。 他又看了一眼面板——精力值在缓慢下降,深层扫描比之前费精力了,但上限也翻了一倍多,足够用。 韩路一关掉代码仓库,往椅背上一靠。 闭上眼睛,才发现身体状態出奇的好,连日赶报告、做公证、来回跑,身体的疲惫的要死,现在全都消失了。 这是升级的赠品吗? 韩路一从椅子上跳起来,神清气爽。 该做正事了。 韩路一拿起手机。 他想给马小飞和张浩然说点什么,但想起顾司玥的话,“你对任何人说的每一句话,都默认可能被取证。” 算了,不说了。 他退出微信的时候,屏幕顶部跳出来一条新消息提醒。 一个他已经很久没看到的头像。 苏念念。 “路一?好久不见。听说你从鼎盛出来了?” 韩路一看著这条消息,怔了两秒。 苏念念…… 两年多没联繫了,上一次有交集还是23年国庆节,他在朋友圈发了一张加班工位的照片,她在底下回了句“注意身体”。 他的手指悬在屏幕上方,没有打字,脑子里闪过了几个画面,三食堂门口她冲他挥手的样子,图书馆里她趴在桌上睡著的侧脸,毕业散伙饭上全班举杯的嘈杂。 很快,像弹幕一样划过去了。 最后他打了四个字。 “嗯,出来了” 消息发出去不到两秒,对话框里苏念念的名字变成了: 对方正在输入… 第八章 好久不见 苏念念的微信回得很快。 “太突然了吧!你怎么也不在群里说一声?” “没什么好说的,正常流动。” “你还是这样,什么事到你嘴里都是四个字就打发了!” 韩路一看著屏幕笑了一下。苏念念说话的风格一点没变,打字永远带感嘆號,像怕对方感受不到她的情绪。 “最近怎么样?”他问。 “还活著。你呢?有什么打算吗?” “先休息一下,想想接下来干什么。” “那要不要出来坐坐?好久没见了,敘敘旧。” 韩路一打了几个字又刪掉,最后回了个“行”。 苏念念发过来一个定位。 bug café。 韩路一愣了一下。这家咖啡馆在他家附近,离小区走路十分钟,他几乎每周都去坐一坐。老周的咖啡不算最好喝,但胜在安静,wifi稳定,程式设计师扎堆的地方总有一种特殊的鬆弛感。 苏念念怎么知道这个地方的? “大眾点评搜的,评分还挺高。而且离你近,別跟我客气说你来接我之类的。” 苏念念说她明天下午在附近见个客户,三点左右能结束,“正好过来坐坐?” 韩路一说行。 关掉微信,他靠在椅背上看著天花板。 两年多的空白说长不长,说短也不短。够一个人换两份工作,够一座城市拆掉一条街再盖起来,够两个曾经每天说话的人变成通讯录里埋在下面的一个静静地头像。 第二天下午两点五十,韩路一推开了bug café的门。 老周的咖啡馆开在社区底商的一楼,门口掛著一块黑色招牌,上面画了一只举著咖啡杯的瓢虫,bug的双关。店里不大,十来张桌子,墙上贴满了各种编程梗的海报。最显眼的一张写著“it works on my machine”,旁边老周自己加了一行手写体:那就別动它。 “小韩!”老周在吧檯后面抬头,四十多岁的中年男人,退役程式设计师,头髮比同龄人少一半,脾气比同龄人好一倍,“美式还是手冲?” “先来杯美式,周哥。等会儿还有个朋友来。” “约人?稀奇。你来这儿半年了,头回带朋友。” “大学同学,好久没见。” 老周瞭然地点点头,没再多问。 韩路一选了靠窗的位置坐下。阳光从落地窗照进来,把桌上那本翻旧了的《代码大全》晒得发黄。 三点零二分,门被推开了。 苏念念站在门口。 韩路一一抬头就认出来了。变了,也没变。 头髮还是长的,但没有大学时那么长了,到肩胛骨的位置,微微有些卷。她穿了一件米白色的针织开衫,里面是白色连衣裙,踩著一双白色帆布鞋。脖子上戴了一个白色的choker,缀著一颗很小的珍珠。左手腕上一只细细的银鐲子,没有別的多余配饰。整个人还是那种乾乾净净的白色系,像从牛奶gg里走出来的。 她整个人看起来比大学时瘦了一点,下巴的线条更明显了,但笑起来还是那个样子,眼睛先弯,嘴角再跟上,像是笑容从眼睛里淌出来的。 “路一!” 苏念念看到他就笑了,朝他挥挥手,步子加快了一点,在他对面坐下来。 “念念。”韩路一也笑了,很自然地打招呼,“两年没见,你怎么瘦了?” “加班加瘦的,我们那个组一个月上了四个版本,我都快住公司了。”苏念念放下包,打量了一下他,“你倒是一点没变,还是这副样子。” “什么样子?” “就……卫衣牛仔裤运动鞋,程式设计师出厂设置。” “哪个程式设计师出厂设置有我这么帅?” 苏念念笑了,没接这个话,转头看了看店里的装潢:“这家店好有意思,墙上那个404页面是真的吗?” “老板自己写的,他以前也是程式设计师,写了十五年代码写禿了,退休开咖啡馆。” “好傢伙,前车之鑑就摆在你面前。” “我发量很健康,谢谢关心。” 老周端著两杯咖啡走过来。韩路一一杯美式,苏念念的菜单还没看,老周就先放了一杯招牌拿铁下来。 “小韩难得带朋友来,这杯我请。”老周冲苏念念笑了笑。 “谢谢老板!”苏念念双手接过杯子。 老周走了,苏念念低头喝了一口拿铁,抬头的时候嘴角沾了一点奶泡。 “所以你从鼎盛出来之后在干嘛?”苏念念问。 “接点散单,写写代码,想想接下来的方向。” “自由职业?” “算是吧,暂时的。” 苏念念点点头:“也好,反正你技术在那儿摆著,饿不死。” “你倒是对我挺有信心。” “那当然了,全班谁不知道你是卷王。”苏念念的语气很轻鬆,“大二那年你一个人肝作业系统课设,把教授都给整懵了,他说他看了十五年作业,头回见本科生完成度这么高的。” 韩路一被她说笑了:“你记性也太好了。” “那个事太经典了。”苏念念双手捧著杯子,眼睛弯弯的,“还有大三下学期那个比赛,你带队熬了三个通宵,比完赛直接睡在机房地板上,被保洁阿姨拿拖把捅醒的那次,” “行了行了,”韩路一摆手,“能不能说点我帅的事。” “你有帅的事?我不记得啦。” “过分了啊同学。” 两个人都笑了。 聊天很顺畅,像一台关机了两年的电脑突然通了电,系统文件还在,只需要重新启动一下,他们聊大学的食堂,聊室友的八卦,聊老师的口头禪。 所有话题都是安全区。 两个人都很默契。 韩路一觉得苏念念变了一点,大学的时候她说话更直接,想到什么说什么,现在她会在某些地方停顿一下,像是先在脑子里筛过一遍再说出口。这种谨慎並不让人觉得虚偽,只是她成熟了。 “你呢?在海狸做產品经理,怎么样?”韩路一问。 海狸科技,国內第二梯队网际网路大厂,主营短视频和本地生活,去年刚在港股上市,市值两千多亿。在网际网路圈子里,海狸的標籤是“加班狠、给钱多、晋升快”,属於那种应届生挤破头想进、工作三年后又拼命想逃的地方。 苏念念的表情稍微变了一下。 “还行吧,就那样。”她喝了一口咖啡,“最近在做一个ai方向的项目,挺有意思的。” “什么方向?” “ai代码审查工具,就是帮开发团队自动审核代码质量,找bug,给优化建议那种。” 韩路一来了兴趣:“ai现在挺热门的。” “对,所以我们老板很著急,想抢先发。”苏念念嘆了口气,“但我们技术团队做出来的东西……怎么说呢,能用,但不够好,跟市面上的竞品比没有核心竞爭力,用户测试的反馈也一般。” “一般是多一般?” “就是用户说“这个我用gpt也能干”的那种一般。” 韩路一笑了。 “更烦的是,”苏念念的语气轻描淡写,“这个项目本来是我从立项开始推的,需求文档写了几十页,用户调研也是我做的,结果上个月空降了一个总监,直接把项目负责人换成他自己的人了,我变成了“协助推进”。” “这不是……” “是,跟你一个剧本,只不过你演的是技术版,我演的是產品版。”苏念念说完自己笑了一下,“所以我听到你从鼎盛出来的消息,第一反应是,行吧,又一个。” “同病相怜啦?” “同病相怜也是一种社交动机啊。”苏念念的语气回到了轻鬆模式,“我就是想见见你,两年了嘛。” 她说这句话的时候眼睛看著窗外,语气很隨意,像是在说一件小事。 韩路一没有接这个话。 他端起美式喝了一口,沉默了两秒。 “你们那个ai代码审查,”他放下杯子,“定位的核心用户是谁?” 第九章 代码看不见的东西 苏念念愣了一下,然后眼睛亮了。 “中小型开发团队。大厂有自己的代码审查体系,不需要外部工具。但中小团队没有专门的代码审查流程,很多bug都是上线之后才发现的。” 一聊到產品她就自动进入状態了,毕竟是资深產品经理。 “所以核心需求不是“找bug”,是“上线前拦住bug”?” “对!”苏念念啪地一拍桌子,咖啡晃了一下,“你一下子就抓到点了。我写了五页用户画像才说清楚的事,你一句话就总结了。” “我也是用户嘛。写了五年代码,最怕的就是自己看不出自己的bug。” “那你觉得现有的ai代码审查工具最大的问题是什么?” 韩路一想了想:“大部分工具只能做静態分析,看代码本身的逻辑问题。但真正让团队头疼的bug,往往不是代码语法错误,而是代码和现实业务之间的错位,逻辑上没问题,但放到实际场景里就出bug。这种东西,ai看不出来。” 苏念念放下杯子,身体微微前倾:“你继续。” “比如一个电商app的推荐算法,代码逻辑没错,但上线后发现推荐结果严重偏向高价商品,低消费用户的留存率暴跌。这不是代码bug,这是代码和用户行为之间的错位。现有的ai工具分析不了这种东西,因为它只看代码,不看代码运行后的现实世界反馈。” 他说这些话的时候,脑子里闪过了什么东西。 一个模糊的、还没有成形的想法。 如果……有一款工具,不只是检查代码,而是能检测代码在现实场景中可能触发的问题呢? 这不就是他的视界在做的事吗? 当然,他不可能把自己的金手指做成一个產品。但视界的逻辑,“连接代码和现实”,完全可以抽象成一套方法论,用ai来模擬。虽然不可能做到视界那种精准度,但即使能实现百分之十的效果,也远超现有的竞品。 苏念念的声音把他拉了回来。 “说得我心痒痒的。”苏念念托著下巴看他,“你要是早两个月来我们组,这项目也不至於被人摘走。” “天下產品经理的项目,一半都是被摘走的。別往心里去。” “你还劝我呢?你自己被摘得比我还惨。” “所以我现在多通透啊,过来人的智慧。” 苏念念被他逗笑了,用勺子拨动著杯子里的拉花。阳光把她的侧脸照得很温柔,细碎的头髮丝在光里变成金色。 老周在吧檯后面擦杯子,余光瞟了一眼这边,嘴角若有若无地翘了一下。 “你接下来真就打算一直接散单?”苏念念问。 “不是长久之计。”韩路一靠在椅背上,“在想做点自己的东西。” “什么方向?” “还没定。有几个想法在脑子里,还不成熟。” “那想好了告诉我,说不定我能帮上忙。”苏念念说得很自然,“我好歹做了几年產品,用户调研和需求分析还是能干的。” “行,到时候找你。” 他说这话的时候確实只是客气,但苏念念认真地点了点头。 他们又聊了一会儿別的。她问他在看什么书,他说最近在看一本讲分布式系统的。她说自己在追一部剧,问他看不看,他说不看,她说你真无聊。 四点半了。 苏念念看了一眼手机:“五点有个会要回去准备,我得走了。” “行。”韩路一站起来,“我送你到地铁站。” “不用不用,走几步就到了。”苏念念摆手,拿起包站起来。 两个人走到门口。老周在后面喊了一声:“小韩,下次带朋友来打八折啊!” 苏念念回头冲老周挥了挥手:“谢谢老板!” 推开门出去,外面是傍晚的阳光,已经不那么刺眼了,把整条街染成暖黄色。 苏念念在门口站了一下。 “路一。” “嗯?” “以后……常联繫啊。” 她说这话的时候在笑,语气很轻鬆,像是隨口一说。 “好啊。”韩路一说。 苏念念冲他笑了一下,转身沿著人行道走了。白色帆布鞋踩在落日的阴影边缘,步子不快不慢。 韩路一站在bug café门口看了两秒,转身回了店里。 老周已经在给他续了一杯美式,放在他刚才的位子上。 “谢了周哥。” “大学同学?”老周问。 “嗯。” “不错。” 老周没再多说,低头继续擦他的杯子。 韩路一坐下来,端起咖啡喝了一口。 苦的。 他拿出手机,打开备忘录。 在空白页面上打了几个字: “代码审查工具,连接代码与现实场景,bugkiller?” 然后他盯著这行字看了一会儿,又在下面加了一行: “第一步:找个產品经理。” 写完他自己笑了一下。脑子里自动浮出了一张刚才还坐在对面、用勺子拨拉花的脸。 他关掉手机,靠在椅背上。 窗外最后一点阳光消失在对面楼顶。老周打开了店里的暖黄色灯,咖啡机嗡嗡地响著。 韩路一脑子里那个模糊的想法,比两个小时前清晰了不止一点。 就差动手了。 他又靠了一会儿。老周在吧檯后面安静地磨豆子,整个店里只剩他一个客人了。 韩路一拿起手机,习惯性地下拉了一下通知栏。 一条新闻推送卡在最上面。 【快闪科技ceo丁仁公开回应:匿名举报系恶意誹谤,已向公安机关报案,將依法追查信息源头】 韩路一的手指停了。 他点进去扫了一眼。声明的措辞很讲究——一个造假数据都不正面回应,全部火力集中在“追查匿名举报人“上。末尾引了刑法第二百四十六条,誹谤罪。 韩路一差点笑出来。 向公安机关报案?顾司玥递给公安网安的举报材料比这份声明早了三天。数据非法出境,流向境外灰產,侵犯公民个人信息罪,丁仁自己就是被查的对象,现在跑去公安说“有人誹谤我“——这不是报案,这是送人头。 但丁仁的目標压根不是法律,他在对著两亿围观群眾喊话:我不解释,我找人。 虚张声势,越凶说明越慌。 韩路一退出新闻,打开微博看了一眼快闪相关的討论。 丁仁的声明底下已经炸了。骂的占一半,但另一半的討论方向让他不太舒服,大家真的开始认真猜匿名举报人是谁了。 “逆向工程老王”又更新了一条长帖。 上次他的画像结论是“大厂后端/算法工程师,五年以上”。这次在丁仁声明的评论区里又往前推了一步: “匿名报告中对快闪数据管道架构的描述精度极高,对各种技术细节的剖起深入浅出。这意味著作者要么是快闪內部人员,要么具备远超常规的逆向分析能力。结合此前的画像,如果不是內部人,那这个人可能是业界知名的技术大牛。” 帖子底下最热的评论: “所以要么是內鬼,要么是大神。丁总你確定要找吗?找到了你请得起吗?” 韩路一没笑出来。 “远超常规的逆向分析能力”,老王不知道自己离真相有多近。 他把丁仁声明的连结转给了顾司玥。 三分钟后,顾司玥回了两条消息。 第一条:“小心他狗急跳墙。” 第二条:“从现在起,在任何平台、任何场合,都不要討论快闪。一个字都不要提。” 韩路一回了个“好”字。 他把凉透的美式一口喝完了。站起来,背上包。 老周在吧檯后面喊了一声:“明天见,小韩。” “明天见,周哥。” 推开玻璃门走出去,外面已经黑透了。路灯橘黄色的光把他的影子拖得很长。 韩路一走了两步,又摸出手机看了一眼。 备忘录最上面的两个文档,一个写著bugkiller,一个写著“不要提快闪”。 他锁了屏,加快了脚步。 第十章 赚钱如呼吸 升级到lv.2之后的第一个完整工作日,韩路一打开了自由开发者平台。 和之前不一样。 之前他用视界扫需求列表,能看到甲方靠不靠谱、预算是不是虚標、有没有额外的隱藏需求。这些信息让他能精准筛选高价优质单,一天赚个一万多不是问题。 但那只是“看”。 现在他能“修”了。 第一单,一个中型电商平台的后端优化。甲方描述是“系统偶尔卡顿,原因不明”,报价15000。 韩路一打开甲方提供的代码仓库权限,视界开启。 代码上浮现了一层半透明的高亮標註。 以前一个bug得他自己分析半天。现在视界直接给出了修復路径,改哪个文件、改哪一行、怎么改,全部列在面板上。他只需要动手抓药。 四十分钟,三个bug全部修完。他写了一份简洁的修復报告发给甲方。 甲方回覆:??? 第二条消息:哥们你这也太快了吧 第三条消息:我们自己的团队排查了两周都没找到原因 第四条消息:牛逼 第五条消息:追加个赏金行不行? 韩路一回了一个微笑表情。 第二单,一个初创公司的app崩溃问题。报价8000。七个bug,最严重的是內存泄漏。半小时搞定。 第三单,一个小程序的支付回调异常。报价3000。问题不大,十五分钟收工。 十一点半,三单全部交付,总收入两万六。 他在鼎盛干半个月,税后到手也就这个数。 当然,自由职业要自己缴税,社保也得另出,但就算打完折,半天干出半个月,这笔帐怎么算都不亏。 这时,甲方的好评已经掛上平台了。 “史上最快交付,质量无可挑剔。” “这人是不是开了掛?半小时解决了我们两个月的bug。” 韩路一看著“开了掛”三个字,嘴角抽了一下。 你还真说对了。 他关上笔记本电脑,靠在椅背上。 这是韩路一五年来,第一次干完了所有的活。 在鼎盛的时候,他的日程表上从来没有“空閒”这个词,早上九点到,晚上九点走——运气好的话。赶版本的时候十一二点是常態,凌晨两三点也不稀奇,午饭是工位上扒两口外卖,晚饭是会议室里啃麵包。周末偶尔能休一天,但手机上隨时会弹消息。 他已经忘了工作日的中午是什么样子了。 韩路一站起来,走到阳台上。 二月的阳光照进来,暖洋洋的。楼下的小花园里,几个退休老大爷正在下棋。旁边的长椅上,一个年轻妈妈在刷手机,婴儿车里的小孩睡著了。小卖部的王阿姨搬了个板凳坐在门口晒太阳,嗑著瓜子。 这些人每天都在这儿,只是他从来没在这个时间看到过。 他站了一会儿,回屋打开冰箱。 空的,除了半瓶老乾妈和两盒过期的酸奶。 韩路一拿上钥匙下了楼,小区门口有个菜市场,他路过了几百次,但从来没进去过。 他进去买了西红柿、鸡蛋、一把小葱。 回家做了一盘番茄炒蛋。 不好吃。 但至少没糊。 他站在厨房里把午饭吃完了,洗了碗,又回阳台上站了一会儿。 韩路一脑子里浮出了一个奇怪的念头:这就是自由的感觉吗?真不习惯。 突然他听到敲门声,刚拉开防盗门,差点被一个小小的身影撞了满怀。 “路一哥哥!” 林朵朵抱著一个粉色的平板电脑,眼眶红红的,小脸上还掛著没干的眼泪。 “怎么了朵朵?”韩路一蹲下来。 “我的平板坏了……”林朵朵把平板举到他面前,屏幕卡在一个花花绿绿的界面上,完全不动了,“动画片放到一半就不动了,重启也不行,妈妈也弄不好……” 她说著说著嘴巴又瘪了。 “让我看看。”韩路一接过平板。 隔壁501的门开著,林晚晴站在门口,一手拿著画笔,头髮隨便扎了个丸子,脸上还沾著一点顏料。 “不好意思啊,朵朵非要来找你。我说了妈妈明天给你修,她不听。”林晚晴有点不好意思。 “没事林姐,小事。” 韩路一低头看著平板,隨手开了一秒视界。 【设备:儿童平板|型號:小豆平板5|故障类型:系统级】 【漏洞检测:后台进程內存溢出导致系统冻结|起因:某动画app存在內存泄漏(v3.2.1已知缺陷)】 【修復建议:强制安全模式启动+清除该app缓存+降级至v3.1.8稳定版】 韩路一关掉视界,按照修復建议操作,长按音量和电源键,进入安全模式,清除缓存,把那个有bug的动画app回退到上一个版本,整个过程不到两分钟。 屏幕亮了,那只粉红色的小猪重新在屏幕上蹦蹦跳跳。 “好了。” 林朵朵的表情变化堪称教科书级別,从含泪到震惊到狂喜,总共用了零点五秒。 “路一哥哥好厉害!”她一把抱住平板,又一把抱住韩路一的腿,“比妈妈厉害一百倍!” “……谢谢你的一百倍。”林晚晴在门口翻了个白眼。 面板闪了一下。 【微型辅助任务完成|经验值+3|当前经验值:15/200】 林晚晴牵著朵朵的手回了501,门关上之前,朵朵探出半个脑袋冲他挥了挥手。 韩路一的一周有了固定的节奏。 上午接单,两到三个,挑问题有意思的接,中午前收工。下午是他自己的时间。 他开始做一些以前没时间做的事。 周四傍晚去跑了一次步,上一次跑步可能还是大学的时候,他沿著小区外面的河道跑了两圈,本来以为五年996身体已经垮了,没想到视界升级给加了体质。 周五下了场小雨,他坐在阳台上看书听雨声。隔壁传来朵朵咿咿呀呀唱歌的声音,隔著一堵墙,模模糊糊的。 这些都是很小的事,小到在鼎盛的时候连想都不会想。 但连在一起,它们构成了一种韩路一快忘掉的东西。 生活。 …… 一周结束。 平台加私单,总收入六万五。 他在鼎盛干一个月,税后到手五万,一周干出一个多月。 钱的事解决了,但韩路一发现了一个新问题。 视界面板上,经验值还停在15。 十几个活,六万五,零经验,帮朵朵修一个平板反倒加了三点。 收了钱的不算。 这套系统的规则比他想的简单,赚钱归赚钱,想升级,得帮別人的忙——不收钱的那种。 韩路一关掉银行app,打开了电脑。 他有一个想法要尝试。 第十一章 马甲 韩路一在论坛上註册了一个马甲id:“nullpointer”。 第一天,有人发帖求救:线上服务每隔三到五天必崩一次,重启就好,但死活找不到规律。帖子下面二十多条回復,有人说查內存泄漏,有人说上监控告警,有人直接甩了一段chatgpt的分析——全都隔靴搔痒。 韩路一开视界扫了一眼帖子里贴的架构图和日誌截图,虽然不是直接看代码仓库,但他的经验加上bug检测的辅助,还是捕捉到了一条线索。 他敲了一条回復,三段话,指出了两个连接池共用超时配置的问题,给了具体的修改方案。 帖主半小时后追更:改了,观察中。 三天后再追更:稳了,彻底稳了。 帖子火了。 两百多条回復,一大半不是在討论技术,是在问“这人谁啊”。 【微型辅助任务完成|经验值+2|当前经验值:17/200】 果然。 【写到这里我希望读者记一下我们域名 101 看书网超便捷,????????????.??????轻鬆看 】 免费帮人修bug,系统是给经验的。 韩路一找到了正確的打开方式。 从那天起,他每天下午花一两个小时泡论坛,专挑那种討论了几十层还没结论的疑难帖,这种帖子围观的人多,答案的传播面最广。 有人的生產环境偶发段错误,查了一个月,四种工具轮著上都抓不到,他视界一扫,发现是第三方库和结构体的內存对齐打架,一条回復解决。 有人的排序算法在特定数据集上结果错乱,他发现是浮点精度问题导致比较函数不满足传递性,加一个epsilon就稳了。 每次都是一样的套路:一堆人討论了半天,他进来一条回復,结束。 论坛里开始流传一句话:“等nullpointer来。” 有人猜他是大厂的架构师,有人猜他是退休的技术vp,有人说他是某个开源项目的核心维护者,还有人开了个投票帖:“nullpointer到底是谁?”选项里从“字节3-2”到“中科院研究员”到“openai早期员工”都有,最高票的是“不知道但是跪了”。 一周下来,“nullpointer”在几个主流技术论坛上攒了两千多个赞。 经验值从15慢慢爬到了25。 不快,但蚊子腿也是肉。 当然,论坛上不只有技术求助帖。 快闪科技的事还在发酵。36度的调查报导发出去十天了,后续跟进一篇接一篇。网信办、工信部先后介入,公安网安大队对数据非法出境正式立案。ceo丁仁被限制出境,cto周明哲直接失联——有人说跑了,有人说被带走了,没人知道真相。app全网下架,b轮融资彻底黄了,星辰资本发了份声明切割,大意是“我们也是受害者”。 韩路一刷到这些消息的时候,手指会停一两秒,然后继续往下划。 丁仁没消停。限制出境归限制出境,嘴没被封。他请了公关团队在各个平台放话,说已经“锁定了几个嫌疑目標”,措辞像钓鱼,逼举报人自己露头。 更麻烦的是“逆向工程老王“的画像帖,这帖子就掛在韩路一每天泡的同一个论坛上,每隔几天更新一版。最新的结论已经从“大厂后端工程师“缩窄到了“有推荐系统实战经验的高级专家”。 距离猜到韩路一,可能就差一两步了。 他每次刷到这个帖子都会多看两眼,然后关掉。顾司玥的禁令还掛在备忘录最上面——“不要提快闪”。 周五晚上,他刷完最后一条帖子,准备关电脑。 自由开发者平台弹了一条新需求推送。 他本来没打算看,今天已经做了三单了。但標题吸引了他的注意力。 【紧急外包|推荐系统核心模块优化|报价:50000|甲方:鼎盛数字科技(深圳)有限公司】 鼎盛数字科技。 鼎盛集团旗下的全资子公司,负责集团的数位化產品线。韩路一在鼎盛工作的最后一年,有大半年的代码是在这个子公司的代码仓库里提交的。 他点开了需求详情。 “推荐系统核心算法近期出现性能异常,峰值期延迟飆升300%+,用户留存指標持续下降。內部团队排查两周未定位根因,现紧急外包高级技术顾问协助诊断……” 韩路一看著这段描述。 这套推荐系统他写了五年,系统架构他闭著眼睛都能说出来。 陈博文大概连commit记录都没看过。 需求描述下面附了一段脱敏后的技术概要,三页pdf。 韩路一看了两行就停住了。 关键参数后面全都跟著括號备註,峰值延迟300%+后面写著(对比基线为2025q3上线版本),qps閾值后面写著(当前集群配置下理论上限)。 他一眼就认出来这是小明写的。 赵启明,他带了三年的组员,从实习生带到p5,手把手教的代码规范和文档格式。 小明把问题发到了外包平台上。 这意味著內部已经彻底搞不定了,陈博文那个团队排查了快两周都没定位根因,最后是小明——八成是他主动揽的活——写了这份技术概要往外发,韩路一能想像他这两周加班到什么程度。 他已经看出问题了,陈博文的团队改了他的核心调度模块,把原来的动態权重分配改成了静態规则引擎。 这就像把一辆手动挡跑车改成了自动挡老年代步车,然后问“为什么跑不快了”。 五万块的单子,他闭著眼睛都能修。 但这不是钱的问题。 这是陈博文摘走的桃子,正在他手里烂掉。 韩路一关掉了需求页面。 又打开了。 又关掉了。 他靠在椅背上,看著天花板。 窗外有风,把阳台上晾的t恤吹得啪啪响。 他拿起手机,又开视界扫了一眼那条需求。 面板弹出来了。 【鼎盛数字科技推荐系统|当前状態:严重退化|核心算法稳定性:极差】 【关联人物:陈博文(项目负责人)|该系统异常与其团队改造直接相关】 极差。 他写了五年的系统,被改成了极差。 韩路一关掉视界,把手机扣在桌上,屏幕朝下。 “真他妈混蛋!” 第十二章 鼎盛的外包 第二天早上,韩路一醒来第一件事就是打开电脑,重新点开了那条外包需求。 昨晚他没做决定,睡了一觉,已经想清楚了。 需求页面上附著的技术概要只有三页,做了脱敏处理,去掉了公司名和项目名,但对韩路一来说跟没脱一样。 每一段描述他都能对应到具体的代码文件。 “核心推荐引擎近期进行了架构调整,將原有的动態权重分配模块替换为基於规则的静態引擎。” 韩路一看到这句话的时候,表情很微妙。 动態权重分配,那是他花了八个月设计的核心调度模块,整个推荐系统的心臟,它的精妙之处在於能根据用户实时行为自动调整推荐权重,每一次点击、每一次滑动、每一次停留都会被纳入计算。 这套东西不是写出来就能用的,是他一边写一边调,跑了上亿条用户数据,一个参数一个参数地磨出来的。 然后陈博文的团队把它拆了,换成了静態规则引擎。 韩路一能理解为什么,动態权重模块確实复杂,没有他本人在场,团队里没有第二个人能完全看懂那套逻辑。陈博文的选择是,看不懂的东西就换掉,换成看得懂的。 技术概要后面还列了一串症状:峰值期响应延迟飆升、推荐精准度下降、用户留存率持续走低、a/b测试全面不如旧版。 说白了就是:换了之后全面拉胯,而且越来越差。 韩路一靠在椅背上,开了视界。 精力值满的,250/250。他把注意力集中在屏幕上那三页技术概要上。 面板炸开了。 不是一般的弹窗。整个屏幕被半透明的红色警告覆盖,像一面著火的墙。 【目標系统:鼎盛数字科技·核心推荐引擎】 【整体稳定性评级:极度危险】 【严重漏洞:12个|中等漏洞:37个|轻微漏洞:91个】 【预计完全崩溃时间:上线后72小时內】 140个bug,深红的浅红的,密密麻麻铺了一屏,像一份病危通知书。 他只扫了一眼前三个严重漏洞就不想再看了,內存泄漏,三天后系统会把自己撑死。数据管道断裂,四分之一的用户数据在悄悄丟失。並发锁死,高峰期两成概率直接雪崩。 三颗定时炸弹,隨便一颗炸了都够上一次热搜。 他花了三年时间把这套推荐系统从能用调到好用,每一个参数、每一条权重、每一次版本叠代,都是他一行一行敲出来的。 陈博文才接手了半个月。 他想起了第一天被裁时,陈博文面板上的那行字—— 【warning:该对象存在3个严重bug点击展开(当前等级不足)】 当时他是lv.1,看不到详情。 那三个严重bug,其中一个大概就是这个,陈博文摘了他的果子,但咬不动。 他当然能修好,这套代码是他写的,都不用视界,有些bug他看一眼就知道改哪行。 他关掉了视界。 屏幕回到了正常的外包需求页面,右上角有两个按钮:【接受需求】和【忽略】。 韩路一的手指停在滑鼠上。 接?救陈博文?我是傻逼吗? 然后点了【忽略】。 不接。 他关掉了外包页面,端起桌上已经凉了的咖啡喝了一口。 不接归不接,但有些东西憋著也浪费。 他打开论坛,以nullpointer的身份花了四十分钟写了一篇《推荐系统架构改造的七个经典陷阱》,纯技术分享。 这些坑都是陈博文正在踩的,但是他知道,以陈博文的水平,就算看到也看不懂。等到系统真的崩溃那天,这个帖子再被挖出来,难以想像陈博文的脸色会有多精彩。 发完帖子,他关掉论坛。 脑子开始转了。 这140个bug,这两周接单修过的上百个bug,再往前,五年里经手的几千个bug。 它们长得不一样,但模式都一样。 同样的模式,在不同的项目里反覆出现,他每次修bug,本质上就做两件事,认出模式,匹配方案。 这不就是餵给ai乾的活吗? 他放下杯子,掏出手机翻到备忘录里那行字—— “代码审查工具,连接代码与现实场景,bugkiller?” 把视界看到的bug模式全部整理出来,特徵、触发条件、修復路径,餵给ai,让它学会“看到代码就知道上线后会出什么问题”,ai不需要拥有视界,它只需要学会视界看到过的东西。 就像教ai下棋不需要教它思考,只需要让它看够多的棋局。 韩路一打开电脑,新建文件夹,命名“bugkiller”,新建文档:《bug模式资料库 v0.1》。 然后他开始写,写得很快,五年里踩过的坑,全从记忆里涌出来,按类型自动归位,內存类、並发类、数据流类、接口类,每一类下面是触发条件、典型表现、修復路径。 他像在给一个什么都不懂的新手编一本《bug大全》。 写了两个小时,停下来。 不够,一个人的经验撑不起一整个资料库,他需要更多样本,更系统的分类。 他需要一个產品经理。 韩路一拿起手机,找到苏念念的微信对话框。 “念念,上次聊的ai代码审查方向,我有个想法,今晚有空吗?吃个饭聊聊。” 发出去不到三十秒,苏念念回了:“今晚?!几点?” “七点。” “没问题!下班正好六点半,什么想法?先说说?” “到了再说。” 对话框顶部的“对方正在输入…”闪了好几次,最后发过来的不是追问,是: “那我先选个餐厅,你想吃什么?” “隨意,不挑。” “好,我来定。” 韩路一觉得有点好笑,明明是他约的人,三句话下来主导权就到对方手里了。 不过也正常,苏念念做產品经理的,抢需求主导权是本能。 韩路一放下手机,又闷头写起了文档,再抬起头已经是下午四点半了。 离七点还有两个半小时。 他回头看了看屏幕上刚建好的bugkiller文件夹,想了想,没有继续写文档。今晚跟苏念念聊的时候,脑子里得是活的想法,不能是写僵了的文字。 他关掉电脑,起身去洗了个澡,换了件乾净的衬衫。 出门的时候,隔壁传来林朵朵的声音,在跟林晚晴讲幼儿园的事。 韩路一带上门,往地铁站走去。 晚风不凉也不暖,三月中旬的海城,恰好卡在两个季节的缝隙里。 第十三章 辣得莫法 晚上七点,苏念念选的餐厅。 不是什么高档地方,是他家附近商圈的一家湘菜馆,叫“辣得莫法”。 他到的时候,苏念念已经在靠窗的位置坐著了。 韩路一拉开椅子坐下,抬头看了她一眼。 上次在bug café是下午,阳光从落地窗照进来,苏念念坐在逆光里,乾净清爽,像一杯温水。现在是晚上,餐厅暖色的吊灯从上方打下来,她的眉眼轮廓比白天更深,长发散著垂到肩上,浅杏色的针织衫衬得锁骨那截细链格外显眼,整个人多了一点白天没有的味道。 “今天真好看。”韩路一坐定了,语气隨意得像在说今天天气不错。 “……哪天不好看了?” “没有不好看的时候,上次是上次的好看,今天是今天的好看。” 他说得太顺了,顺到苏念念没办法判断这是真心话还是嘴贫,接了像在撒娇,不接又显得小气。 “嘴真贫。”她最后只说了这三个字,转头看向窗外,耳朵尖有一点点红,但灯光昏黄,看不太出来。 她面前摆著一台打开的苹果电脑,屏幕上密密麻麻的都是表格。 服务员走过来,苏念念刚要拿菜单,韩路一已经开口了。 “一个剁椒鱼头、一个小炒黄牛肉、一个虎皮青椒、一个酸辣土豆丝,米饭两碗,再来一扎酸梅汤。” 苏念念看著他,手里的菜单举了一半,没放下也没打开。 “……你点这么快?” “我家就在附近,这家店来过几次。”韩路一顺手接过她手里的菜单递还给服务员。 等菜的时候,苏念念把电脑转过来给他看。 “你说有想法要聊,又不给我剧透,我只好自己猜了,关於代码审查,我先把赛道摸清楚了。”她抬了抬下巴,“產品经理的基本功。” 屏幕上是一份竞品分析表:十七款產品,每一款都列了核心功能、技术路线、定价策略、用户评价、融资轮次,最右边一列是她自己標的评分,满分五分,最高的一款只拿了三分。 “你什么时候做的?”韩路一问。 “上次跟你聊完就开始整理了,本来只是隨手查查,结果越查越多。”苏念念说得很轻鬆,像在说一件不值一提的事。 韩路一看了她一眼,她眼下有一层薄薄的遮瑕,盖住了熬夜的痕跡。 “你给最高分的这款,缺什么?”他指著表格问。 “跟上次我跟你说的一样,只能做静態分析,找到了bug,但不能告诉你这个bug在真实业务场景里会造成什么影响,程式设计师需要的不是“你这行代码有问题”,而是“这行代码上线后会炸成什么样”。” “所以核心痛点是——” “是“代码和现实之间的鸿沟”。”苏念念用手指敲了敲桌面,“你上次的原话,我回去想了好几天,越想越觉得你说到点子上了。” 剁椒鱼头端上来了,热气腾腾的。韩路一拿起公筷,挑了几块鱼腮边最嫩的肉放到苏念念碗里。 “先吃,凉了腥。” 苏念念低头看了一眼碗里的鱼肉,全是最好的部位。 她没说谢谢,拿起筷子吃了一口。 “我想做一款工具。”他说,“名字我都想好了,bugkiller。” “bugkiller?”苏念念念了一遍,嚼著鱼肉,皱了下眉,“名字太geek了,程式设计师听著过癮,但以后要做商业化的话不好卖,先当內部代號用吧,回头再想个正式的。” “它不只是找bug,它要做的是——”韩路一在脑子里组织了一下语言,“建立一个bug模式资料库,把各种类型bug的特徵、触发条件、影响范围、最优修復路径全部结构化,然后用这些数据训练ai模型,让ai学会“看到一段代码就知道它上线后可能会出什么问题”。” 苏念念放下筷子,身体前倾。 “等等,你说的bug模式资料库,数据从哪来?这是最关键的问题。市面上的竞品之所以做不好,就是因为训练数据只有代码本身,缺乏“代码在真实场景中的表现”这一层。” “从我这里来。” 苏念念眨了两下眼睛。 韩路一解释:“我这些年写了几十万行代码,debug过的系统也少说有几十个,最近自由接单又修了上百个项目,每一个bug的特徵、触发条件、修復路径,我都在记录。” 这是实话,只不过他省略了视界的部分。 “你的个人经验当然有价值,但一个人的样本量不够啊,”苏念念皱眉,“ai训练需要大量数据。” “对,所以第一步是做最小可用產品,用我现有的模式资料库做一个原型,先验证思路能不能跑通。如果跑通了,第二步再想办法扩大数据源,比如接入开源社区的bug报告、公开的代码漏洞库、技术论坛的问答数据。” “mvp先行,数据飞轮后做。”苏念念总结了一句。 “对。” “那你的mvp打算多长时间做出来?” “一周。” 苏念念正在喝酸梅汤,差点呛了。 “一周?你认真的?” “我已经开始写了,今天下午搭了bug模式资料库的框架,分类结构都想好了,算法层面我有现成的经验,模型训练我也熟,一周出原型不是问题。” 苏念念看了他三秒钟,把酸梅汤放下了。 “你知道我在公司推那个ai代码审查项目,光需求阶段就花了两个月。” “因为你们有流程,有审批,跨部门协调,领导要拍板。” 苏念念想了想,笑了:“好吧,卷王你说一周就一周,那我能帮什么?” “用户调研和需求文档。”韩路一说,“你比我了解用户,你来定义bugkiller应该长什么样、核心功能优先级怎么排、第一批目標用户是谁。” “这我在行。”苏念念已经开始在电脑上打字了。 两个人一边吃一边聊,越聊越快,苏念念一手夹菜一手打字,韩路一说到技术方案的时候习惯性用筷子在桌上比划,被她拍了一下手背,“別拿筷子点桌子,不礼貌。” 剁椒鱼头见底的时候,苏念念的电脑上已经有了一份完整的mvp需求文档。 韩路一看了一遍。 “你这需求写得太清楚了。”他说。 “不然呢?写需求含糊其辞等著开发骂我?”苏念念哼了一声,“而且……” 她停了一下,语气变轻了一点。 “好久没碰到这么聊得来的开发了,我在公司跟技术团队掰扯一个需求能掰扯一个礼拜,你这儿四十分钟就搞定了。” “那是因为你需求写得好。” 苏念念没说话,低头合上了电脑。 灯光从侧面照过来,睫毛在她脸上投下一小片阴影。 “一周后你给我看原型,我帮你做用户测试。”她说。 “你用什么身份做?你还在公司上班呢。” 苏念念端起酸梅汤喝了一口,视线落在窗外。 “当作朋友帮忙。”她过了两秒才说,“反正我自己的项目被人拿走了,閒著也是閒著。” 韩路一叫了买单,苏念念抢了一下没抢过,瞪了他一眼:“下次我请。” “行,等bugkiller上线那天你请。” “成交。”苏念念收好电脑,又看了他一眼,“对了,回去別又泡麵对付,冰箱里多少放点东西。” “我什么时候泡麵对付了?” “你大学四年有三年的午饭是泡麵加火腿肠,別以为我不知道。” “……那是因为懒,不是因为穷。” “结果呢?现在也没改吧。” 韩路一想反驳,但发现自己昨天中午確实吃的泡麵,他没说话。 苏念念笑了一下。 出了餐厅,夜风有点凉。 “你怎么回去?”韩路一问。 “打车。”苏念念掏出手机叫车,“你呢?” “走路,十五分钟。” “那你先走吧,別等我了。” “不急。”韩路一靠在路灯杆上,“等你车来了我再走。” 苏念念看著手机屏幕,没抬头,风把她的长髮吹到脸侧,她伸手別到耳后。 “韩路一。” “嗯?” 她好像要说什么,但手机响了,车到了。 “没事。”苏念念拉开车门,回头冲他笑了一下,“回去早点睡,別又写到凌晨。” “知道了,妈。” “……滚。” 车门关上,车开走了。 韩路一站在原地看著尾灯消失在路口,然后往回走。 他打开视界。 街边的一切立刻有了数据浮层,公共垃圾桶底座的螺丝鬆了两颗,便利店的招牌有三个像素的色偏,对面人行道上一个跑步的中年男人左膝半月板有磨损。 整个世界像被掀开了一层皮,露出底下密密麻麻的代码。 韩路一关掉视界,继续走。 第十四章 二十三个Bug 一周。 韩路一关掉所有接单平台,手机调静音,冰箱塞满速冻水饺和罐装咖啡,一周只做一件事。 前两天最顺。框架和资料库是他的舒適区,闭著眼睛都能搭。第三天开始啃核心引擎,晚上卡住了,模式匹配逻辑怎么调都不对,盯著屏幕两个小时脑子越转越慢。他下楼在小区走了一圈,冷风一吹想通了:特徵提取的粒度选错了。回来改了方案,通了。后面几天顺流直下,接口、串联、测试。视界升级以后他的身体好了很多,换成以前在鼎盛,连续高强度编码三天人就废了,现在不会。 核心中的核心是bug模式资料库。韩路一把用视界积累的几百种bug模式全部结构化,每种bug长什么样、什么条件触发、影响多大、怎么修最优。別人训练ai用的是代码本身,他训练ai用的是代码在真实世界里的精確数据。 训练是最烧钱的环节。 韩路一在云平台上查了一圈价格,算下来光训练这一项就要好几万。他盯著报价页面看了半分钟,ai创业的第一道门槛,劝退九成独立开发者的那道门槛,现在摆在他面前了。 好在他有一个別人没有的优势:数据质量极高。別人需要十万条脏数据才能训练出基本能用的模型,他用视界標註过的三千条乾净数据就能餵出来。数据量小,训练轮次就少,算力也成比例下降。 他选了折中方案:开源轻量模型做底座,竞价实例跑正式训练,做了断点续传防中断,最后花了四万出头。 五年积蓄加上离职补偿,四万不算伤筋动骨。 但四万只是一轮训练。后面要花多少,他不敢细算。 先把原型跑通再说。 第七天晚上,代码写完了。 光標停在最后一行的分號后面。韩路一的手离开键盘,十指交叉搁在脑后,盯著屏幕。 他忽然有点不敢跑测试。 这种感觉他太熟悉了,考试做完不敢翻答案、论文写完不敢查重、代码写完不敢编译、表白完的微信不敢看,越在意的东西越不敢验证。 他站起来,去厨房接了杯水,喝了一口,又倒掉了,走回来坐下。 把bugkiller的原始码丟进了bugkiller,用自己做的刀,切自己做的菜。 运行。 进度条开始走:12%...31%... 他发现自己在屏住呼吸。 47%...68%...89%... 进度条走完。 二十三个bug。 屏幕上二十三条红色高亮。日均十二小时,视界辅助,身体巔峰。 二十三个。 他盯著那片红看了几秒,然后开了视界,扫了一遍同样的代码。 二十五个。 bugkiller比视界少了两个,他把两份结果拉到一起对了一遍,大部分重合。 一周,一个人,做出来的东西在他自己的代码上已经接近金手指的水平。 韩路一用视界確认修復路径,花两个小时把所有的bug全部干掉。 然后让bugkiller重新扫了一遍。 屏幕上弹出一行绿色的字。 0 issues found. 他靠在椅背上,盯著那个零看了好一会儿。 把原型打包,发给了苏念念:“一周,没食言。” 五分钟后苏念念炸了。 “我试了!!!把我们组上周的一段代码丟进去扫了一下,找到了八个问题!!其中三个是我们已经知道的,另外五个是我们不知道的!!而且它给的影响评估特別直观,“该bug在高並发场景下有约15%概率触发服务降级”,运营和產品也能看懂!!不只是给开发看的!!!” “冷静。” “我不冷静!市面上没有一款工具能做到“影响评估”这个层级!所有竞品都停在“找到bug”这一步,你直接跳到了“找到bug+告诉你后果+教你怎么修”!这不是优化!这简直是降维打击!是二相箔!” “用户测试的事交给我。”苏念念最后发了一条,“我找几个做开发的朋友试一试,收集反馈。你继续叠代。” “行。” 韩路一放下手机,翻出微信通讯录,找到顾司玥。 两人的聊天记录还停在上次她说“快闪大概率会走破產重组”,之后就没再联繫过。 韩路一想了想,打了一行字:“顾律师,方便约个时间吗?有个新的法律諮询。” 晚上十一点多了,他不指望今晚有回覆。 过了一会,顾司玥回復了:“什么方向?” “软体著作权註册,可能还涉及商標。” “明天下午两点来我办公室,新case按正常諮询费收。” 明天周六,韩路一看了一眼这条消息,晚上十一点秒回、周六还约客户,这人是不下班的吗? 韩路一回了个“好”。 顿了一下,又加了一句:“这次不是举报,我自己写了个软体。” 顾司玥过了几秒才回:“那更要趁早,明天见。” 第二天下午两点,博衡律师事务所。 周六的律所比上次来安静一些,走廊里大半的办公室都黑著灯。前台把他领到会议室,路过走廊的时候经过一间门没关严的办公室,里面桌上摆著三杯咖啡,两杯空了,第三杯喝了一半,窗台角落有一盆绿萝,叶子耷拉著,土干得发白,衣架上掛著两件备用衬衫,一黑一白。 门上的铭牌写著“顾司玥高级合伙人”。 这人住在办公室里吗? 顾司玥已经在会议室等著了,笔记本摊开在桌上。 “说。” 韩路一花了三分钟把bugkiller介绍了一遍,做什么、怎么做、数据从哪来、现在到什么阶段。 顾司玥听完没评价,直接进入法律盘问。 “软体著作权註册了吗?” “没有。” “代码用到前东家的ip了吗?” “没有。” “商標查过吗?” “没有。” 连续三个“没有”,顾司玥的笔顿了一下,抬头看了他一眼。 “你倒是什么都没做。” “所以才来找你。” 顾司玥没接这句话,低头在本子上快速写了几行。 “著作权我让助理今天就开始走流程,商標查重同步做,如果没有撞车的一周內提交。”她写完一页翻过去,“你的代码仓库在哪个平台?” “github,私有仓库。” “好,原始码文档和软体功能说明整理一份发我邮箱,越快越好。” 韩路一点头。 顾司玥继续往下走流程,忽然停了一下。 “你原来公司有竞业协议吗?” 韩路一愣了一秒:“有,但签离职协议的时候hr说是標准流程,不会真启动。” 顾司玥的笔停了。 她抬起头,看著韩路一的眼神变了,从“走流程”切换到了“审视”。 “协议在手上吗?” “在家里。” “拍给我看看。” “应该不会有问题吧?hr说——” “hr说的不算。”顾司玥打断了他,语气没变重,但每个字都咬得很清楚,“白纸黑字写的才算。你做的產品叫“ai代码审查工具”,你前东家是科技公司,如果竞业条款里有“人工智慧”或“软体开发工具”这几个字,你现在做的每一件事都可能在踩线。” 办公室安静了两秒。 韩路一没接话,他脑子里快速过了一遍那份离职协议,签字的时候扫了一眼,確实有竞业条款,当时没细看,hr说不会启动,他就信了。 “回去就拍给你。”他说。 顾司玥“嗯”了一声,低头继续写。 韩路一出了会议室,往电梯走,又经过那间门没关严的办公室,余光扫到角落的绿萝,叶子耷拉在那里。 他脚步顿了一下,没停。 出了大楼,他翻出手机又看了一眼备忘录。 不会真启动的吧。 他把手机揣回口袋,加快了脚步。 第十五章 深夜的拍门声 晚上十点四十。 竞业协议已经发给顾司玥了,她还没有回覆。 韩路一坐在电脑前写代码。 窗外很安静。整栋楼六层,这个时间大部分人都睡了。 屏幕上的光照著他的脸,手指在键盘上敲出有节奏的声响。 楼道里有动静。 是拍门声。 很重,很急,带著某种不耐烦的力道。 “砰砰砰——” 韩路一的手指停了。 拍门声又响了一轮,然后有一个男人的声音,含混不清,带著明显的酒气。 “开门!我就看看朵朵!你凭什么不让我看自己的闺女!” 韩路一站了起来。 隔壁,501。 他打开了视界。 50米的感知范围瞬间铺开。整栋楼的数据像半透明的全息图一样叠在他的视野里,但他只关注一个方向,一墙之隔的501室。 两个人,一个在门外,一个在门內。 门外的人情绪面板亮成了红色。 门內的人,林晚晴,情绪面板是深蓝色,標籤写著:恐惧(隱藏:强撑镇定)。 门內还有第三个数据信號,林朵朵,情绪標籤只有一个字:怕。 韩路一走到自己家门口,拉开了防盗门。 楼道的声控灯早被拍门声震亮了,昏黄的灯光下,一个男人站在501门前。 身高大概一米七五,体格偏壮,穿一件皱巴巴的深色夹克,头髮乱糟糟的,整个人散发著浓重的酒气。他一只手撑在门框上,另一只手还在拍门。 林晚晴打开了一条门缝,人挡在中间,她穿著家居服,头髮散著,脸色很白。 “许嘉铭,你喝了酒,明天再说。”她的声音在发抖,但还在努力保持平稳。 “什么明天再说!你躲了我两个月了!我就看一眼朵朵怎么了?我是她爸!” “你现在这个样子看什么看?朵朵已经睡了。” “那我等她醒。” “你走!” 许嘉铭往前逼了半步,手掌拍在门板上。林晚晴本能地往后缩了一下,但没有关门,门被他的脚卡住了。 韩路一走过去了。 他的脚步声让许嘉铭转过了头。 视界面板在韩路一眼前弹开了这个男人的信息。 【许嘉铭|35岁|情绪:愤怒(隱藏:心虚、酒精影响)|血液酒精浓度约0.14%)】 【关係標籤:林晚晴前夫】 【warning:有轻微暴力倾向|近期情绪不稳定】 韩路一不紧不慢地走到楼道中间,站在两家门之间的位置。 “朋友,大半夜的,影响邻居休息了。” 许嘉铭打量了他一下:“你谁啊?” “隔壁的。”韩路一指了指自己家门口。 “关你什么事?我来看我闺女。” “看闺女是好事,但现在快十二点了,孩子也睡了。”韩路一说著掏出了手机,屏幕亮著,“不如这样,我看你喝了不少,要不我帮你打个车?” 他晃了晃手机,然后声音不大不小地加了一句:“车打不到的话,我也可以帮你叫110。你选一个。” 这句话像一桶冷水。 许嘉铭的脸色变了,酒精让他衝动,但没让他完全失去理智。他看了看韩路一手里的手机,又看了看韩路一,一米八五,虽然瘦但比他高半个头,站在那里不慌不忙,眼神平静得像一面湖。 不知道为什么,那眼神好像看穿了他的色厉內荏。 “你少管閒事。”许嘉铭低声骂了一句,但脚从门缝里收回来了。 “好走。”韩路一说。 许嘉铭瞪了他一眼,又瞪了门缝里的林晚晴一眼,最后骂骂咧咧地转身下楼了。脚步声踩在楼梯上,一层一层往下,越来越远。 楼道里安静下来,声控灯啪地灭了。 黑暗中,韩路一听到了一声很轻的喘息。 他打开手机的手电筒,照了一下。 林晚晴靠在门框上,双手抱著自己的胳膊,她整个人在发抖,过了好几秒才慢慢鬆开一直抱紧自己的双手。 门缝里,一双小手扒著门板的边缘,然后林朵朵的脸从里面探出来,眼睛红红的,脸上有泪痕。 “路一哥哥……”她的声音很小,“我怕爸爸。” 韩路一蹲了下来。 “没事了小朵,他走了。”他的声音放得很轻很轻,“你保护妈妈了吗?” 林朵朵使劲点头。 “那你很厉害。” 林朵朵的嘴瘪了一下,又要哭,但忍住了。 林晚晴深吸了一口气,蹲下来把女儿抱进怀里,过了好一会儿,她抬头看著韩路一。 “谢谢你。” 三个字说得很吃力。 韩路一站起来:“没事。” 林晚晴把林朵朵抱进屋里,在门口又回了一次头。 “韩路一,”她顿了一下,“今天真的谢谢你。” 韩路一摆摆手。 门关上了,两道锁扣被扣上。 楼道重新暗下来,韩路一站了一会儿,確认隔壁没有其他动静,转身回了自己家。 关上门之后,他靠在门板上,打开视界。 隔壁的基础面板透过墙壁隱约浮现。 【林晚晴|30岁|自由插画师】 lv.2的50米范围,隔壁的数据自动推送过来。他没办法只选择看一部分。基础面板下方,深层信息跟著展开了。 【情绪:感激(隱藏:安全感)|当前状態:安抚女儿中|核心诉求:保护女儿】 韩路一把注意力集中在另一个信息上—— 那个从第一次见面时灰著的,標註为“待解锁”的bug標籤。 现在它亮了。 lv.2的视界,终於让这个bug的详情完整展开了。 【bug:家庭纠纷(严重)】 【详情:林晚晴前夫许嘉铭正在筹备爭夺抚养权诉讼】 【证据收集状態:许嘉铭方已委託律师,以“母亲经济能力不足、居住环境不稳定”为由准备起诉】 【威胁等级:高】 【当前林晚晴应对状態:无法律支持,未諮询专业律师,处於被动防守】 【建议应对路径:需专业律师介入,提前准备应对方案】 “母亲经济能力不足、居住环境不稳定。” 初二那年,他也听过差不多的话,他爸打电话来,说“你一个人带孩子太辛苦了”,意思是想爭抚养权,他妈掛了电话,在阳台站了很久,以为他没看到。 那年他十三岁,林朵朵今年五岁。 建议应对路径:需专业律师介入,他脑子里浮出了一个名字。 顾司玥。 顾司玥做的是智慧財產权诉讼,不是这个方向,但她在博衡,內部肯定有处理相关情形的律师。 不过,他跟林晚晴就是邻居,说上话还不到一个月,赶走一个醉汉是一回事,插手人家的抚养权官司是另一回事。 韩路一关掉了视界。 他走回电脑前坐下,屏幕还亮著,光標在他刚才离开时的那一行闪烁。 他看了两秒钟代码,没继续写。 拿起手机,发现顾司玥在十分钟之前回了条消息:“竞业协议收到了。” 韩路一想了想,把备註从“顾律师”改成了“法律顾问-顾律师”。 然后关了电脑,洗了把脸,上床。 隔壁很安静,林朵朵大概已经被哄睡了。 第十六章 律师函 bugkiller的0.2版本打磨了一周多。 苏念念找几个开发朋友试用之后,给了他一份十九条的反馈。他改了七条半,第八条改到一半觉得方案不对,推翻重来,到今天还差一个收尾。 顾司玥那边发邮件说著作权登记在走流程,商標查重同步推进,“bugkiller”暂时没被註册过。 四月六號,周一上午。 韩路一坐在电脑前,手机开著语音通话,跟苏念念討论新版本的叠代方向。窗外天气不错,小区里有人在遛狗,楼下不知从哪飘上来一股葱油饼的香味。 “精度得再提一提,”苏念念的声音从手机里传出来,“现在体感误报大概百分之七八,用户觉得还有噪音。降到五以下才能真正进入工作流。” “我知道,单条误报可以標忽略、已经加上了,真压到五以下至少还得再训一版,成本有点高,” 门铃响了。 韩路一看了一眼门的方向。“有人敲门,等我一下啊。” 他起身开门,是快递员,手里有一个ems信封。一开门,电子签收板就递了过来。 他签了字,接过信封,快递员已经在按隔壁的门铃了。 韩路一关上门,走回电脑桌前坐下。 发件人:鼎盛数字科技集团有限公司法务部。 收件人:韩路一 手指沿封口撕开。 一份文件,一页纸,抬头印著鼎盛集团的logo,標题—— 《竞业限制义务提醒函》 內容很简短:提醒韩路一先生,您於2026年2月签署的离职协议中包含竞业限制条款,期限十二个月,范围涵盖“人工智慧、代码审查、软体开发工具及相关领域”。如贵方已在上述限制领域內从事经营活动,请立即停止並联繫我司法务部协商处理。 措辞挺客气的,但“请立即停止”那几个字,一个字比一个字沉。 文件一份离职协议复印件。竞业条款所在的那一段被人用黄色萤光笔標了出来。白纸上一道刺眼的黄。 韩路一盯著那片萤光色看了两秒。 签字的时候他扫过一眼。张薇说“標准流程,不会真启动的”,他就翻过去了。 然后他想到了一件事。 著作权登记是公开信息。国家版权局的系统,任何人都能查。 这边刚登记完,警告信就到了。 时间点也太巧了。 韩路一打开视界。 提醒函的纸面上浮出一层半透明的数据图层,字符流动了两秒,稳定下来,正文之外多出一条信息: 【文件发起链条:陈博文(建议)→法务部合规专员周洋(执行)→审批人:王志远(vp)】 看来不是法务部例行排查。 韩路一关掉视界。精力值扣了12点,不多,一张纸没什么好扫的。但上面的信息够了,陈博文不是想把他挤走就结束了。 “……路一?怎么了?”苏念念的声音还在手机里。 “念念,我有点事,晚点聊。” “哦好——” 他坐回椅子上,把提醒函和离职协议复印件並排摆在桌上,然后把萤光笔標出的那段话又看了一遍—— “乙方离职后十二个月內,不得从事与本公司主营业务相关的人工智慧、数据分析、软体开发工具及相关领域的工作,包括但不限於自主经营、受僱於竞爭对手或为竞爭对手提供諮询服务。” 人工智慧,软体开发工具。 如果严格来说,bugkiller是踩线的,但是这也太不公平了。 顾司玥说过的那句话浮上来,“hr说的不算,白纸黑字写的才算。” 他手指无意识地敲了两下桌面。 手机亮了,是陌生號码。 “您好,请问是韩路一韩先生吗?”是个职业腔女声,笑意都镶在音调里。 “是的,请问你是哪位?” “韩先生您好!我是锐才猎头的linda,冒昧打扰。我这边有一个算法总监的机会想跟您简单聊聊,年薪、奖金加期权,总包一百二十万以上,团队十五人。客户是头部网际网路公司,名字不方便直说,但您肯定知道。” “我跟鼎盛有竞业,你们客户介意吗?” “没关係的韩先生,客户和您上家不算同业,这类情况他们法务常处理,jd我发您看看?” 韩路一靠回椅背。 视线落在桌上那封提醒函上。 一百二十万,鼎盛给他六十五万,將近翻了一倍。去大厂当总监,竞业的事有公司法务扛,不像现在一个人创业,对面来一封信就能把你钉在墙上。 一封信告诉他,你不许做。 一个电话告诉他,你可以不做。 讽刺的是,这两件事中间只隔了十五分钟。 “发我吧。”他说。 “当然!我加您微信!” 掛了电话,韩路一把手机放在桌上,屏幕正好挨著那封提醒函。一个发光一个不发光,並排摆著。 微信弹出好友申请,他通过了,对方秒发来一份pdf。 韩路一打开扫了一眼:技术栈熟悉,团队规模合適,核心kpi是推荐系统优化,跟他在鼎盛乾的差不多,换了个壳换了个级別。年薪加期权,三年能拿到手的数字他心算了一下,不算少。 他手指在屏幕上停了两秒。 收藏,然后回了个“谢谢”。 打开电脑。 苏念念半小时前发来的v0.1內测反馈匯总。十九条用户意见,每一条都標了优先级和建议方案。 他往下翻了几屏。 “7)误报率降到5%以下才能进入工作流,目前体感约8%,建议增加“忽略”功能並记录用户忽略模式用於叠代。” “14)cli界面够了但vscode插件是刚需,看看能不能v0.3做?” 14那行她又加了一条备註:“这条我问了五个人,四个说“有插件我天天用,没插件我偶尔用”。” 他盯著看了一会儿。 桌上的提醒函还摊著。他没收,也没再看。 又打开微信翻起了通讯录。 【法律顾问-顾律师】。 之前存这个备註的时候,想的是帮林晚晴打官司。 现在第一个用上的倒是他自己。 “顾律师,方便吗?有个急事。” 一个语音打了过来,那边有翻文件的声音。 “说。” “鼎盛法务给我发了一封竞业限制提醒函,今天上午收到的。” 安静了三秒。韩路一以为信號不好,刚要再说一遍,顾司玥开口了。 “带著你的离职协议来一趟。”顾司玥说,“当面说。” 掛了。 韩路一看著手机屏幕,通话时长四十七秒。 他愣了一会。 窗外遛狗的人走了第二圈,桌上的提醒函安静地躺著,黄色萤光笔標出的那段话在下午的光线里泛著一层薄亮。 韩路一收起文件,起身去换衣服。 第十七章 她在第五层 和合大厦,十九楼,博衡律师事务所。 这是韩路一第三次来博衡。 上一次是两周前,bugkiller刚跑通,他来做著作权和商標。那天他坐在访客椅上,觉得自己在做一件很酷的事。 这次来,他手里多了一封ems。 前台认出了他。“顾律师在办公室,我领您过去。” 他敲了一下半开的门。 顾司玥坐在桌后翻一份文件。上次隔著走廊看到的备用衬衫还在,只是换了位置。桌面上有两个空掉的咖啡杯。 “坐。”顾司玥没抬头。 韩路一坐下,把鼎盛的提醒函放在她桌上。 顾司玥看了一眼信封上的“鼎盛集团法务部”几个字,打开看了看內容。 韩路一也开了视界,看向那份文件。 法律文本上浮出一层半透明的高亮批註,像代码review里的注释。竞业条款那一段被標了红—— 【竞业限制范围条款|风险评估:存在爭议,无效概率约45%】 【原因:限制领域“人工智慧、数据分析、软体开发工具及相关领域”,范围偏宽但未明显超出行业惯例】 【法律依据:《劳动合同法》第24条|司法实践中类似条款裁判结果不一,取决於具体举证】 韩路一皱了皱眉头。四五成的概率,跟拋硬幣差不多。打官司的话,不好说。 他刚要开口。 顾司玥拉开了右手边的抽屉。 拿出一个蓝色文件夹,不厚,推到他面前。 “先看看这个。” 韩路一打开文件夹。 三份文件。按时间顺序排好,每份用回形针別著。 第一份。 催收函复印件,附ems签收回执。 【致:鼎盛数字科技集团有限公司人力资源部张薇女士 本所受韩路一先生委託,就贵司与委託人签订之竞业限制协议事宜致函如下:委託人已於2026年2月26日正式离职,依据双方协议约定,贵司应自离职之日起按月支付竞业限制经济补偿金。截至本函发出之日,首期补偿金已逾期,委託人尚未收到任何款项。 特此函告,请贵司於收函后五个工作日內依约履行补偿金支付义务。逾期未回復或未支付的,委託人將视为贵司明確拒绝履行补偿义务,並依法主张相应权利。 博衡律师事务所顾司玥律师 2026年3月27日】 周五,他算了一下,那天是他离职整四周。 韩路一翻到第二份。 一封邮件的列印件。发件人:张薇。收件人:顾司玥。时间:3月27日,15:17。 【顾律师您好: 经核实,韩路一先生的岗位级別(p7)不在竞业限制补偿金髮放范围內。如有其他疑问,请联繫我司法务部。 此致 张薇 鼎盛集团hrbp】 韩路一盯著这封邮件。 標准的hr模板。收到催收函到回復,不到半天。连法务都没抄送。对张薇来说,这大概跟回復一封考勤查询差不多。 p7嘛,不发的,流程走完了。 他翻到第三份。 竞业限制解除通知书的复印件和签收回执。 【收件人:鼎盛数字科技集团有限公司法务部。 发件人:博衡律师事务所,顾司玥律师,受韩路一先生委託。 日期:3月30日。星期一。 ……贵司人力资源部张薇女士已於2026年3月27日以书面方式明確告知委託人:其岗位级別不在竞业限制补偿金髮放范围內。贵司以实际行为明確表示不履行竞业限制协议项下支付经济补偿金之主要义务。 依据《中华人民共和国民法典》第五百六十三条第一款第二项之规定,委託人韩路一先生特此通知:解除双方竞业限制约定,自本函送达之日起生效。】 韩路一把三份文件放下了。 看向顾司玥。 “……你什么时候办的?” “你上次来的那天晚上,”顾司玥说,“把离职协议照片发给我之后。” 韩路一想起他上次来博衡做著作权諮询,走的时候顾司玥让他把离职协议拍给她看。当天晚上他发了照片,顾司玥回了一份电子委託书让他签,说“先把授权做了,后面可能用得上”。 “你当时就知道他们不会发补偿金?” “p7,非核心岗位,標准裁员流程。”顾司玥的语气像在念结案报告。“这种级別的竞业条款,十个公司九个不实际执行。连hr自己都当走过场。” “所以催收函……” “当然不是催钱,是钓鱼,”顾司玥说,“我要的就是她这封拒绝邮件。” 韩路一没跟上:“……什么意思?” 顾司玥往椅背一靠,换了个跟客户讲案子的节奏。 “竞业限制是双务合同。你不去竞爭对手那里,公司按月给你补偿金。两边各有义务。” 韩路一点头。这部分他知道。 “正常情况下,公司连续三个月不付补偿金,劳动者可以请求解除竞业限制。这是最高院的司法解释,也是大多数人走的路。但三个月太久了,你的產品等不了三个月。” “那你怎么绕过去的?” “民法典五百六十三条。”顾司玥说。“一方明確表示不履行主要义务的,对方有权解除合同。关键词,“明確表示”。张薇那封邮件,“p7不在补偿金髮放范围內”,就是鼎盛明確表示不付钱的书面证据。拿到这个,解除权直接成立。” 韩路一回过味来了。 “催收选在周五发。这种级別的case,hr不会请示上面,当天就按流程回了。” 他顿了一下,自己接上了下一步:“不回也没关係,催收函上有回覆期限,逾期不回——” “视为拒绝。”顾司玥接过去,“五六三条照走。再不济,三个月不付款,还有司法解释兜底。” 韩路一的手指在扶手上无意识地敲了两下,这是他写代码时跑逻辑的习惯。 “那还有一种情况,”他说,“他们真的付了。” “那你先拿著钱,”顾司玥说,“竞业继续生效,但你那份协议写的限制范围是“人工智慧、数据分析、软体开发工具及相关领域”,基本把整个it行业都框进去了。这种条款拿到仲裁庭上,完全有可能认定范围过宽、部分无效,到时候再打。” 韩路一低头看著桌上那封鼎盛法务寄来的提醒函。 “如贵方已在限制领域內从事经营活动,请立即停止。” 出门前他盯著这句话坐了两分钟没动,现在再看,有点可笑。 这张纸在寄出之前就已经是废纸了。 “那鼎盛法务不知道?”韩路一把提醒函推到一边,“解除通知就在档案柜里,还发这个?” “催收函和解除通知都寄的法务部公共收件地址。p7离职员工的case,处理完就归档了。这封提醒函大概是另一个人推的,经手人未必翻过那个档案。” 韩路一点了一下头。 他的视线漫过办公室,落在窗台上。 一盆小绿萝搁在窗台边,叶子蔫巴巴的,盆里的土干得发白,比上次路过时更惨了。 “你这个绿萝,我上次来就注意到了,还有救吗?” “它不在我的业务范围內。” “倒杯水就能活,绿萝挺好养的。” 顾司玥没接话。 但她伸手拿起桌上喝剩的半杯水,倒进了花盆里。 韩路一看著水渗进乾裂的土里,安静了一会儿。 “顾律师,太感谢了。” 顾司玥看看他:“你付费了。” “可太值了。”韩路一笑了。 “著作权登记已经通过了。”顾司玥把话题拉回来,“商標查重也没衝突,法律身份没问题。” 韩路一点头。 顾司玥合上了面前的文件夹。 “但竞业是小事。” 她拿起手机,翻出一张照片,递过来。 拍的是一份內部文件,角度歪,光线不好,像是在会议室偷拍的。 鼎盛数字科技集团:《前员工竞业合规排查》。 一份名单,十几个名字。 只有一个名字是红色的。 韩路一。 “这封提醒函不是法务部例行公事。”顾司玥说,“是有人专门推动的,十几个人的排查名单,只有你被標红。” 韩路一没说话,他想到了昨天视界扫描提醒函时看到的那行数据。 【文件发起链条:陈博文(建议)→法务部合规专员李洋(执行)→审批人:王志远(vp)】 但这个他没法告诉顾司玥。 韩路一把那份报告放回桌上,离开了顾司玥的办公室。 他靠在电梯壁上,看著楼层数字一格一格往下跳。 张薇按惯例拒了催收函,解除通知寄到法务部,归了档,没人多看一眼。 但陈博文还不知道。 他拿著一把一周前就坏掉的枪,还在瞄准。 什么时候他会发现枪打不响啊? 第十八章 竞爭对手 晚上七点半。 有人敲门。 林晚晴站在外面,手里端著一个盘子。 一盘小蛋糕。奶油抹得很均匀,表面用可可粉撒出一片树叶的形状,边缘点缀著几颗草莓,全挤在一起。上面用奶油挤了两个字,“谢谢”。 林朵朵从妈妈身后探头:“路一哥哥!妈妈做的!我帮忙放了草莓!” 韩路一蹲下来看她,“草莓是你自己摆的?” “嗯!本来放了五颗,我尝了两颗,甜的。” 理直气壮,像是在匯报质检结果。 韩路一拿了一块。 “好吃。草莓放得特別好。” 林朵朵搂住妈妈的腿,仰著头说:“妈妈,路一哥哥说好吃!” 林晚晴摸了摸朵朵的头,嘴角弯了一下。 “上次的事,一直想说谢谢。”声音轻轻的,目光没怎么抬。 她眼下有一层淡淡的乌青。 林晚晴没有多待,蛋糕放在鞋柜上,拉著朵朵就走了。朵朵还在门缝里挥手:“路一哥哥晚安,” 501的门关上了。他打开了视界。 【林晚晴|情绪:疲惫(隱藏:焦虑)|核心焦虑:抚养权诉讼|当前应对状態:无法律支持】 韩路一拿出手机,翻到顾司玥的对话框。 “有个朋友可能要打抚养权官司,你那边有人能接吗?” 秒回。 “有,我们所有个合伙人专做婚家。什么情况?” 婚家。他搜了一下,婚姻家事。 “具体的等我確认了再说。对方经济条件一般,费用能不能灵活点。” “我们所里有法援名额,符合条件的话可以减免。让她先別急。” 又过了几秒,顾司玥追了一条。 “另外,你的竞业排查名单我又看了一遍。十几个人只有你被標红,不正常。还有个法律风险我在核实,確认了当面说。” 韩路一站在门口把那块蛋糕吃完了。 回到电脑前。bugkiller v0.2还差最后一步,一键修復。 思路不复杂:扫出bug之后,把上下文丟给大模型生成补丁,再用bugkiller自己扫一遍补丁代码,確保没引入新问题。检测是自己的长板,生成让大模型干,各司其职。 难点在最后一步。bugkiller得判断补丁有没有“修出新bug”,而不同框架的写法天差地別,react和vue不一样,python和go也完全不同。通过率卡在93%,苏念念要求的门槛是95%。 两个点。 又花了三个小时重写模板匹配逻辑,试了四种方案。第四种过了。 通过率95.2%。能交了。 bugkiller v0.2最终版打包完成。 新增功能两个:bug影响评估加了置信度百分比,修復建议支持一键生成代码补丁。发给苏念念。 刚发完,苏念念那边就回復了。 “发了?我马上看。” 十五分钟后,消息开始轰炸。 “v0.2比v0.1强太多了。影响评估的置信度怎么做到的?” “你別管怎么做的,先测。” 五分钟。 “上次扫出来的那五个未知bug还记得吧?我刚用v0.2一键生成补丁,五个,全过!韩路一!我感觉我成开发了!” 过了半分钟没说话。產品经理在算帐。 “韩路一,这东西以后怎么定价?” “还没想。” “赶紧想。能帮人省两周人力的工具,不愁卖的。” “你怎么还没睡?” “在测你的东西,少转移话题。定价你得上心了。” 又过了一分钟。 “我明天开始拉人,先凑20个內测用户。你做个邀请码出来。” “行。” 韩路一刚要关电脑,苏念念又发了一条。 不是关於v0.2的。是一个连结。 《ai代码审查赛道升温:又一家初创拿到天使轮》 “你看看这个。” 韩路一点开。 科技媒体的深度分析。重点提到一家叫codesafe的初创公司,刚拿到天使轮,背后投资方隱约有鼎盛关联资本的影子。创始人赵文渊,斯坦福cs博士,在谷歌呆过三年。 產品方向:ai驱动的代码审查与风险评估。 韩路一翻了翻文章的其他段落。codesafe去年十一月成立,运行了五个月,团队从三人扩到三十人。天使轮的钱够烧至少半年。 他打开视界,扫了一眼codesafe的官网。 【codesafe | ai代码审查】 【核心路线:大模型+大数据(重资產)】 【公测日期:4月27日】 大概三周后。 精力扣了8点。 面板底部还掛著一行小字,投资链条的末端。 【天使轮投资链条:鼎恆创投(lp含鼎盛集团)→个人跟投:王志远】 王志远。 韩路一盯著这三个字看了两秒。快闪的天使轮也有他,张浩然说的那个壳公司。现在又是他。 一个鼎盛的vp,到处投初创公司,挺忙的。 他关掉视界。 苏念念的第二条消息跟了上来。 “这也太巧了吧?” “看了。三十个人,有钱有团队。” “慌不慌?” “说不慌是假的。但他们走大模型重资產,我们走轻量,路线不一样。重的烧钱快、叠代慢,轻的反过来。短期他们功能可能比我们全,但跑长线我们有机会。” “机会有多大?” “不知道。但他们现在还没產品出来,我们v0.2今晚跑通了。先把內测做起来吧,有用户口碑才有得聊。” 苏念念过了一会儿才回。 “行。邀请码明天给我,我先拉人。” 关上电脑,拿起手机,刷了一会技术论坛。 《推荐系统架构改造的七个经典陷阱》阅读量破了一万二。私信列表里多了几条,有的请教,有的约稿,还有一条来自一个他认识的id,鼎盛gg数据组的前同事,跟他同期入职。 “大神你好,我是某公司的后端开发,你写的第三个陷阱我们正在踩。方便私聊吗?” 韩路一没回。这人用的是鼎盛工作邮箱註册的论坛帐號,说明他还不知道nullpointer是谁。但一个鼎盛的人主动找nullpointer求助…… 博客下面最高赞的评论写著:“nullpointer到底什么来头?这种架构级別的分析不像普通开发者。” 404群也在炸。马小飞丟了条连结,《鼎盛数字宣布旗下推荐系统全面升级,下周起覆盖全线短视频及电商应用》。 马小飞:“牛逼啊,全量上线。你们说会不会崩?” 张浩然:“系统改造两个月就敢全量,你猜呢。” 韩路一打了几个字:“不是会不会。是什么时候。” 马小飞:“???你这么確定?” 马小飞:“那陈博文那小子不是完蛋了?” 韩路一没再回。他想起之前视界扫描的d-评级,140个bug,峰值延迟飆升300%。 全量上线之后,撑不过72小时。 第十九章 我是预言家 鼎盛数字推荐系统全量上线了。 韩路一刷到微博热搜的时候是下午三点。#鼎盛推荐系统抽风#,排第十七。 点进去,画风很统一。 “给我推婴儿车。我二十三,单身,养了条狗。” “我的健身帐號刷出来全是保健品和助听器。” “我看了一上午美食视频,首页给我推了个殯葬服务优惠。鼎盛大概觉得我吃太多了,提前帮我安排后事。” 评论区充满了快活的空气。 有人总结:“鼎盛的“猜你喜欢”应该改名“猜你是谁”,连我是谁都没搞清楚就开始猜了。” 韩路一没笑。 態规则引擎本身不至於这么离谱,推得不准是正常的,但推得这么驴唇不对马嘴,说明数据管道出了问题。他一行一行写出来的特徵提取模块被砍掉之后,旧的用户画像格式和新引擎之间没人做適配,输入全是乱的。垃圾进,垃圾出。 推婴儿车不算什么。等数据管道的缓衝区吃满,后面的事就不好笑了。 第二天上午,微博上的吐槽变了味,热搜也衝到了第三。 最高赞:“打开鼎盛买菜app,给我推了一屏幕情趣用品,我妈就站在旁边。我现在怎么跟她解释啊?” 有人发:“我在深圳,“猜你喜欢”给我推了一整页哈尔滨本地火锅店。问了个哈尔滨的哥们,他那边全是深圳奶茶店。我俩换號了?” 有人跟:“不止你们。我和我同事的推荐页一模一样。连顺序都一样。” 技术论坛这边也炸了。 一个id叫“架构老狗”的资深开发者发了长帖: “说句不好听的,这个推荐系统的改造路线非常眼熟。特徵提取从动態权重退回静態规则,多模態融合模块砍得只剩文本维度,nullpointer上个月那篇《七个经典陷阱》,第三、第五、第七个,鼎盛全踩了。建议写个续集:《七个陷阱实战教程,由某大厂倾情演绎》。” 两小时一百三十多赞。 韩路一看了看自己那篇博客的阅读量。一万八。 窗外的天空灰得像没校色的显示器。雨还没下出来,空气闷得发黏。 还没人意识到真正的问题有多大。 到了晚上十一点半。 韩路一睡前又刷了一眼微博。 掛了两天的话题#鼎盛推荐系统崩了#,热度已经下去了。 一个新的话题,#鼎盛崩了#,衝到了热搜第一。 他点进去。二十分钟前,鼎盛系三款核心app集体闪退,用户打开就白屏。 推荐系统的崩溃没有触发熔断。坏掉的模块像传染病一样顺著调用链往上爬,拖垮了依赖它的內容分发、搜索、首页加载,最后整条链路全死了。 十一点十五分鼎盛发了紧急公告。十一点四十分,app陆续恢復上线,他们手动把推荐系统整个切掉了。 微博上有人贴了恢復后的截图。首页乾乾净净,没有“猜你喜欢”,没有个性化推荐,没有千人千面。就一个光禿禿的货架。 “这是2015年的app吧?” “鼎盛的推荐系统呢?去哪了?” “切了。不切整个app都用不了,你选哪个?” 韩路一打开视界。 【事件性质:系统级故障(无熔断→全链路雪崩)】 【根因:画像格式不適配→解析异常堆积→內存泄漏触发oom→数据管道断裂→ 23%用户画像错乱→推荐模块崩溃未熔断→级联击穿全链路】 【影响范围:宕机期间全量用户(峰值约1200万在线),当前降级运行中】 【当前状態:手动切断推荐模块,app降级运行】 【预测恢復周期:版本回退至原架构,约14天】 跟他的判断一模一样。 三月中旬他扫那个外包需求时看到的d-评级,一百四十个bug,就指向这个结局。当时看到的是七十二小时。 从周一上午全量上线到周二晚上全线崩溃,还不到四十八小时。 比原本预估的还快了一天。 …… 天亮之后的事,像多米诺骨牌。 有人翻出了韩路一一个月前那篇《推荐系统架构改造的七个经典陷阱》,发了一条帖子—— “兄弟们!nullpointer是预言家!一个月前精准描述了鼎盛今天的崩溃路径,七个陷阱全踩了!” “什么预言家,是重生者!” “不是全踩。我数了数,至少五个。” “你数错了。第二个和第六个也中了,只是症状还没完全暴露。” “所以是七个全踩?” “七杀。” 帖子被版主置顶。博客阅读量开始飆。中午两万九。下午四万二。晚上破六万。技术媒体引用,大厂群截图传播,连几个头部科技公眾號都转了。 404寢室群里也在討论。 马小飞丟了条连结进来:“你们看了吗这个nullpointer?一个月前写的文章,七个陷阱鼎盛全踩了。这人也太牛了吧。” 张浩然:“技术圈都在转。” 马小飞:“你们说这人会不会就是鼎盛內部的?不然怎么写得这么准?” 没人接话。 过了几秒,韩路一打了一句:“是我写的。” 马小飞:“???” 张浩然:“nullpointer是你?” “嗯。別往外说。” 马小飞发了条语音,韩路一没点开都知道他在喊什么。 张浩然:“知道了。” 下午,討论从“鼎盛系统崩了”升级到了“谁的锅”。有自媒体把时间线整理出来,鼎盛年初裁员,核心算法团队换血,新团队全面改造系统架构,两个月后全量上线,两天崩溃。配了一句:“教科书级別的管理灾难。” 评论区有人说了一句:“被裁的那个核心开发叫什么来著?” 没人接话。帖子的瀏览量继续在涨。 苏念念在微信上转了这条给他:“你之前做的不就是推荐系统吗?这是不是你们组的?” 韩路一回了个“嗯”。 他关掉论坛,切回代码编辑器。內测组反馈积了一堆,最集中的问题是误报率,v0.2降到了7.8%,苏念念標的目標是5%以下。二十三个內测用户里四个人提了同一条:误报太多,影响工作流。 该干嘛干嘛。 晚饭是冰箱里的速冻水饺,煮了十个,吃了八个,剩两个烂了倒掉。 洗完碗坐回电脑前,九点半。 微信弹了一条。赵启明。 “韩哥,睡了吗?” 韩路一回:“没,怎么了小明” “今天加班到现在刚回来,跟你说个事。 “下午开了復盘会,陈博文全程在甩锅。 “说系统崩溃的根因是“前任核心开发者遗留的架构缺陷”。 “ppt上你的名字出现了四次。什么“过度耦合的动態权重设计导致系统脆弱性”,什么“缺乏文档交接”。二十三页ppt,有四页在说你。 “放屁啊,那套动態权重是你写的,跑了三年多没出过事,他一上来全改崩了。 “文档我也写了啊,他看都没看。” 韩路一看著这行字,没动。 过了几秒。赵启明又发了一条。 “我在会上差点当场懟他。忍住了,简歷还没投出去呢。” “现在这环境,就当日结工资了。先把自己的事安排好。” “我有数。就是太他妈噁心了,跟你说一声。” “嗯,知道了。谢谢【抱拳】” 赵启明发了个嘆气的表情包。 “行了韩哥,你早点睡。我也扛不住了” 韩路一放下手机。屏幕暗了几秒又亮了。是顾司玥。 “鼎盛的事你看到了吧。小心被牵连,有情况隨时找我。” 第二十章 装弹 早上七点闹钟响了。韩路一拿起手机。赵启明凌晨三点发来消息。十二张照片,手机拍的,陈博文的復盘ppt,二十三页。“韩哥,偷拍的,你留著。” 核心论点就三句话。 一、原架构设计者留下了严重的技术债务,包括过度耦合的动態权重系统和缺乏冗余设计的数据管道。 二、团队在继承和优化过程中,遭遇不可预见的系统性风险。 三、建议对前员工遗留代码进行全面审计,明確责任归属。 他翻完十二张截图,把这事在404群里说了一下。 马小飞:“这他妈是把锅焊在老韩头上啊。” 张浩然:“这手段很恶毒啊。如果不了解真实情况,可能真有人会信。” “第三条最毒。”张浩然说。“明確责任归属,先定性,后面想怎么追都行。” 马小飞:“还有个更噁心的。今天凌晨,某科技自媒体发了篇文章,” 他截了图丟群里。 標题:《被裁员工的代码炸了老东家?一场推荐系统崩溃背后的人事博弈》 马小飞:“我问了渠道,这篇不是编辑部自发的。走投放。有人买单。” 张浩然:“ppt对內,文章对外。內外夹击。標准公关打法。” 韩路一打字:“里面提我名字了吗?” 马小飞:“没直接点名。写的是“一位在鼎盛工作五年、负责核心推荐系统的算法工程师”。稍微查一下就能对上。” “而且,”马小飞又发了一条。“这篇文章故意把nullpointer的博客拎出来一起讲了。原话:“一个月前精准预测崩溃路径的匿名博主nullpointer是否就是这位前员工?”” 群里没人说话。 韩路一把手机扣在床上,去卫生间洗了把脸。水龙头开了很久,凉水从指缝往下淌。 回来拿起手机。马小飞问:“老韩,什么打算?” “下午去见律师。” 马小飞:“我先帮你懟回去?咱不能吃这个哑巴亏。” “別。”韩路一打字。“你一出手,人家顺著你查到我,正中下怀。” 马小飞:“……行吧。” …… 下午两点。博衡律师事务所。 前台已经认识他了。“韩先生这边请。” 顾司玥在办公室等他。 窗台上那盆绿萝比上次好了一点,新抽了两片小叶子,土是湿的。 桌上摊著三份文件,按顺序排好。她面前摆了两杯咖啡,推了一杯到对面。 “坐。咖啡。” 韩路一坐下,端起咖啡。 顾司玥把一张纸推过来。上面画了三个圆,分別標著,竞业、归责、职务作品。前两个用红线连著,第三个单独在下面,画了个大大的感嘆號。 “你看到那篇自媒体文章了?” “看了。” “他们在打组合拳。”顾司玥拿起笔,点了点前两个圆。“竞业是锁链,归责是攻击。他们的算盘是,你站出来自辩,就暴露bugkiller跟鼎盛业务的关联性,他们就用竞业协议攻击你。你不回应,敘事权在他们手里。” “挺聪明的。”韩路一说。 “对。但他们漏算了一步。” “竞业已经没有了。” 顾司玥点头。 她在第一个圆上打了个叉。 “竞业没了,锁链就断了。你隨时可以站出来说话。但我建议先不动。” “为什么?” “主动澄清等於承认你是当事人。一旦开口,对方就拿到了互动的机会,你说什么他们都能接著打。先手在我们这边,没必要让出去。” “那你的建议是……?” “等。收集证据。归责文章的投放记录、传播路径、跟陈博文的关联,这些都是名誉侵权的子弹。现在只需要装弹,不用发射。” 韩路一喝了口咖啡。 “那第三个圆是什么?” 顾司玥停了一下。她把剩下那份文件推过来。封面是《中华人民共和国著作权法》,第十八条被黄色萤光笔標了出来。 “上次我说有个法律风险在核实。就是这个。” 韩路一等她说。 “职务作品。” 顾司玥翻开那一页。 “著作权法第十八条。员工离职一年內完成的、跟原岗位主要职责相关的作品,单位有权主张属於职务作品。” 她的手指点在那行字上。 “竞业是“不让你做”。职务作品是“做了也是我的”。” “如果鼎盛主张成功,就不是赔钱的问题了。你的新產品,包括代码、模型、数据、商標,全部归属权归对方。” 韩路一放下咖啡杯。 “我能证明代码是离职后写的。代码提交记录,云平台帐单,都有时间戳。” “光证明时间不够。”顾司玥摇头。“构思、设计、实现,全链条都要能证明跟鼎盛无关。法院看的是,你离开鼎盛的时候,脑子里有没有带走东西。” 她翻到下一页,一张清单。 “git提交时间线、开发环境日誌、云平台帐单、设计文档版本歷史,这些全都要规范化存档。这些是將来上庭的弹药。” 顾司玥翻回著作权登记文件,指了一行。 “你的核心模块描述里写了“bug模式知识库”。这个知识库里的模式,有多少来自你在鼎盛的项目经验?” 韩路一沉默了两秒。“不少。” “经验归你,不归公司。这个官司他们打不贏。”顾司玥合上文件。“但打不贏不等於不会打。拖你进仲裁,光举证就要几个月。你现在有几个月可以浪费?” 韩路一没接话。 “陈博文还沉浸在竞业和归责里。但等他发现竞业走不通,会找新路。职务作品就是最顺手的那条。” “窗口多长?” “不好说。一到两个月。够你做准备了。” 韩路一站起来。 “回去把开发记录整理一遍。git log、云帐单、笔记、草稿、每一版设计文档。能证明bugkiller从第一行代码到现在,每一步都跟鼎盛无关。” “知道了。” 顾司玥送他走到门口。 “对了,你之前问的抚养权。情况確认了吗?” “確认了。对方前夫要爭抚养权,她没请律师。” “让她联繫沈予微。”顾司玥从桌上翻出一张名片递过来。“家事诉讼她比我专业,我来盯策略。费用的事我跟予微说。” 韩路一接过名片。“谢了。” “给我的客户牵线而已。” 韩路一走进电梯。门关上之前,走廊尽头传来她的声音,在打电话:“予微,我手上有个家事case……” 回到家。晚上八点。 韩路一打开电脑,在加密网盘里建了个文件夹。 evidence_chain。 git提交日誌导出、云平台帐单、每一版设计文档的修改记录、域名註册信息、苏念念发的每一条產品反馈,全部按时间线归档,同步到云端。 手机亮了。苏念念。 “內测数据出来了。二十三个人里十九个人用了超过五次。有三个主动问我什么时候出付费版。” 苏念念又发了一条。“有个內测用户是个小公司cto,今天跟我聊了半小时。他想把bugkiller接进他们的ci流程,每次提交自动跑一遍。问能不能开api。” “现在没有。但不难。” “我整理了一下他的需求,明天跟你对。如果这条路走通,企业客户的口子就开了。” 韩路一关掉微信,打开了技术论坛的后台。 草稿箱里躺著一篇帖子,上周写的,一直没发。 標题:《一个新產品:bugkiller》。 瀏览器另一个標籤页还开著那篇自媒体文章。標题里“前员工”三个字加了粗。 光標在“发布”上停了两秒。 第二十一章 One More Thing 草稿在论坛后台躺了四天。二十三个人的反馈磨了三轮,v0.3才算定稿。 四月二十號,周一晚上。苏念念测完最后一轮:“够了。发吧。” 韩路一打开草稿。標题还是上周写的,《一个新產品:bugkiller》。 正文改了四十分钟。开头三段纯技术,中间插了两张v0.3的扫描结果截图,脱敏过的。结尾一句话:“今天开放限量测试,50个名额。填表申请,先到先得。” 最后加了一段声明,数据来源合规,源码可审计。 发布。 发完帖他切回编辑器写v0.4。凌晨一点半,框架搭完,冰箱里最后一盒速冻水饺下了锅。煮好端到电脑前,顺手扫了一眼帖子。 內测申请表提交人数:127。 五十个名额,三个半小时,一百二十七人。 第二天上午,韩路一被手机震醒。 是苏念念。连发八条消息,前三条是“???”“你看论坛了吗”“快起来”。 他揉著眼睛打开论坛。 內测申请:638。瀏览量:12,400。回覆:289。私信:67条未读。 回苏念念:“正在看。” 韩路一靠在床头把评论区从头翻到尾。 “nullpointer做產品了???这是什么跨界打劫??” “影响评估是什么鬼,扫出bug还能告诉我上线后会死多少用户?请问这合法吗?” “nullpointer之前分析鼎盛崩溃封了神,现在把这能力做成產品。传说中的大佬下凡开店,凡人瑟瑟发抖。” 有人做了投票,“你觉得bugkiller能不能干掉市面上的代码审查工具?” 一千二百多票。67%选了“有可能”。 404群里也有未读消息。马小飞丟了一串问號过来。 “哥!你那帖子上热帖了!我朋友圈被你刷屏了!科技圈好几个大號都在转!” 张浩然冒出来:““nullpointer做產品”,脉脉热帖第三。你小心身份被猜到。” 马小飞:“我帮你宣传宣传?我现在六万粉了!” 韩路一:“不用。” 马小飞:“?” 张浩然:“nullpointer现在是匿名的。你一宣传,画像就收窄了。” 马小飞沉默了五秒,回了两个字:“忍了。” 中午。申请人数破八百。 韩路一从里面筛了第一批,五十个名额,全挑技术栈匹配度最高的。二十分钟,帐號全部开通。 下午两点。第一批內测用户的反馈开始涌进来。 论坛、微信私信、邮件,三个渠道的通知刷不完。 “扫了我们公司核心服务,找到6个我们不知道的bug,其中两个高危。影响评估说其中一个如果不修,上线一周內会影响约12万用户。我们查了一下,这个模块確实排在下周灰度。救命。” “把自己的开源项目扫了一遍。8个问题,逐个验证,全是真的。3个我知道但一直没修,5个完全不知道存在。” 韩路一一条一条回私信。回了一会,手指有点酸,去厨房接了杯水,回来继续。 “这不是代码审查工具。这是代码审查加风险预警系统。nullpointer你是不是开了天眼?” 论坛前排有一条评论引爆了討论。 “影响评估有点恐怖。它说我一个bug会导致“峰值期0.3%的订单金额计算错误”。我算了一下,日均八万单,0.3%是240单,平均客单价85,一天两万,一个月六十万。一个bug。六十万。” 底下跟了一串。 “六十万?bugkiller按这个算投入產出比,定多少钱我都买。” “你们別光说好话,说说缺点。” “缺点:名额太少了。建议nullpointer开放一万个。” 窗外黑了。他没开灯,屏幕的光映在脸上。隔壁501传来林朵朵的笑声,隱隱约约的,大概在看动画片。 论坛最新一条,“java那个我也遇到了,nullpointer回我了,说v0.4会改进。你们知道什么叫售后吗?这叫售后。” 苏念念从下午开始就在整理反馈。飞书表格,四栏,功能模块、用户原话、优先级、建议方案。到晚上七点,四十七行。 她打来电话的时候声音有点哑了。 “路一,我跟海狸科技请了两周年假。” 他正在改代码,手停在键盘上。 “你不用,” “你一个人写代码、改bug、回用户、整理反馈、写文档,你同时干几份工?我项目早被人拿走了,请假也没人管。这两周我全投bugkiller。” 韩路一没说话。 苏念念:“明天上午九点,bug café。所有內测数据发我,今晚我先看。还有,v0.4叠代方向我想好了,你先別动手,等明天碰完再说。” “我刚把v0.4的框架写完了。” 苏念念沉默了三秒。 “发我看看。” 五分钟后回了一句:“功能优先级跟我排的一模一样。” 又过了两秒,苏念念发了条语音:“写完了你不早说?我白排了一下午。” “你没问。” “明天九点。別迟到。” 晚上十一点,帖子发出二十六个小时。 申请人数:2147。瀏览量:43000。回覆:687。 有技术媒体编辑在评论区实名留言:“求专访nullpointer。”底下一百多条回復,排队去。 面板闪了一下。 【经验值+8|当前:45/200】 bugkiller帮助內测用户发现並定位了多个实际bug,系统判定:批量帮助。 韩路一关掉面板,准备关电脑。 习惯性刷新了一下帖子。 回復区最顶上多了一条新评论。三分钟前。 “bugkiller的bug检测模式资料库来源存疑。建议作者公开数据来源和训练方法论,否则无法排除使用了未授权的商业数据进行训练的可能性。作为同赛道从业者,我认为数据合规是產品公信力的基础。” 帐號名:techethicswatch。 註册时间:今天。发帖数:零。回复数:零。头像是默认灰色。 唯一的操作就是这段话。措辞精准,语法工整,不像技术社区里的吐槽,像律师擬的声明。 韩路一往下看了一眼点讚列表。 第三个。 codesafe official。 codesafe的公测大概还有一周。產品还没上线,已经开始给別人的质疑帖点讚了。 韩路一把这条评论截了图,发给顾司玥。 关掉了论坛。 第二十二章 陈经理 鼎盛集团总部二十八层。晚上九点半,整层楼还灯火通明。陈博文办公室在走廊尽头,门关著。 他在刷论坛。 技术论坛热帖榜第二条,《nullpointer画像分析:他是谁?》。帖主把nullpointer所有公开信息串了起来,写得像侦探报告。 “bugkiller的bug模式资料库覆盖推荐系统、电商后端、支付链路三个方向。其中推荐系统方向的模式深度远超其他两个,推测他有很深的推荐系统背景。” “鼎盛推荐系统崩溃。nullpointer一个月前发的博客精准命中全部崩溃路径。简直像是当事人回忆录。” 当事人。推荐系统。鼎盛的推荐系统。 陈博文不用猜。 推荐系统核心开发,今年离职,技术顶尖——鼎盛符合条件的只有一个人。他亲手裁的。 评论区还在猜,“鼎盛?字节?海狸?小黄书?” “在职的大厂员工不可能做產品吧?被公司发现直接开除。” “那就是离职的。” 全网都在找nullpointer。没人知道答案就在他手机里,那是他两个月前亲手签的裁员审批单,上面的名字叫韩路一。 陈博文放下手机。嘴角压了一下,没压住。 竞业提醒函上个月就发了。十二个月限制期,白纸黑字。韩路一做bugkiller,正面撞上限制条款。 这不叫巧,这叫送。 论坛里所有人在猜“大厂高级专家”,p8起步,p9也有人猜。 一个p7而已。 他站起来,走到落地窗前。二十八楼,半个城市的灯铺在脚下。 一封函的事。 第二天上午。陈博文去了一趟二十二楼法务部。 上次来还是推那封竞业限制提醒函。走廊尽头的工位区,一排格子间,空调比楼上冷两度。 小周在。就是上次帮他擬提醒函的法务专员。 “小周,帮我擬个东西。竞业限制违约追诉函,前员工韩路一。” 小周推了推眼镜。“陈总,追诉函我需要先核实一下执行状態……” “十二个月限制期,二月底离职,不到两个月。他做的產品叫bugkiller,做ai的,全面覆盖。”陈博文把截图递过去。“板上钉钉的事,直接擬。” 小周看了看截图,犹豫道:“这个case我印象中好像有一些……” “周四之前给我。例会上要用。” 小周张了张嘴,没再说。 陈博文走出法务部。电梯里给王志远发了条消息:“王总,周四例会加个议题。前员工竞业违规,跟上次宕机有关。有把握。” 王志远回了一个字:“说。” “上次宕机舆情里那个预言帖,nullpointer,查出来大概率是韩路一。他最近做了个產品,但竞业还在限制期,一封追诉函过去,他要么配合我们的舆论口径,要么他现在做的东西全停。不花一分钱。” 过了十几秒。王志远回覆:“周四讲。” 周四。三十层大会议室。跨部门月度例会。 长桌坐了十来个人。產品负责人刘芳靠窗,用户增长负责人张毅在对面。法务负责人秦岭坐在长桌末端,面前摊著一叠文件。 王志远最后进来。深灰色西装,红色领带。在长桌正中落座。 前四十分钟是常规议程。陈博文坐在王志远左手边,笔记本电脑亮著,ppt停在封面。 轮到他了。 “占十分钟。上次宕机的舆情还有个尾巴没处理,跟在座几个部门都有关。” 投屏。封面:《sev0-20260414的后续公关处理》。 先翻到第二页,微博热搜截图,#鼎盛崩了#,两周前的。 “这个话题我们都经歷过了。舆情压下去了,事情本来翻篇了,但有一个尾巴没处理。” 翻页。nullpointer预言博客截图,发布日期红框標出,系统崩溃前整整一个月。 “这篇博客精准命中了我们全部崩溃路径。技术社区的共识是:写这篇文章的人掌握鼎盛推荐系统的底层架构。” 张毅放下了手机。 “社区已经在画像了。” 翻页。三栏表格,技术方向、时间线、关联事件。 “所有线索指向鼎盛近期离职的核心开发。还没人猜到具体是谁……” 陈博文停了一拍。 “各位想一下。如果身份被確认,媒体標题会是什么,“鼎盛裁掉核心开发,两个月后系统崩溃,被裁员工一个月前精准预言”。” “上次的舆情好不容易压下去了。这个標题能把它全部翻出来。这是一个公关炸弹。” 他扫了一圈。张毅已经把手机收起来了。 “综合判断,nullpointer大概率是今年二月裁掉的前员工韩路一。” 刘芳转头看了一眼王志远。 “他最近做了一个ai代码审查工具,內测两千多人申请。” 翻页。竞业协议扫描件。关键条款用红框圈了起来,旁边配著bugkiller在论坛招募內测贴的截图。 “韩路一签了標准竞业限制协议。十二个月限制期,覆盖ai、数据分析、软体开发工具。bugkiller一条不落。” 说到这里,他微微一笑。 “我已经让法务擬了追诉函。函发出去,对方只有两条路:要么赔违约金加停业,要么谈。谈的条件很简单,配合出一份技术澄清,预言帖是个人推演,不涉及內部架构。这份声明一出,上次宕机的舆情就彻底翻不了了。” 全场安静了几秒。 刘芳:“確定是他?” “百分之百。” 刘芳转向长桌末端。“法务这边呢?” 秦岭合上了手里的文件。 “陈经理。”秦岭的声音不高,语速不快。“你说的这份竞业协议,法务部核过了。” “公司没付竞业补偿金,对方律师走了法定解除流程。协议上个月就终止了。” 秦岭翻了一下桌上的文件,抽出一张。 “解除通知签收记录在档。”他抬头看著陈博文。“这函要是发出去了,对方律师一封回函,我们得上行业新闻。” 会议室里只剩空调在响。 刘芳看了一眼幕布上的ppt,又看了一眼陈博文。“补偿金为什么没付?” 陈博文张了张嘴。“p7,標准流程……hr那边——” “p7。”刘芳重复了一遍,语气没什么起伏。 幕布上还亮著他做的那页,红框圈著“限制期十二个月”,旁边配著bugkiller內测两千人的截图。 没人接话。 p7不值得花钱锁,但p7做出来的东西值得做十页ppt。 这个矛盾不需要说出来。 秦岭把抽出来的那张纸放回去,摞齐,语气没变:“陈经理,以后要出法律文件,走审批流程。不要直接找我的人。” 说完低头翻下一份文件。像在处理一件跟这间会议室毫无关係的事。 没人说话。 张毅拿起了手机。刘芳端著水杯,目光从陈博文身上移开,不经意地扫了一眼王志远。 王志远从头到尾没开口。保温杯端在手里,杯壁上凝著一层水雾。 刘芳放下杯子,轻咳一声:“下一个议题。” …… 散会。人陆续走了。 陈博文拔投影线,合笔记本,动作比平时都慢。走出会议室的时候幕布还亮著,投影仪的风扇嗡嗡转。 走廊里。王志远走在前面,步子不快不慢。 陈博文跟了上来。“王总……” 王志远脚步没停,就像没听见。 走到电梯口才开口。声音不大。 “这件事不要再提了。” 电梯门开了。王志远走进去,按了二十八层。 门快合上的时候,他又说了一句。 “韩路一那边,我另有安排。” 门合上了。 陈博文站在电梯外面。 走廊里没有別人了。投影仪的风扇还在会议室里转。 他站了很久。 第二十三章 唯一標准 傍晚,韩路一在bug café吃了点炒饭,手机一震,苏念念发来一个连结。 《ai代码审查赛道的三个底线》,作者赵文渊。 韩路一点开。 三千字的长文,通篇没出现bugkiller的名字,但每一段都是衝著他来的。 “训练数据的来源合规性是產品公信力的基石。当一个產品的核心数据来源无法被独立第三方验证时,用户的信任建立在流沙之上。” “匿名是权利,但匿名不等於免责。当匿名身份与商业利益绑定,社区有权要求更高標准的透明度。” “赛道需要的不是一鸣惊人的个体英雄敘事,而是经得起审视的工程化体系。” 底部署名:赵文渊,史丹福大学计算机科学博士,前谷歌高级工程师,codesafe创始人。 文章同步发了多个技术社区,並且迅速被很多科技媒体转载。 评论区已经打起来了。 “说实话看完有点动摇。nullpointer的检测率是强,但强的原因是什么?数据来源声明写了一句话,第三方验证在哪?” “赵博士这篇每个字都在点子上,匿名做產品不是问题,匿名加不透明加赚钱,这三样加一块就不行。” “內测的时候我跟团队推荐过bugkiller,现在有点后悔,万一训练数据真有问题呢?” “……所以没人在意codesafe official给techethicswatch马甲帖点讚这件事吗?” 最后一条沉在第二页底部,没几个人点讚,风向不太对。 韩路一在bug café看完全文,脸色不太好。 老周在吧檯后面擦杯子,探头看了他一眼:“谁惹你了?” “没事,同行互踩。” “咱们程式设计师还搞这个?” “写代码的不搞,写ppt的搞。” 老周笑了。 苏念念的消息过来了:“看完了吗?” 韩路一给苏念念打了个语音通话:“文章我刚看完。” 苏念念没有寒暄,语速很快:“他也太阴险了吧,表面讲行业规范,实际上把“匿名加数据来源不透明”两顶帽子扣咱们头上了。你看评论区,已经有人在问nullpointer是谁了。他这不只是攻击你,他想定规矩,他要是定好了,你就永远在他的框架里接受审判。” “我知道。” “那咱们怎么办?” “不接他的招,他聊规范,我聊结果。检测率摆出来,其他全是废话。” 电话那头安静了一秒:“好,我先帮你把內测数据整理好?” “嗯,检测率、误报率、影响评估覆盖率,跟codesafe公开数据放一起对比。” “给我二十分钟。” 掛了电话,韩路一起身回家。 他坐在书桌前,打开了一个新文档。 標题:《检测率就是一切》。 一千二百字,写完还不到八点。 不长,通篇只讲一件事:什么是好的代码审查工具。 “用户不关心你的创始人是谁,不关心你的团队有几个博士,不关心你的数据来源写了几页白皮书。用户只关心一件事,你能不能找到我代码里的bug。” “找得到,你就是好工具,找不到,你说什么都是废话。” “这是bugkiller內测首批用户的数据。” 一张表,三行数字:检测命中率、误报率、影响评估覆盖率,每一栏都附了內测样本量和用户验证比例。 “以上数据从今天起在bugkiller官网实时更新,不做筛选,不做美化,欢迎任何同行、媒体、用户隨时验证。也欢迎任何同赛道產品公开同口径数据,放在一起比。” 最后一句:“工具好不好,跑一遍就知道。” 发布。 二十分钟,回復破两百,七百多个赞。 “最后那句笑死。” “赵博士写了三千字定规矩,nullpointer一千字都没到,数据往桌上一拍:来,比!格局差距。” “codesafe official给techethicswatch马甲帖点讚的截图又被翻出来了,吃相太难看。” “techethicswatch零发帖零回復昨天註册今天消失,马甲还需要实锤?” 赵文渊在自己博客置顶了一条回覆:“本文不针对任何具体產品。” 底下第一条回復有两千三百个赞。 “赵博士,您文章发布时间比bugkiller內测帖晚了三十六小时。您一般都是在竞品火了之后才关心行业规范的吗?” 赵文渊没再回復。 周五下午,马小飞在404群里甩了一条短视频连结。 “一出手就是巔峰!” 標题:《我试了全网最火的ai代码审查工具bugkiller,结果……》 韩路一点开。马小飞的风格,节奏快,表情包密,夸张又勾人。他用自己的一个开源小项目做了演示,bugkiller跑完,三个他不知道的bug,每个附带影响评估和修復建议。 “这玩意扫了一遍我的代码,把我三个月前埋的雷全翻出来了。” “第二个bug更离谱,它说高並发时有概率死锁,我寻思我这破项目也没啥並发啊。结果仔细一看,这个方法被另一个项目引用了,那个项目有並发场景。它怎么知道的?它怎么知道的??” “第三个,算了不展示了。三个月了,一行拼错的环境变量,线上没炸纯属运气,丟人。” 末尾总结:“工具有两种。一种让你觉得“还行吧”,另一种让你看完直接去翻自己的代码库。bugkiller是第二种。免费內测中,不是gg。但欢迎nullpointer给我打钱。” 张浩然在群里说:“你那项目一共多少行?三个bug命中率有点高。” 马小飞:“你闭嘴。” 韩路一:“你说了不是gg?” 马小飞:“工行 6222 xxxx xxxx xxxx马小飞收,谢谢老板” 四十八小时,播放量十二万,马小飞涨了將近一万粉,直接奔著七万去了。bugkiller从技术论坛的內测圈出圈到了泛科技受眾面前。 苏念念看到数据后发了一句:“马小飞可以啊,这期视频比我写两周推广文案都好使。” 韩路一截图发给马小飞,马小飞秒回:“苏女神???你俩现在天天聊???” “她帮忙看產品。” “看。產。品。懂了懂了。” 周一。 苏念念发了三张截图,没带一个字。 第一张,科技媒体头条:《codesafe正式公测:斯坦福博士团队打造的“最完整ai代码审查方案”》。 第二张,技术论坛热帖:《codesafe首周体验:企业级集成真的强》。帖主实测python、javascript、java三种语言,结论,“超越市面上所有的代码检测工具,集成文档写得比產品本身还好,开箱即用”。 第三张,赵文渊朋友圈截图。不知道谁传出来的。 只有四个字。 “產品说话。” bugkiller內测群里也在討论:“codesafe公测了啊,我们什么时候公测?” 苏念念没说话,韩路一也没回。 论坛首页,nullpointer的帖子还掛在热帖第一,七千赞。赵文渊三天没更新。 韩路一打开codesafe的官网,註册页上,第一周的数字还在涨。 他开了视界。 灰色的代码流从页面底下浮了上来,前端、后端、数据管道,codesafe的技术架构像透视图一样铺在屏幕上。 他看了几秒,关掉视界,关掉页面。 表情没什么变化,打开编辑器,继续写v0.4。 第二十四章 魔高一尺 周三下午。bug café。 老周看了一眼吧檯后面的钟。“一点你就来了,今天不加班?” “自由职业没有加班。”韩路一端著美式坐到角落的老位置。“只有隨时在班。” 老周哼了一声。“我当程式设计师的时候可不这么自我感动。” 韩路一打开电脑。 codesafe的官网还停在上次的標籤页。註册数涨到了三千八。好评测评从三篇变成了七篇。 每篇测评他都看了。 他喝了一口咖啡。下载了codesafe的公测版,本地装好,打开。 上次只扫了一眼轮廓。这次要看仔细的。 开视界。 灰色代码流从屏幕底部浮上来,像透视图一样在眼前铺开,前端框架、后端微服务、数据管道、模型推理层,codesafe的整个技术栈一览无余。 先说好话。 前端react加typescript,组件拆分规范,交互动效流畅。ui比bugkiller好看三个档次,他们有专门的前端团队,这不是一个人能追的差距。后端go写的网关,python跑推理,中间kafka做消息队列。教科书一样的技术选型。支持三种语言,检测速度不慢。企业集成的文档写得比很多大厂都好。 更新不易,记得分享101看书网 视界在整体代码质量旁边浮出一个评级標籤: 【代码质量评级:b+】 不差。斯坦福cs博士加谷歌的经歷不是白混的,这套系统的工程化水准放在创业公司里算顶尖。赵文渊有两把刷子。 韩路一继续往下看。 视界深入核心检测引擎。代码流变密,信息量陡增。他集中注意力,精力值开始加速消耗。 然后他看到,核心引擎上方,一行黄色warning缓缓浮现: 【架构风险:检测引擎採用全量遍歷+大模型推理路线|当前性能:代码库<5万行时表现优秀|warning:代码库规模超过20万行后,误报率將非线形上升(预估:5万行误报率3%→20万行误报率17%→50万行误报率41%)|根因:特徵提取未做分层剪枝,大规模代码库的上下文窗口溢出导致模型幻觉】 5万行,3%。 20万行,17%。 50万行,41%。 三个数字,非线形上升。 现在codesafe的用户全是个人开发者和小团队,代码库普遍在5万行以下。体验好,好评是真的。赵文渊不是在作假。他的產品在当前用户规模下確实能打。 但企业客户的代码库动輒几十万行。 这不是bug。bug可以修。这是架构选型的根本性问题,特徵提取没做分层剪枝,核心引擎直接用大模型全量推理。5万行以下没问题,上下文窗口装得下。超过20万行,窗口溢出,模型开始產生幻觉。检测结果从“准確”变成“瞎猜”。 要修?重写核心引擎。 至少三个月。 赵文渊大概率还不知道。公测期用户全是小项目,数据漂亮得很,他肯定觉得自己牛逼坏了。 等真接了企业单,才会发现这事有多棘手。 韩路一关掉视界。精力掉了六十多点。 他靠在椅背上,看著codesafe首页那行“最完整的ai代码审查方案”。 苏念念推门进来带了一股外面的风。围巾还没摘,径直走到韩路一对面坐下,掏出电脑。两人约好了在bug café碰面。 “我註册了codesafe。” “嗯。” “搞个对比测试?”她打开一个github仓库。“这个开源项目,python后端服务,大概八万行。各跑一遍。” 两台电脑同时开始跑。 bugkiller的进度条先到底。codesafe慢了快一分钟。 结果出来了。苏念念把两个窗口並排放在一起。 bugkiller报了50个。codesafe报了36个。 韩路一又开视界扫了一遍,51个bug。 他拿视界的结果当答案,逐条比对。bugkiller:50个里48个是真的,2个误报,漏了3个。codesafe:36个里32个是真的,4个误报,漏了19个。 看了二十分钟源码確认之后,他把误报数据告诉苏念念。 苏念念在本子上算。“误报率,我们百分之四,他们百分之十一。” 漏报率他没提,总不能跟苏念念解释自己为什么知道真实答案是51个。心里默算了一下,百分之六比百分之三十七。 八万行代码库上,codesafe的误报率明显上升了。 但数量还不是关键。 苏念念点开bugkiller第一条检测结果。bug描述下面掛著一段影响评估:“上线后影响预测:高並发场景下触发概率约12%,预估月均影响用户1.2万,修復优先级:p0。”后面还有三行修復路径。 她点开codesafe的同一条。 “发现潜在空指针异常。建议检查。” 一句话。没了。 苏念念看完两边数据,安静了一会儿。 “检测能力我们碾压他们。”她抬头。“他们语言支持比我们多,企业那套集成也做得早,但这些都是时间问题。” “对。而且他们的引擎在更大的代码库上会出问题。”韩路一说。“用户量上来之后自己会发现的。” 苏念念眯了一下眼睛。“你怎么知道?” “看架构猜的。全量遍歷加大模型推理,代码库规模一大,上下文窗口扛不住。误报就炸了。” 苏念念盯著他看了两秒。 没追问。 她合上本子翻到新一页,標题写了五个字,“公测方案v0.1”。 “竞品分析先过一遍。”苏念念边写边说。“codesafe团队十五人。融资额具体查不到,但按赵文渊的配置,保守估计是你全部积蓄的五十倍。” “谢谢,很提气。” “钱和人我们都不占优。但他重我们轻,这一点没变。所以不能跟他全面打,得挑一个他补不上的点。” 苏念念翻到新一页,笔尖点了点纸。 “就打影响评估。別的都不碰。” 苏念念指著屏幕上的对比。“codesafe告诉你有bug。bugkiller告诉你这个bug上线后有什么影响。这完全是品类差距。” “上线方案呢?” “先在论坛,v2ex和掘金髮帖,內测用户那批人让他们帮忙扩一波,马小飞那边再出一期视频。首日註册能破五百就算成功了。”她手里的笔没停。 “什么时候上线?“ 苏念念打开日历看了一眼,“假期回来第一天。上线方案加推广素材,趁假期搞定。五一大家放假,六號上班第一天刷论坛正好看到。再拖下去codesafe用户养起来就不好抢了。你写代码的时间够吗?” “够。” “那就六號。” 说著她就给马小飞发起了微信。 窗外天暗了。老周给他俩各续了一杯,把灯调亮了点。韩路一写代码,苏念念做方案。中间几乎没说话。偶尔苏念念抬头问一句“api文档改了吗”,或者韩路一甩过来一段逻辑让她確认產品流程。 八点半。老周开始收桌子。 “二位,打烊了。” 苏念念抬头看时间。“这么快?” 老周笑著摇摇头。 两人收拾东西出门,一起走向地铁站,一边继续討论上线方案。 地铁站口,苏念念忽然停下来。“路一。” “嗯?” 苏念念笑了笑。 “……没事。明天见。” 她进地铁站了。韩路一转身往家走。 到502门口的时候,差不多九点了。 门口放著一个牛皮纸袋。 他蹲下来拎起来。是一块小蛋糕,奶油抹得歪歪扭扭,上面用巧克力酱画了个笑脸。纸袋底下压著一张蜡笔画。 画上是一个戴眼镜的小人坐在电脑前。旁边趴著一只巨大的瓢虫。瓢虫的壳是红色的,上面三个黑色大圆点。 他翻到背面。歪歪扭扭的铅笔字,每一笔都很用力: “lu一哥哥加you” “加”字写反了。 韩路一站在门口吃了一口。奶油太甜,蛋糕有点硬。他又吃了一口。 剩下的放进冰箱。 手机亮了。 顾司玥:“林晚晴的case予微接了。初步评估胜算很大。” 他回了一句“谢谢顾律师”。 又一条。苏念念发了个飞书文档连结,“bugkiller公测上线方案v0.1”。 他点开看了两眼,回了句“收到,早点休息”。 韩路一把朵朵的画贴在显示器边上。 然后打开编辑器。 瓢虫瞪著两只大眼睛看他。 第二十五章 狗都不用 七天。 说出口很轻鬆。 韩路一仿佛又回到了在鼎盛的日子,每天只睡不到5小时。 一边飞速写代码,一边用视界把遗漏的bug揪出来修好。 苏念念的上线方案从v0.1改到v0.4,上线流程精確到分钟级別。 马小飞拍好了第二期视频,韩路一看完让他把標题里“全网最强ai代码审查工具”改成“可能是最好用的ai代码审查工具”。 马小飞不服气:“有区別吗?” 韩路一:“有,被告的时候赔的钱不一样。” 五月六號。 苏念念凌晨三点还在改推广文案的措辞。韩路一凌晨四点修完最后一个边界条件。六点睡了三个小时,九点起来洗了把脸。 十点。bugkiller v1.0在官网上线公告,nullpointer名义发布。论坛、v2ex、掘金三平台同步。內测群推送。种子用户邮件触达。马小飞第二期视频同时发布。 发了。 韩路一坐在自己房间的书桌前,盯著註册后台的数字。 前三十分钟很安静。 3。 7。 12。 苏念念的消息过来了:“才十二?” “才半小时。” “我在海狸科技做codereview產品线,对外卖的那种。二十个人的团队,市场部配合推了一整轮,砸了八个月。对外发布第一天,註册五百出头。” “所以?” “所以我也要首日五百日活啊啊啊!” 第一个代码仓库接入了。python flask项目,六千多行。bugkiller跑了十四秒,报了七个bug。后台日誌显示用户点开了第一条检测结果,在影响评估那一栏停留了四十三秒。 十一点。47。 中午。89。 苏念念没在说话了。她只是不断发数字更新的截图过来。 下午一点。破一百五。增长曲线在加速,每个整点的增量比上一个整点多。口碑传播的典型斜率。內测用户开始往各自的技术群里扩散了。 韩路一喝了口水。手有一点抖。不是紧张,是三个小时的睡眠开始报帐了。 马小飞:“视频发了三小时,后台显示一千多人从我视频点进bugkiller註册页。各位,我马小飞,科技区带货一哥。” 张浩然:“你视频底下第一条评论说“第二个bug的分析太准了”。你確定不是托?” 马小飞:“你才托。那是我真实粉丝好吧。” 张浩然:“行。路一,你这个自然增长率如果持续三天,周活数据可以拿去见投资人了。” 韩路一:“没想那么远。” 张浩然:“不远。信我。” 下午三点。帖子上了论坛热榜第三。马小飞的视频播放量八万。 帖子下面有一条长评在快速上升。 “我们公司从內测开始用了两个月codesafe。今天註册了bugkiller。同一个项目跑了一遍。bugkiller找到三个codesafe从来没报过的bug。其中一个,跟上个月炸过线上的那个是同一类问题,连接復用的竞態条件。上次那个炸了六万用户,排查了两天才修好。这个还藏著,codesafe完全没报。 “bugkiller的报告里写著:“高並发场景触发概率约12%,预估月均影响用户5-6万,修復路径:修改第1247行连接復用逻辑,预计改动3行代码。 “三行代码。上次同样的问题我们排查了两天。 “我说句理中客的:codesafe,狗都不用。” 六百赞。底下跟了一串类似的现身说法。 下午四点十二分。后台全红了。 api响应时间直接飆到超时。韩路一打开伺服器面板,请求量暴涨四十倍,来源ip高度集中,全指向/api/scan接口。 是ddos攻击。 开视界。 伺服器流量在视野中铺开。正常用户的请求是一条条细线,节奏规律。攻击流量完全不一样,三股暗红色的洪流从三个ip段同时涌入,密到把正常流量淹没了。 视界在攻击源上方浮出诊断: 【ddos攻击|类型:http flood + syn flood|来源:3个ip集群(某云华东节点)|目標:/api/scan|修復路径:1封禁47个攻击ip段2/api/scan启用频率限制(单ip≤5次/分钟)3开启cdn层ddos防护】 三步。 封ip段。加限流。开cdn防护。 七分钟。监控从红转绿。 他在內测群发了一句:“刚才断了几分钟,被ddos了,已处理。” “公测第一天就被人打?” “谁这么急啊。” “你一个人处理的?七分钟???” 韩路一没接话。打开官网写了篇事故復盘。攻击时间、持续时长、来源ip段、攻击目標接口,全部列出来。 半小时后论坛多了个帖子,標题:“猜猜谁会在bugkiller公测日打ddos。” 点讚第一:“我帮大家捋一下时间线哈,对比帖600赞是下午4点整,ddos攻击4点12分,十二分钟,就这?” 第二:“上次马甲帖点讚,这次直接ddos,下次是不是该上门砸电脑了?” 第三条是一个技术討论,很多人回覆:“我在某厂做安全运维的,说个数据吧,我们soc十二个人轮班,全套自动化监控,ddos响应sla是30分钟,这还是提前演练过无数遍、剧本都写好了的情况,他一个人,七分钟,从发现到恢復,离谱!” “楼上说的是大厂有预案的情况。小团队第一次被打正常流程是:臥槽怎么掛了→是不是代码炸了→查半天日誌发现是ddos→慌了→提工单给云服务商→等客服回復→一两个小时算快的。七分钟?我工单都还没提交。” “所以nullpointer到底是一个人还是一个团?一个人写產品一个人修线上一个人扛ddos,这是三头六臂?” “ddos都贏不了人家一个人,攻防七分钟,泡麵都没泡开。” 下午六点。 註册用户:476。 接入代码仓库:527个。 累计检测bug数:3847个。 476,苏念念的五百还差二十四。 晚上九点。 韩路一从冰箱里拿了瓶水,打开后台。 苏念念兴奋的打电话过来。 “路一!六百一十二!!!” “你知不知道这意味著什么!” “二十个人的团队,大厂资源,砸了八个月。” “对外发布首日註册才五百出头。” “你一个人做的產品。” “首日註册612。” “一个人干掉一个大厂团队!” 韩路一说:“是咱们两个人。” 苏念念沉默了一会。 “说真的,路一,你做到了,我们做到了!” 掛了电话,韩路一看向显示器旁边贴著的画,大瓢虫的红壳上有三个黑点。 他伸手把画纸翘起来的一角折了折。 手机又震了,顾司玥。 “恭喜,数据不错。” “顾律师也关注科技產品?” “关注我的客户。” 他回了句“谢谢”。 马小飞第二期视频播放量过了十五万,评论区顶到最高的一条:nullpointer大神求出山。 韩路一看了一会儿评论区,翻了翻,退出来。 打开和马小飞的对话框。 “下一期视频,做个专访?bugkiller创始人真人出镜。” 马小飞的回覆秒到:“???你要公开身份??” “產品到这个阶段,匿名没意义了。企业客户要签合同,总不能跟nullpointer签。” “!!!” “你来拍,拍一期“nullpointer是谁”,也给你涨点粉。” 好一会儿没回,韩路一还以为他在犹豫。 然后收到一条语音,点开,马小飞声音里压不住的兴奋快从听筒里溢出来。 “老韩你知不知道我等这一天等了多久!脚本我写了三版了你知道吗三版!明天!不,今天晚上就能拍,我把灯光全架好,” 韩路一哭笑不得:“別急。” 放下手机。 开了一下视界。 【lv.2|精力:58/250】 经验已经到42%了。 今早还是37%。 后台的bug检测总数停在4215。每一条记录背后都是一个开发者接入了仓库,bugkiller替他找到了问题。 经验条又跳了一下。 打开苏念念刚更新的飞书文档,《bugkiller公测首日復盘》,七页,拉到最后一行,標红加粗。 “建议儘快公开创始人身份,將nullpointer的社区信任转化为品牌资產。” “已经在安排了。” 第二十六章 裁到大动脉 五月七號。上午。 博客写好了。一千五百字,改了三遍。 標题:《一个失业的程式设计师,和他的bugkiller》 顾司玥审稿用了十一分钟。回了三条消息。 第一条:“可以。” 第二条:“四个不,不提鼎盛,用“前东家”。不提任何人名。不主动攻击。你讲你的故事,別给对方递把柄。” 第三条:“发之前让我看终版。” 苏念念看完改了一处。把“失业”改成“被优化”。 “好听点。而且带梗,打工人都懂。” “被优化这三个字有什么好听的。” “你信不信標题发出去,评论区第一条就是“优化他的人现在在想什么”。” 全文没提鼎盛。没提任何人名。通篇只讲四件事:被裁、接单、认清bug模式、做了bugkiller。 “今年二月,我被前东家优化了。工作五年,p7,年终b+。裁员通知来的那天我签了字,走出了大楼。 “接下来两个月,我每天做三件事。接自由开发的单子赚房租,写各种不同项目的代码,盯著bug发呆。 “所有bug都长得不一样,但犯错的方式就那么几种。同样的逻辑陷阱在不同项目里反覆出现,只是穿著不同的衣服。我把这些模式记下来,餵给了模型。 “这就是bugkiller。一个被优化的程式设计师做的bug检测工具。” 最后一段—— “我不是为了证明什么。但既然在这个行业这么多年,总得留下点什么有用的东西。” 顾司玥的反馈简短:“措辞没问题,没有攻击性敘事。“被优化”改得好,谁的主意?” “一个朋友。” 停了两秒。“脑子不错。” 发了。 然后炸了。 一小时。回復破五百。 两小时。赞数破三千。帖子从科技板块顶上了论坛首页。 “nullpointer居然是被裁的???” “等一下……他一个人做了bugkiller?一个人?没有团队?” 本书首发 101 看书网伴你閒,101??????.?????超贴心 ,提供给你无错章节,无乱序章节的阅读体验 “p7被裁做出这个水平的產品,他前东家什么眼光?” ““总得留下点什么有用的东西。”看完这句话,我坐在工位上沉默了五分钟。” “我被裁之后在家躺了三个月。人家被裁之后做了个碾压斯坦福博士团队的產品。做人的差距。” “年度最佳离职故事。没有之一。” 苏念念说对了。评论区確实有个高赞评论—— “优化他的人现在在想什么???” 四千多赞。 点讚第一的评论—— “这不叫优化。这是裁员裁到大动脉了。” 八千多赞。底下跟了一整排“大动脉”的接力。有人生成了一张图,一把手术刀切在动脉上,旁边標註“某大厂hr部门”。博客里没提公司名,评论区也默契得很,“某不愿意透露姓名的大厂”“某鼎某盛”刷了满屏。 下午五点。马小飞到了502。 两个灯架,一台索尼a7m4,一个无线领夹麦。三分钟在韩路一书桌前搭好简易拍摄区,手法比写代码还熟练。 “坐那。自然点。” “怎么才叫自然?” “你写代码的时候什么样,现在就什么样。別看镜头,看我。” 韩路一坐下来。身后是显示器,旁边贴著朵朵画的瓢虫。马小飞看了一眼那张画,调了下机位,把瓢虫框进了画面右下角。 “这什么?” “邻居小孩画的。” 马小飞打开平板上的採访提纲,前两版被韩路一以“太煽情”为由否掉后重写的第三版。 “行。先走一遍,不好再来。” 录製键按下去的前三分钟,韩路一像在做技术分享会。他讲bugkiller的架构,讲模式匹配的原理,讲误报率从8%压到3.8%的过程。马小飞听了一会儿,把手伸到镜头前挡了一下。 “停。” “怎么了?” “你在讲代码。观眾不在乎bugkiller怎么跑的,在乎你为什么做。” 韩路一想了一下。“因为bug有模式。” “不是。再上一层。” “因为被裁了。” “再上。” “因为写了几年的东西,被人改了几行就废了。” 马小飞竖起大拇指,重新按下录製。 这一遍顺了。韩路一说话越来越自然,到后面已经不看马小飞了,盯著自己的显示器在讲,像在跟另一个自己復盘。 他讲到被裁那天多拿了五万块的时候,马小飞忍不住说了一声“臥槽”。讲到“所有bug都长一个样”的时候,马小飞停下来认真听了十几秒。 拍了四十分钟。马小飞收镜头的时候顺手拉了个韩路一侧脸的特写,显示器上是bugkiller后台的数据面板,旁边贴著瓢虫画,窗外是老小区的天际线。 “这个镜头我封面用。” “隨便。” “不隨便。这个镜头值十万播放。” 收灯架的时候马小飞问了一句:“標题我想好了。《大厂裁了一个年薪百万的程式设计师,三个月后他做了一个產品把老东家按在地上摩擦》。” 韩路一:“不行。” “……哪不好了?” “按在地上摩擦。” 马小飞:“又不是我说的,是弹幕说的。我只是……提前预判了弹幕。” 韩路一:“你预判个头。改。” 標题最终妥协成《大厂裁了一个年薪百万的程式设计师,他一个人做了个轰动全网的產品》。马小飞坚持保留了封面上的两个大字,“打脸”。 五月八號。早上八点。视频上线。 马小飞剪到凌晨四点。成品快二十分钟,节奏是他的老风格。开头三十秒是博客金句,配打字机音效一个字一个字蹦出来。核心画面是bugkiller和codesafe以及其他几家老牌工具的对比数据,穿插马小飞本人的使用体验和韩路一的採访片段。 “我不做评价。数据都在屏幕上,各位自己看。但我说一句,我做了六年科技自媒体,第一次见到这么离谱的故事。一个人。被裁的。三个月。做了一个產品,公测首日碾压所有竞品。” “你跟我说这是网文我都嫌扯。” “但它是真的。” 十二小时。三十二万播放。 二十四小时。八十七万。 马小飞在404群里发截图。 “十万了!!!粉丝破十万了!!!!科技区一哥谁不服!!!” 张浩然:“冷静。你的涨粉是蹭韩路一热度蹭的。” 马小飞:“……闭嘴。” bugkiller后台的数字跟著视频一起起飞。註册用户从公测首日的六百一十二,涨到了一千四。亮牌两天,翻了一倍多。 苏念念发来消息:“你知道吗,现在论坛上討论最多的不是bugkiller好不好用,是你这个人。用户记住故事比记住功能快十倍。” 韩路一回了一个“嗯”。 关掉手机,继续写v1.1的热补丁。 同一天。晚上九点。 浦东,一家私人会所的包间。 赵文渊坐在靠窗的位子上,面前的普洱碰都没碰。 他今天刷了一整天“裁员裁到大动脉”。nullpointer的博客他逐字看了两遍,马小飞的视频他看了完整版。评论区有一条三千多赞的热评,“赵博士三千字定规矩,nullpointer直接甩数据。两周过去了,你们觉得谁贏了?” 他关掉了手机。 对面坐著一个人。五十出头,灰色西装,铂金袖扣。坐姿很板正,坐在那像在开会。 “赵博士。”对面的人先开口,声音很稳。“你天使轮的领投方,背后的lp结构了解吗?” 赵文渊看向他。“鼎盛有交叉持股。这不是秘密。” “交叉持股是明面上的。”王志远语气没变。“这里面有我个人的钱。” 赵文渊没有表情。天使轮拿钱时他只跟基金的gp见过面,对方说有產业资本背书,没提具体是谁。 他口袋里的第一笔钱,是眼前这个人放进来的。 “王总今天约我,不只是认亲吧。” 王志远嘴角动了动。不算真笑。 “nullpointer的真名叫韩路一。我手底下优化掉的。p7。去年在鼎盛做推荐算法,转化率提升37%。代码有九成是他一个人写的。” 赵文渊手指在杯沿停了一下。 “你觉得他一个p7,凭什么三个月做出这种东西?” 赵文渊没接话。这个问题他问过自己很多遍。 “我也想不通。但想不想得通不重要。重要的是,你打不打得过他。” 王志远端起茶杯喝了一口。 “一个人做產品是有天花板的。他现在是故事,不是公司。故事的热度会过去。” 赵文渊盯著他。“王总想说什么。” “鼎盛准备在代码审查方向布局。我会推动集团出资源。”王志远放下杯子。“但我不想从零起步。” 赵文渊听明白了。 天使轮是王志远个人的钱。鼎盛云是集团的资源。他要做的事情很简单,拿公司的渠道,餵大自己投的项目。韩路一是不是真的有威胁不重要,重要的是“bugkiller威胁论”能帮他在集团內部拿到审批。 “具体怎么合作?” “codesafe接入鼎盛云的开发者工具链。十五万家企业客户,代码一推上去就过你的审查引擎。” 听起来像天上掉馅饼。 但赵文渊是拿过风投的人,不是学生了。十五万家客户的渠道一旦接进来,codesafe的增长就绑死在鼎盛云上。今天叫合作,明天叫依赖,后天叫收购。他见过太多初创公司死在这条路上,被大厂的资源餵大,再被大厂的资源吞掉。 他看著王志远。这个人投了他的天使轮,现在又要把鼎盛的资源塞进来。进来的不是钱,是绳子。 但他也算了另一笔帐。靠自己的十五个人打贏韩路一,要烧多少钱,打多久? 窗外浦东的夜景很亮。 “让我想想。” 王志远站起来,整了整袖扣。 “不著急。但你要记得,机不可失啊。” 第二十七章 孤注一掷 赵文渊坐在井安区的办公室里,面前有两块屏幕。左边是codesafe后台,右边是论坛,中间放了一杯凉透了的美式。 自从“被优化程式设计师”的博客和视频爆火以后,codesafe日新增註册从均值一百五,掉到了九十出头,趋势很难看。 社区討论的风向也变了。两周前还是“codesafe vs bugkiller谁更好”,现在首页热帖標题是“被裁员工做的產品碾压斯坦福博士”。 技术比较变成了故事比较。 在故事这条赛道上,赵文渊没有贏面。 他回想起王志远的话,“不著急。但你要记得,机不可失啊。” 三天了,他还没回復。 十五万家企业客户的渠道,鼎盛云的品牌背书,听起来像条通天大路。 但赵文渊在硅谷见过太多这种剧本的结局,小公司接了大厂的渠道,第一年是合作伙伴,第二年是核心供应商,第三年创始人的名字从官网上消失了。 他从谷歌辞职回国创业,不是为了给又一个大厂打工的。 赵文渊切到codesafe公测数据面板。 公测两周,用户好评率82%。项目检测准確率领先行业基准,有三家中型公司在聊採购。 数据不差,差的是敘事。 他点开公测反馈的收藏夹,翻了五分钟。一个前端团队说“codesafe帮我们上线前拦了两个p0”。一个独立开发者说“第一次觉得代码审查不是走形式”。 產品是好產品。 赵文渊关掉聊天记录,打开社交媒体的编辑框。 打字。 刪掉。 又打字。 又刪掉。 …… 五月十一號,下午两点。 赵文渊的帖子出现在技术论坛、推特和微博,同一段话,一字不改。 “nullpointer在《检测率就是一切》里说过一句话,“工具好不好,跑一遍就知道。” 我同意。 所以我提议:公开、透明、社区监督的横向评测,codesafe vs bugkiller,同样的代码库,同样的评判標准,全程直播,数据公开。 让產品说话!” 技术圈立马就炸了。 “臥槽赵博士要单挑nullpointer” “今年科技圈最好看的对决。没有之一” “独立开发者 vs融资团队,被裁p7 vs斯坦福博士” “来了来了,这才是正经比武” “骄傲不允许他认输,respect” 帖子二十分钟衝上热度第一。 苏念念截图发过来的时候,韩路一正在bug café吃老周新出的鸡排饭,他放下筷子,点开截图。 “看到了吗看到了吗看到了吗” “他用你的原话发的挑战” “他自己送上门了” 韩路一把筷子捡回来,夹了块鸡排,腾出左手打字。 “接。” “就一个字?” “他想比,就比。” 三十六度科技的的编辑联繫上了韩路一,请缨主持直播横评。 韩路一同意,赵文渊那边也同意了。 评论区有人刷:“36度这波主持,流量赚翻了。” 五月十二號。社区投票选择测试项目。 韩路一以nullpointer帐號发了一条建议: “公平起见,测试方案应覆盖不同规模的代码库,毕竟用户的项目什么体量都有。建议分三轮:小型项目(3万行左右)、中型项目(10-20万行)、企业级大型项目(30万行以上)。同一批代码库,同样的评判维度。” 帖子底下清一色叫好。 “支持分梯度测试,这才是科学方法论” “nullpointer格局打开了” “这个提案本身就已经贏了一手,你提出公平方案,对方只能同意” 赵文渊回覆:“完全同意,覆盖不同规模才有说服力。” 有人在帖子底下提了个关键问题:“公开项目两家都可能预训练过,测出来算什么?得用没见过的代码才公平。” 三十六度科技的老赵出面协调,三家企业赞助商各捐了一个即將开源的私有项目,双方此前都不可能接触过。代码在直播前由第三方公证封存,直播时才解封接入。 最终方案確定—— round 1:某初创公司go微服务框架,约3万行。 round 2:某中型saas公司python数据处理平台,约12万行。 round 3:某上市公司java企业级核心系统,约35万行。 三十六度科技当晚发公告。 “ai代码审查工具公开横评直播,5月14日晚7点。三轮测试代码库由企业赞助方捐赠,双方此前均未接触。第三方公证封存,直播时解封。实时数据公开,社区全程监督。” 五月十三號,预约人数破三万。 技术论坛开了专帖:“codesafe vs bugkiller,你押谁贏?” 投票结果很微妙:55%押bugkiller,45%押codesafe,差距没拉开。 “bugkiller社区口碑更好,但codesafe有完整团队+企业方案+博士背书” “nullpointer一个人打十五人?你认真的?” “別看人少,上次那个用户说codesafe漏报了三个bug。” “个例” “你去看评论区,不止他一个人” 十几家科技自媒体出了分析文章,从各种角度预测结果。马小飞也想做预测视频,被韩路一一条消息摁住了。 “赛前別发。我刚提了公平测试方案,你这边立刻出预测视频,评论区第一条就是“nullpointer团队赛前搞舆论”。” 马小飞:“那我憋著?” 韩路一:“憋著,结果出来之后你剪精华,那个流量是预测视频的十倍。” 马小飞点了点头。 “有道理,那我先把脚本准备好。” 五月十四號。 苏念念坐在海狸科技的工位上,面前开著一个空白的运营周报模板。她已经盯著它二十分钟了。 年假回来第一天,空降总监把她调到了运营支持岗。產品文档权限关了,数据看板进不去了,技术评审不叫她了。美其名“你先在运营这边过渡一下。” 下午两点的时候,產品群里弹了一条消息,她之前带的那个ai代码审查项目,这周要做用户访谈方案。新接手的人@了全组问谁有用户联繫人表格。 苏念念的电脑里就有,她做了三个月的用户调研,每个联繫人都是自己一个个加的。 她打了一行字,又刪掉了。 没人@她。 她缩小周报窗口,打开bugkiller的系统监控页面。比赛代码库封著拿不到,但bugkiller自己的状態得確保万无一失。她远程跑了一遍內部基准测试,检测引擎响应、並发处理、各语言解析器稳定性,全部绿灯。 给韩路一发了条消息:“系统没问题,就是不知道封的那三个项目什么情况,盲盒。” 韩路一回得很快:“能控制的都控制了,剩下的交给產品。” 苏念念看著这条消息,又看了一眼运营周报的空白模板。 五点半她准时下班。背包里装著笔记本电脑。 五月十四號,晚上六点五十五分。 三十六度科技直播间开了。 画面正中分屏,左边codesafe的logo,蓝底白字;右边bugkiller的logo,黑底红字。 在线人数从八千跳到一万二,从一万二跳到一万八。还在涨。 弹幕已经刷起来了。 “来了来了” “博士別怂” “nullpointer加油” “我从下午三点等到现在” “谁也別说话等结果” 三十六度科技的演播厅不大,两排座位面对面摆著,中间隔了三米。左边codesafe,右边bugkiller。头顶有四台摄像机,正前方一块大屏实时投数据。 赵文渊坐在左边的座位上,穿著熨的没有褶皱的白衬衫,领口的扣子只鬆开最上面一颗,他朝镜头点了点头。 五米外,韩路一在右边座位坐下来,他穿一件白色卫衣,胸口写著“debug the world”。他关掉了所有多余的窗口,屏幕上只留一个终端和bugkiller的管理后台。 打开视界。 赵文渊头顶浮出一行淡蓝色的字。 【赵文渊|31岁|codesafe创始人/ceo】 韩路一多看了一眼,信息展开—— 【情绪:平静(隱藏:高度紧张)|核心诉求:证明技术价值|行为模式:背水一战型决策者】 平静是真的,紧张也是真的,这人是抱著孤注一掷的心態来的。 韩路一收回视线。 开场前五分钟,赵文渊站起来走过去,伸出手。 “nullpointer,久仰。” 韩路一站起来握了一下:“赵博士,產品做得不错。” 韩路一没在客套,赵文渊的方向没错,只是在错误的时间打了一场不该打的仗。 赵文渊笑了笑:“彼此。” 握完手各自回到座位,摄像机拍到了这一幕,弹幕瞬间炸了一波。 在线人数破两万。 主持人站到大屏幕前。 “各位观眾晚上好,欢迎来到三十六度科技“ai代码审查工具公开横评”直播间。” “规则此前已经公布,今晚,codesafe和bugkiller將在相同代码库、相同条件下进行三轮测试,所有数据实时呈现,社区全程监督。” “第一轮测试项目,go微服务框架,代码量约三万行。” “现在——” “开始!”