第6章 许文远至,技术团队扩容
许文远拎着两杯豆浆推门进来的时候,陈默正盯着屏幕上刚跑通的爬虫程序发愣。
那行绿色的“200”还挂在终端上,像条不会熄灭的信号灯。
他没说话,只是把最小化的代码窗口切回来,手指在键盘上敲了两下,刷新日志。
“你这人真绝情啊,”许文远把豆浆放在桌角,顺手拉开旁边那把吱呀作响的转椅,“我昨晚熬到三点改完简历才敢来,你就给我个电影网站当见面礼?”
陈默抬眼看了他一眼,镜片反着光,看不清眼神。
“你不是说受不了加班?我现在连服务器都还没配齐,哪来的活给你加。”
“但你有事做。”许文远一屁股坐下,从背包里掏出一摞书,“《Python网络编程实战》《Flask开发指南》《数据库设计从入门到放弃》,还有这个——”他拍出一个U盘,“装了全套开发环境,GCC、Node、Docker都配好了,就差个IDE你随便选。”
陈默终于动了动。
他伸手接过U盘,插进主机。
屏幕闪了一下,自动弹出资源管理器,里面分门别类地放着工具链、依赖包、甚至还有个叫“防猝死脚本合集”的文件夹。
打开一看,全是自动化监控和异常重启的shell脚本。
“你这是把家底搬来了?”
“不然呢?”许文远灌了口冷掉的豆浆,“我在上家公司干了两年外包,天天修别人留的烂摊子。你说你要做个记账软件?我不信你是真想帮人管钱。”
陈默没否认。
他点了点桌面那个命名为“清源计划-雏形”的文件夹:“这不是记账软件,是数据入口。以后所有交易行为、消费路径、用户决策链条,都会从这儿开始沉淀。”
“听着像要造个银行。”
“不,”陈默摇头,“我要造个镜子,照出那些藏在发票背后的东西。”
许文远沉默两秒,忽然笑了:“行,那你得先让我联网。”
***
网是第二天早上通的。
运营商的人来装光纤时,看见这间十平米不到的屋子堆了三台显示器、两个机箱外加一堆乱七八糟的线缆,问了一句:“你们这是搞直播?”
陈默说:“算吧,直播写代码。”
人走后,许文远已经把本地环境搭好,顺手拉了个Git仓库,初始化提交。
第一条commit message写的是:“init project.从此告别Ctrl+C/V式编程。”
陈默瞥了一眼,嘴角抽了抽。
他们开始拆功能模块。
核心逻辑很简单:用户上传账单截图,系统自动识别金额、类别、时间,生成可视化报表。
难点在于OCR识别准确率和分类模型训练。
“市面上的API太贵,调一次几毛钱,咱们撑不了几天。”许文远蹲在主机前插硬盘,“不如自己训个轻量模型。”
“数据从哪来?”
“爬。”
“又来?”
“这回不是爬网站,是爬你自己。”许文远打开陈默之前写的爬虫脚本,“你不是已经抓了一批公开财报和消费记录了吗?清洗一下就能当训练集。”
陈默点头。
两人分工明确:许文远负责搭建图像预处理流水线,陈默则重构后端接口,加入缓存队列和异步任务机制。
键盘声此起彼伏。
有时候同时敲击回车,终端输出的日志撞在一起,谁也看不懂。
但他们笑得出声。
这种感觉很陌生——不是一个人对着黑屏死磕到凌晨四点,而是有人能在你卡住时接上一句“试试换个正则表达式”,或者“我把这个服务拆成微进程,你看看行不行”。
中午吃饭,楼下快餐店送了份鱼香肉丝,米饭压得实,上面浇的菜油亮亮的。
许文远边吃边说:“你知道最讽刺的是什么吗?我以前在游戏公司写NPC行为树,现在给你写账单分类器,逻辑居然差不多。”
“怎么说?”
“都是让机器学会装人。”
陈默筷子顿了顿,然后笑了。
饭后他靠在椅子上眯了十分钟,醒来发现许文远已经在前端页面加了个调试面板,能实时查看每张图片的识别进度和错误码。
“你还挺会卷外人。”
“这叫赋能。”许文远头也不抬,“再说了,你不也没睡?”
“我习惯了。”
“习惯不好。”许文远突然抬头,“咱俩现在是一个团队,不是你一个人扛着往前滚。你倒下了,项目就得停。”
陈默没接话。
但他关掉了正在运行的压力测试脚本。
***
第三天下午,第一版原型跑通了。
一张手写的超市小票照片被拖进上传区,五秒后,页面弹出结构化数据:
>时间:2025-04-07 18:23
>商户:万家惠生活超市
>类别:生鲜食材
>金额:68.5元
>备注:含鸡蛋一盒、西红柿三斤
许文远拍了下桌子:“成了!”
陈默却盯着“类别”那一栏。
“怎么分出来的?”
“规则+关键词匹配。”许文远调出后台,“比如‘鸡蛋’‘猪肉’归生鲜,‘牙膏’‘洗发水’归日化,再结合商户名称二次校验。”
“不准。”
“我知道不准。”许文远点头,“但现在能准到七成,剩下三成靠用户手动修正,数据越积越多,模型自然就聪明了。”
陈默盯着屏幕看了很久。
然后他说:“加个功能。”
“啥?”
“让用户能标记错误,我们记录他们的修正行为。不只是改结果,还要记他们为什么改。”
许文远反应过来:“你是想收集认知偏差?”
“对。”陈默敲了敲键盘,“人怎么理解消费,比消费本身更有价值。”
许文远咧嘴一笑:“你这哪是做记账软件,你是想挖人心。”
“人心也是数据。”
他们重新开工。
晚上九点,城市渐渐安静下来,楼下的烧烤摊收了摊,只剩路灯还亮着。
屋里的显示器却越来越热闹。
新加入的反馈模块上线,每一次用户纠正都被记录进日志,形成一条条行为轨迹。
陈默看着不断滚动的数据流,忽然说:“明天招人。”
“啊?”
“我们需要前端、算法、运维。”
许文远转过椅子:“你现在有钱招人?”
“没有。”
“那谁来?”
“愿意信这套逻辑的人。”
许文远沉默片刻,掏出手机,打开一个程序员论坛的群聊界面。
他打字:兄弟们,有个活儿,不打卡不画饼,工资月结,干得好年底分红,有兴趣私聊。
发送。
几秒钟后,头像开始闪烁。
有人回复:真的假的?
许文远看了眼陈默。
陈默正把一段优化后的代码推送到远程仓库,commit message写着:“v0.3.0,双人协同模式启动。”
许文远笑了笑,在聊天框回了一句:
“真的,老板刚说完,我们要改变世界。”

