他关掉了视界。
屏幕回到了正常的外包需求页面,右上角有两个按钮:【接受需求】和【忽略】。
韩路一的手指停在鼠标上。
接?救陈博文?我是傻逼吗?
然后点了【忽略】。
不接。
他关掉了外包页面,端起桌上已经凉了的咖啡喝了一口。
不接归不接,但有些东西憋着也浪费。
他打开论坛,以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需求文档。
韩路一看了一遍。
“你这需求写得太清楚了。”他说。
“不然呢?写需求含糊其辞等着开发骂我?”苏念念哼了一声,“而且……”
她停了一下,语气变轻了一点。
“好久没碰到这么聊得来的开发了,我在公司跟技术团队掰扯一个需求能掰扯一个礼拜,你这儿四十分钟就搞定了。”