V3_C17_78%
十月第一周。我打开Git日志。
习惯了。每天早上第一件事不再是看后台日活。日活已经不是最重要的数字了。最重要的数字在模型训练日志里。但我看不懂训练日志。我能看懂的是Git。谁改了什么。什么时候改的。改了多少行。
今天的Git日志很有意思。
往上拉。两种颜色交替出现。蓝色是刘海洋的提交。绿色是许畅的。一行蓝一行绿。一行蓝一行绿。
刘海洋,昨晚11:23:fix: 内存泄漏修复,推理速度提升30%。
许畅,今早8:47:feat: attention机制优化,准确率+2%。
刘海洋,今早9:15:fix: batch推理优化,吞吐量翻倍。
许畅,今早10:02:feat: 数据增强策略,准确率+1%。
蓝。绿。蓝。绿。
他们不说话。但代码在对话。
刘海洋修了内存泄漏。推理速度快了百分之三十。意思是:你的模型跑得太慢了,我帮你把路修宽了。许畅看到路宽了。在宽路上跑了一个新的attention优化。准确率涨了两个点。意思是:你修的路我用上了,谢谢,看效果。刘海洋看到效果好了。继续修路。把batch推理优化了。吞吐量翻倍。意思是:路还可以更宽,你继续跑。许畅继续跑。数据增强。准确率又涨了一个点。
两个人几乎不当面讨论。在办公室里他们坐在一米二的距离上,背对背。偶尔许畅站起来去接水的时候会从刘海洋身后经过。古龙水的味道飘过去。刘海洋不抬头。许畅不说话。
但在代码库里他们在下棋。你走一步。我走一步。你的fix是为了让我的feat跑得更好。我的feat是为了证明你的fix值得做。不是合作。不是竞争。是一种只有程序员才懂的对话方式。
我看Git日志的时间比看产品文档的时间还长。因为产品文档告诉我的是计划。Git日志告诉我的是正在发生的事。计划是假设。正在发生的事是真的。
真的事情是:两台发动机在同时转。一台修路。一台跑车。路越修越宽。车越跑越快。它们之间不需要协调。不需要我在中间当变速箱。它们自己就能配合。
也许方教授说得对。骨头和刀放在一起,不需要胶水。它们自己会找到各自的位置。
我把Git日志往下翻了翻。更早的提交也是这个模式。蓝绿交替。但频率在变。九月初的时候大概三天一个提交。九月底变成两天一个。十月开始变成一天一个。有时候一天两个。他们在加速。
加速不是因为有人催。没人催。我从来没催过他们的技术进度。催了也没用。写代码不是搬砖。不是你催他快他就快。他快是因为他看到了方向。方向清楚了,手自然就快了。
刘海洋的提交时间大部分在晚上十点到凌晨两点。他的工作时间从来不是朝九晚五。是朝九晚凌晨。许畅的提交时间大部分在早上八点到下午六点。他的节奏比刘海洋规律。但他的思考密度比刘海洋高。他每次提交的代码量不大,但每一行都是优化过的。
两种节奏。两种密度。在同一个代码库里交织着。像两个人在同一张棋盘上下棋。你走一步。我走一步。棋盘越来越满。但没有人赢。因为他们不是在对弈。是在合建。
十月第三周。许畅走到白板前。
拿起红色马克笔。在72后面加了一个斜杠。写了78。
72/78。
"六个点。三周。"
他把笔放下。没有多说。六个点。三周。平均一周两个点。速度在变慢。从72到78用了三周。之前从0到72用了三个月。越往上越难。符合刘海洋的预测。
刘海洋从屏幕后面看了一眼白板。然后说了一句话。
"78意味着从72往后的几个点是稳的。不是偶然的。接下来上80,需要换一批测试数据验证。防止是我们自己的数据集过拟合。"
过拟合。许畅七月里解释过这个词。"就是学生考自己学校的模拟题考了九十分,换一个学校的题就只有六十分。因为他记住了答案,不是真的学会了。"
"你的意思是78%可能是假的?"我问。
"不是假的。是需要验证。换一批它没见过的数据跑一遍。如果还是78,那就是真的。如果掉到70以下,那就是过拟合。"
刘海洋没有等许畅说完。他已经低头开始新建一个数据集了。鼠标在屏幕上动。键盘在响。他不是在接受指令。是默认参与。他知道需要做这件事。不需要有人告诉他。
许畅看了他一眼。什么都没说。回到自己的位置。
两个人又各自沉入了屏幕。办公室安静了。只有两种键盘声。一快一慢。交替着。偶尔同步了一下。
我站在旁边看了一会儿。他们之间的配合在变。不是变好了。是变自然了。一个月前还需要我在中间传话。现在不需要了。刘海洋知道许畅需要什么样的底层支持。许畅知道刘海洋的代码风格。他们在无声中建立了一种默契。
这种默契不是友谊。不是信任。是一种更冷的东西。是两个手艺人在同一张工作台上各自干活,干着干着发现对方的手不会碰到自己的手。不会挡到自己的光。不会踩到自己的工具。
不碍事。这是程序员能给彼此的最高评价。
裂缝还在吗?在。但裂缝两边的人都在干活。只要都在干活,裂缝就不会变大。裂缝变大是在停下来的时候。停下来了就会开始想。想"他是不是比我强"。想"老赵是不是更看重他"。停下来想这些的时候裂缝才会裂开。
现在没有人停。78%在往80走。所有人都在跑。跑着的时候没空看脚下的裂缝。
周四午饭。四个人围着吃外卖。
今天是黄焖鸡。三十四块。四份。张富贵的那份加了一个蛋。多两块钱。他每次都加。
张富贵一边吃一边刷手机。突然抬头。
"王宝强离婚了你们知道吗?"
周小薇没抬头。"这跟你有什么关系?"
"我在算。如果我有两个亿我也愿意被绿。"
"你连两万都没有。"
"所以我不怕被绿。没有东西可以失去的人不怕任何事。"
这句话说完他自己愣了一下。好像意识到自己不小心说了一句有深度的话。然后继续吃面。
刘海洋头没抬。筷子夹着一块鸡肉。
"你需要先有女朋友。"
张富贵张开嘴。想反驳。停了一下。嘴合上了。低头。继续吃面。
周小薇在旁边笑了一下。不大。嘴角动了一点。她很少笑。她笑的时候是真的觉得好笑。
许畅没有参与这个话题。他在吃蒸饺。一个一个地吃。汤吸掉。皮和馅。工整。跟他写代码一样。他不参与这种闲聊。不是冷。是他的注意力分配跟别人不同。吃饭的时候他在想下午要调的参数。
林工在旁边安静地吃着。他的蒸饺。六个。蘸醋。他不参与这种话题。不是不想参与。是他觉得自己不够资格。他是"维护岗"。维护岗不聊这种事。维护岗只修bug。
小陈也在。他在看手机。老家兰州的群。群里在讨论甘肃的天气。"下雪了"。他抬头看了一眼窗外的上海。没有雪。十月的上海连冬天都不算。
四个人。四种吃法。四种反应。加上林工和小陈就是六种。六个人在同一张桌子上吃同一家外卖店的饭。但每个人脑子里想的东西完全不同。
王宝强离婚跟我们的公司没有任何关系。但午饭时间的闲聊是一种润滑剂。没有润滑剂的机器会卡死。人也是。张富贵是润滑剂。他负责提供话题。话题的质量不重要。重要的是有话说。有话说的办公室比没话说的办公室暖。
吃完饭以后张富贵收拾外卖盒。他每次都收拾。六个人的外卖盒子叠在一起。装进一个大塑料袋。拎到门口的垃圾桶旁边。他做这件事的时候很自然。不是被安排的。是他习惯了。在安徽老家他也收拾。在工厂他也收拾。他说"干活的人手不能闲着,手闲了脑子就乱想"。
刘海洋从来不收拾。他吃完了站起来就走。回到工位。戴耳机。写代码。他的外卖盒子有时候会在桌上待到下午三点。然后被张富贵路过的时候顺手扔了。
许畅自己收拾自己的。他的垃圾从来不留过夜。他的工位很干净。桌面上只有笔记本电脑、一杯水、一盒薄荷糖。他偶尔吃一颗薄荷糖。嚼的声音很轻。比古龙水安静。
十月的上海。梧桐叶开始落了。
窗外的树上黄色和绿色混在一起。占比大概对半。再过两周黄色就会占满。然后落光。留下光秃秃的枝杈。
一阵风过来。叶子从枝头旋下来。不是直线掉的。是旋的。旋了好几圈。慢慢地。最后落在窗台上。干的。轻的。用手指一碾就碎了。
办公室开了暖气。不够暖。但够了。刚好不冷。刚好不需要穿外套。刚好能坐着工作而不缩脖子。将就的温度。将就的暖。
我的腰垫在椅背上。棕色的。三十九块。淘宝买的。已经用了四个月了。有点变形了。中间那块凸起的部分被压平了一些。但还能用。靠上去有一种将就的稳定感。不太舒服。但比没有好。
这大概就是2016年十月的状态。什么都不太够。但刚好够。将就着往前走。
窗外偶尔传来声音。楼下园区有施工。在盖新的写字楼。钢筋水泥。塔吊在天上转。从窗户里能看到塔吊的臂。很长。灰色的。转得很慢。一圈大概两分钟。每转一圈吊起一筐水泥或者钢管。两分钟。一筐。一层楼大概需要几百筐。几百个两分钟。
建东西就是这样。一筐一筐地吊。一行一行地写。一条一条地标。一个一个地见。每一步都很小。加在一起才看得出变化。
72%变成78%。六个点。三周。每周两个点。每一个点背后是几千条新标注、几十次参数调整、几次模型迭代、刘海洋和许畅在Git日志里你来我往几十个回合。
六个点。看起来不多。但路是这样走的。
张富贵的笔记本翻开在桌上。他在加新的一行。我偷看了一眼。
"78%。离85还有七个点。有个客户说85签。"
下面加了一个括号:"(大概还要一个月?问一下秉文)"
他没问。不是忘了。是觉得这种事不该催。我这两天都在忙。他看得出来我忙。他觉得催一个忙的人回答一个他自己也估不准的时间是不合适的。
张富贵的分寸感比任何人都好。他知道什么时候该说话。什么时候该闭嘴。什么时候该催。什么时候该等。
他选了等。
后来那周周五。周小薇发了现金流周报。账上六十一万。月烧十五万。还能撑四个月。
四个月。如果十一月到80%。十二月到85%。一月开始签AI增强版的新客户。二月收到第一笔3500的年费。
刚好。
刚好是最危险的。刚好没有余量。一步都不能慢。一个月都不能耽误。
但我没有告诉张富贵这个。他问了大概还要多久。我没答。不是不想答。是答出来会吓到他。四个月。四个月是命。不是时间。
同一周。张富贵去见那个母婴电商的方总监。第三次了。
上次她笑了。微信置顶了他。但没签。这次张富贵带了一样新东西。
一份竞品分析报告。
这份报告是上周做的。起因是上上周张富贵去一个行业路演。被一个观众问了一个问题:"你们78%,竞品多少?"他答不上来。回来以后跟我说:"做竞品调研。这周做完。"
他催的。不是我主动做的。说起来惭愧。做了快两年产品。从来没有正式做过竞品调研。不是不知道该做。是忙。总有更急的事。后台日活。模型准确率。客户电话。现金流。竞品调研排在后面。一直排在后面。直到张富贵被问住了。他被问住了就回来催。催一次就做了。
我找许畅和刘海洋帮忙。花了三天。许畅查了学术圈的几个做中文NLP客服的团队。看了他们发的论文。记下了他们声称的准确率和使用的数据规模。刘海洋查了市面上在售的AI客服产品。下载了试用版。自己测了一遍。把结果记下来。
我汇总了一份两页纸的报告。表格。对比。我们vs竞品A vs竞品B。准确率。数据量。商用案例。价格。打印出来。给张富贵。
今天他把报告带去了。
方总监翻了一遍。两页纸。看了大概两分钟。
"主要竞品A——demo环境声称80%以上。无商用案例。"她念了一句。抬头看张富贵。
"对。他们的80%是实验室的数字。我们的78%是在真实客户数据上跑出来的。不一样。"
"竞品B——有商用。准确率72到75%。"
"对。他们比我们低。而且他们没有我们的数据优势。我们有五十多个客户三年的真实客服记录。他们的数据是通用语料。不一样。"
她沉默了五秒。五秒在安静的会议室里不短。
"这份竞品分析是你们自己做的?"
"是。"
她看了他一眼。把报告推回来。
"行。等85%。我们再谈。"
没有签。但也没有走。她的眼神跟上两次不同了。上两次是看一个有意思的销售。这次是看一个有准备的公司。
出来以后张富贵在路边给我发消息。
"第一次答上了竞品问题。她没笑。但也没否。比上次好。"
我回了个"好"。
然后停了十秒。想了一下。又补了一句。
"谢谢你。"
张富贵发了个问号。
"上次路演你说'做竞品调研这周做完'。你催的。没有你催我不会做这么快。"
他回了一个他常用的不明所以的表情。然后发了一条语音。四秒。我点开。
"别客气。这是我份内的事。你们写代码。我跑腿。各干各的。"
各干各的。他上周刚说过这三个字。这三个字在他嘴里不是分离。是分工。每个人做自己最擅长的事。然后拼在一起。
他关了手机。继续翻笔记本。在方总监那行后面加了四个字:"竞品答了。"
括号:"(没签。没否。继续等。)"
继续等。
他这本笔记本里"继续等"出现了多少次?我没数过。但肯定是出现频率最高的三个字。每个客户后面都有一次或者几次"继续等"。等产品好了。等准确率到了。等价格谈好了。等对方老板批了。
创业的常态就是等。但张富贵的等不是干等。他的等是每个月去见一次。每次见完写一行。每一行后面的括号越来越长。从"(等85%)"到"(等85%。竞品答了)"到"(等85%。竞品答了。她没否)"。每一次见面加一个新的信息。积少成多。到最后那个括号会变成一份完整的客户档案。比任何CRM都详细。
七个百分点。七步路。每一步都在走。
外面的梧桐叶又落了一片。旋着下来。落在人行道上。被一辆外卖电瓶车的轮子碾过去了。碎了。
但树还在。根还在。明年春天还会长。
Git日志里。蓝绿交替。还在继续。今晚十一点会有一个蓝色的提交。明天早上八点会有一个绿色的。后天又是一个蓝的。一个绿的。
两台发动机。不说话。只转。
转的声音越来越稳了。
78%。离85%还有七个点。离活下去还有四个月。离张富贵笔记本里那十二个"等85%"还有一段路。
路在脚下。叶子在落。代码在跑。笔记本在翻。
十月过去了一半。另一半在等。
等每一个蓝色和绿色的提交。等每一个百分点。等每一个客户的笑。