五位评审全给项目打0分,我默然删除核心代码,十分钟接到CEO来电。我盯着评审页面,五个“0”排成一排,像五记耳光。
会议室里没人说话。空调嗡嗡响,投影仪还亮着,我做了三个月的“巡检助手”项目,最后一页PPT是“预计为公司一年省下两百四十万”。
可五位评审,一个都没留情。
研发部老周先开口:“架构没大问题,但和公司主航道不匹配。”
产品部孙姐翻着材料:“落地成本说不清,风险偏高。”
运维老赵推了推眼镜:“灰度方案太理想,真上生产会出事。”
外请专家刘工没抬头:“算法部分看不太懂,但感觉创新性一般。”
最后一位,是分管技术的副总裁郑文海。他是我直属领导的领导,平时见面都笑眯眯,这天却把笔一放:“我同意前面几位,零分,终止立项。”
我没争辩。
不是不想争,是那种场面你一开口,就成了“情绪不稳定、不服管理”。我收拾U盘,关电脑,出了会议室。
走廊尽头抽烟区,我点了一根烟,手有点抖。
不是委屈,是寒心。
这个项目不是我抢着做的。去年冬天,公司接了几个厂区设备巡检的单子,现场工人拿纸笔记录,漏检、错检、数据回传慢,客户投诉三次。老板们在周会上发火,研发老大张海军把我叫过去:“小沈,你以前写过物联网采集模块,弄个轻量系统,先顶上。”
我说:“正经做要排期,要人,要预算。”
张海军摆手:“先弄个能跑的,后面再说。”
我说:“后面要是没人维护,出了事算谁?”
他笑:“公司还能亏待你?”
我就信了这句话。
从十二月到第二年三月,一百零六天。需求是我跟客户现场磨的,接口是我写的,边缘网关掉线的问题是我大年初三在家远程调的。项目不炫,不人工智能大模型,不区块链,不元宇宙,就是让车间电表、温度传感器、振动探头把数据采上来,自动生成巡检单,异常推给班组长微信。
可它真能帮人少跑腿,真能少出事故。
评审前一周,张海军还拍我肩:“小沈,这项目我盯过,问题不大,讲清楚省钱逻辑就行。”
我信了。
结果评审席上,他派孙姐坐产品位,自己没来。
老周、老赵、刘工、孙姐、郑文海,五个人,五个零。
出来后我回工位。显示器还开着代码仓库。
“巡检助手”后端 fourteen 个服务,前端三个页面,采集代理装在二十七台网关里,告警模型跑了三版。每一行都认识,像自己养大的猫,现在被人说成野狗。
我登录内网构建平台,先停了夜间自动打包任务。
打开 GitLab,主仓库 master 分支,我是最早提交者,也是唯一 maintainer。
公司虽有备份,但三个月前我嫌 CI 太慢,写了个本地构建缓存脚本,顺手把编译产物和配置模板放进了个人工作区;更关键的是,告警阈值校准参数、客户现场拓扑适配逻辑、网关心跳重连策略,这些“不是代码但比代码值钱”的东西,只在我的笔记本和一台离线条码机里。
我没删公司备份,也没碰别人项目。
我只把自己写的“巡检助手”核心模块本地副本清空,把笔记本里校准表覆盖写入乱码,把条码机里适配文件格式化。
然后登上生产跳板机,把二十七台网关的代理升级开关关掉,留下旧版本继续跑,但新逻辑再也不会被推上去。
最后一步,我给自己写了封邮件:离职申请,交接清单,只有一行——
“巡检助手相关个人成果已按公司评审结论归档处理,后续由研发管理部指派人员接手。”
发完,手机放桌上。
第九分钟,屏幕亮了。
来电:周明远。
公司创始人兼CEO。平时一年见两次,年会和战略会。
我本来不想接。
可第十分钟,电话又震,像催命。
我滑开:“周总。”
“沈知远,你在哪?”他声音压着急,不像老板,像赶高铁的人。
“公司楼下。”
“别走!你刚才是不是动了巡检助手的东西?”
我沉默两秒:“评审给零分了,项目终止。我整理个人工作成果,有什么问题吗?”
电话那头顿了顿,像被呛住。
“小沈,评审我刚知道。郑文海没跟我报备,他擅自动了立项会。”
“周总,零分已经打了。”
“那玩意儿——”他咽了下,“客户那边下周要演示,滨江厂区的合同尾款四百二十万,靠你这个系统验收!”
我笑了,笑得自己都觉得苦。
“周总,三个月前,我说要排期要人要预算,没人听。客户催得急,是张海军让我先顶上。现在评审说‘和主航道不匹配’,可尾款又靠它。那它到底是不是主航道?”
他没马上回。
风从大楼玻璃门灌进来,我后背那件灰衬衫贴住了汗。
“你先把网关开关打开。”他语气软了点,“咱们当面谈,不谈离职。”
“周总,我不是小孩。打开可以,但得说清楚:这个项目如果继续,是公司项目,不是沈知远个人义气项目。人员、预算、责任、出事谁扛,白纸黑字。”
“可以。”
“还有,郑文海那五个零,得有个说法。不然下次换个副总裁,又给我打零,我半夜调网关算加班还是算背锅?”
他吸了口气:“郑文海我来处理。你上来。”
我坐电梯回十八楼。
前台小姑娘看我眼神像看炸弹。
周明远的助理小林在电梯口等我:“沈哥,周总在二号小会议室,没让别人进。”
推门进去,周明远没坐主位,站着,头发有点乱。
桌上两瓶矿泉水,一包没开封的烟,不像CEO办公室,像包工头临时碰头。
“坐。”他说。
我坐了。
他先开口:“你比我想象的能扛。”
我说:“不是能扛,是懒得闹。闹了也没用,三十六岁程序员闹情绪,别人只当你中年危机。”
他愣了下:“你多大了?”
“八九年冬月的,三十六。”
“我还以为你二十八。”他真有点意外,“你胡子留着,发际线又没退,上次战略会坐角落,我当你是新校招。”
这句居然把气氛松开了一点。
我没笑,说正事。
“周总,巡检助手能救尾款,但它本来就不该是‘沈知远项目’。现在问题是:客户要的是稳定、能查历史、告警别误报;公司要的是省钱、可复制、别加人头。这两件事不矛盾,但得有人拍板。”
他把水拧开,喝了一口:“郑文海为什么毙你?”
我摇头:“表面说架构、成本、创新。实际上——”
我顿住。
他:“实际上什么?”
“我不敢乱讲。但孙姐上次跟我说,郑总那边在推‘全域数据平台’,大屏好看,能给投资人讲。我这个小系统,没大屏,没故事,还显得他那边不接地气。”
周明远眉头皱起来:“你说的要是真的,那就是拿业务给面子工程让路。”
“我没证据,您别记我头上。”我补一句,“我就是被零分的人,嘴一张像报复。”
他沉默半天,手机震了三次,都没接。
“沈知远,我跟你交个底。”他手指敲桌,“公司账上没前两年宽裕。投资人这个季度看收入,不看情怀。滨江厂区、临港仓、老城供热站,三个单子都卡在‘有没有数字化验收’。你那玩意儿土,但能交差。郑文海那个平台,做半年还得再投两百万,短期内出不了合同。”
“那为啥不早说?”
“我一月还在国外见LP,二月回来被运营和财务拽着救火。底下人报上来的都是‘平台进展顺利’,没人跟我说有个小系统在扛单子。”
“张海军知道吧?”
“他知不知道,我等下问他。”周明远眼神冷了下,“他是我老部下,但我没让他骗你‘问题不大’。”
他拨内线:“小林,叫张海军来,别惊动郑总。”
十二分钟后,张海军来了。
西装,皮鞋,头发用发蜡压住,进门还笑:“周总,这么晚还——”
周明远把评审截图甩过去。
五个零。
张海军笑容僵住。
“海军,这项目你让他做的。”
“是……是去年临时顶一下。”
“顶出客户能验收的系统,你倒好,评审席派孙敏去打零分?”
张海军咽口水:“郑总那边意思,说先收一收零散项目,统一到数据平台。我也……我也没拦住。”
“你没拦住,是因为你不想得罪郑文海,还是因为小沈这项目成了,显得你平时推的大屏没用?”
这句话太直,张海军脸红了:“周总,不能这么讲。我带整个研发线,得看全局……”
“全局就是尾款四百二十万这周过不去,临港仓下月黄了,老城供热站甲方转头找竞品。”周明远声音不大,但像石头砸地,“你让一个老实人熬一百天,最后拿五个零打发他。你管这叫全局?”
张海军不说话了。
我忽然有点可怜他。
不是同情,是明白:他在中间,上也怕郑文海,下也怕周明远,最后选了最省事的——不替我说话。
“小沈,”张海军转头看我,“我承认,评审前我该跟你说一声。可你也不能删你本地成果、关网关开关啊,客户那边——”
我看着他:“张总,公司服务器有备份,我没动公司资产。本地是我自己电脑,关机格式化犯法吗?网关旧版本还在跑,我没破坏生产。我只是不想再免费把命搭进去。”
他张嘴,没声。
周明远站起来:“这样。项目重启,但换打法。”
他看我:“你别离职。我给你名分——‘现场数字化小组’负责人,虚线汇报给我,实体挂在交付中心,不归郑文海管。”
我看他:“人头呢?”
“交付中心出两个实施,运维老赵借调半月,产品孙敏把客户需求文档补完,不算你手下,算协同。”
“预算呢?”
“网关扩容、云主机、短信告警费用,走交付中心项目成本,我签字。”
“出事谁扛?”
“客户验收前出问题,我扛。数据错了你背技术责,但不会被拿去当绩效零分处理。”
我吸了口气。
其实他给的也不是多厚待遇,就是一个“别再让你一个人背锅”的姿态。
可我还是要问一句:“郑文海那边呢?”
周明远:“他我谈。如果他真拿业务给平台让路,公司不能惯。”
“他要报复我呢?”
“你是我叫回来的人,他动你,就是动我安排。”周明远说完,补一句,“当然,你也别耍横。代码、客户、网关,都走公司流程,别再关开关。”
我沉默好一会儿。
窗外城市灯亮成一片,远处高架上的红尾灯像一条河。
三十六岁,离过一次婚,房租每月三千二,妈在老家住院做复查,爸骑电动车摔了腿还没好利索。我不是那种“删完代码等CEO求我”的爽文男主。我只是累了。
“行。”我说,“我干。但有个条件。”
“说。”
“别把我捧成救世主。系统能跑,是因为车间工人愿意扫码、班组长愿意看微信推送。别到时候写汇报‘AI赋能、全景感知’,客户一听就烦。”
周明远居然笑了:“你比我们市场部懂客户。”
“还有,”我指张海军,“张总以后别跟我说‘问题不大’。问题永远大,提前说,人才不寒心。”
张海军低头:“……是我的问题。”
当天夜里十一点四十,我回工位。
老赵在运维群冒头:“小沈,网关开关我看着了,你别自己动,咱们走变更单。”
孙敏发来文档:“客户需求我重对了一遍,原来那份漏了供热站阀门反馈,我补了。”
小林端杯热咖啡进来:“周总说让你别熬通宵,明天跟客户对方案。”
我喝了一口,烫舌头。
可心里那块冰,化了一点。
第二天上午,滨江厂区客户老邵来视频。
他五十出头,穿蓝工装,背后是车间噪音:“小沈,昨天听你们公司有人来说,系统要‘重新评估’?别整虚的啊,我这电表数据再对不上,厂长要骂我。”
我把摄像头对准笔记本,开测试环境:
“邵哥,系统没黄。昨天是内部评审闹乌龙。现在给您看三样东西——第一,漏检率从百分之七降到百分之零点六;第二,班组长微信收到告警平均延迟十一秒;第三,纸质巡检单这个月少印四千张,打印机都不冒烟了。”
老邵乐了:“就这实在话。你们公司那些‘平台’‘中台’我听不懂,我就问,半夜电机温度高了,能不能叫我?”
“能。超阈值先推微信,三分钟没人点,打班组长电话。”
他咧嘴:“行,尾款我这边好说。你们周总别再换人折腾就行。”
挂了视频,我靠椅背上。
太阳从玻璃幕墙上反下来,刺眼。
手机里,妈发来语音:“知远,你爸腿好些了,别老寄钱,自己吃点好的。”
我回:“知道了,今天项目成了,发了奖金给您买柚子。”
不是真发了,是先哄老人家开心。
可人活着,不就是这点“先让家里人安心”的谎吗。
下午,郑文海回来了。
他进门时还以为周明远找他是聊数据平台。
周明远把评审表摊开:“老郑,五个零,你牵头打的。说说,这项目哪点该零分?”
郑文海先看我,眼神像看刺。
“周总,这项目碎片化,不具备平台能力,长期维护成本高,和公司三年规划不一致。”
“滨江尾款四百二十万,临港仓八十万,供热站六十万,加起来五百六十万,它‘不一致’?”周明远手指敲表,“你那个全域数据平台,预算两百万,半年没合同,你跟我说规划?”
郑文海脸色变了:“周总,不能拿短期收入压长期战略。再说了,沈知远不过一个高级工程师,他做出来东西能有多大技术壁垒?换个人也能弄。”
我没忍住:“换个人当然能弄,可换的人愿不愿意大年初三远程调网关?愿不愿意被五个零打完后还笑着跟客户讲漏检率?”
周明远抬手:“老郑,你听好。公司不是不要平台,但平台得从业务里长出来,不是拿PPT长出来。你事先不跟我报备就毙项目,还拿‘战略’压业务,这事儿不能就这么算了。”
“那您想怎样?”
“巡检助手项目归我直管小组,不进你线。你那边平台,重新写商业论证,两周内拿不出客户意向,预算砍一半。”
郑文海沉默很久,最后笑了一下,笑里没温度:“行,周总,你信他,我看结果。”
他走后,张海军在门口站了好几分钟才进。
“小沈,昨晚我回去想了半宿。”
“想啥?”
“我想起零八年我刚入行,带我的师傅跟我说:写代码的人,最怕不是 bug,是明明东西有用,上面当它是擦桌布。”
我没接话。
他叹气:“我坐到中层,就开始怕担责、怕站队,把你牺牲了。人一怕,就变浑。”
我说:“张总,别整忏悔录。您以后把我当人,把项目当项目,就够了。”
他点头,像把这句话塞进兜里。
接下来两周,日子不浪漫。
我每天七点四十到公司,先对网关日志。
老赵借调过来,话少,干活稳,发现我原来心跳重连有个小漏洞:网络闪断时代理会狂发注册包,二十七台一起发,把客户交换机吓一跳。他没笑我,只说“你一个人顾不过来正常”。
孙敏把客户文档补完,还顺手画了张班组长操作流程图,字丑,但工人看得懂。
实施小陈和小杜跑去滨江厂区,回来鞋底都是油,说“车间味道冲,但大姐们挺好,还塞橘子”。
我这才明白:
好项目不是一个人憋出来的,是一群不完美的人,肯把脸从手机上抬起来,干点实在事。
可悬疑没完。
第三周周一,我发现一件怪事。
巡检助手旧版本还在网关跑,但客户现场有一台边缘盒子,凌晨两点主动外联了一个陌生地址。
不是大流量,就几百字节,像心跳,又像上报。
我查出口IP,归一家叫“瀚昇科技”的公司。
工商信息一搜:成立三年,法人叫郑屿。
郑文海亲弟弟。
我后背一下凉了。
不是那种“反派好蠢”的凉,是“原来冰下面还有冰”的凉。
我把日志存证,没声张,先给周明远发消息:“周总,有个事要当面,别走群聊。”
他回得快:“半小时后,老地方。”
会议室还是那间。
我把日志放出来:“郑总弟弟公司,凌晨从我们客户网关外联。不一定是偷数据,也可能是售后代维代理,但客户合同里没允许第三方接入。”
周明远脸沉下来:“你怀疑什么?”
“我不乱怀疑。两种可能:一,郑文海想把我们小系统客户侧数据悄悄汇到他弟公司,将来谈平台时说他‘已有数据底座’;二,他弟公司给客户做过别的小工具,残留代理没清,郑文海默许。”
“哪种更可能?”
“第二种保面子,第一种吃官司。可无论是哪种,郑文海都没把客户当客户,把公司当公司。”
周明远半天没说话。
最后他问:“你要我怎么处理?”
我说:“别问我。我是干活的人,不是清官。您要是还想保他,就把这日志删了,让我继续调阈值;您要是真把业务当命,就查。但查完别搞‘高管博弈’,让工人别背锅——客户那边别吓着,老邵他们没犯错。”
他盯着我看:“沈知远,你不像三十六,像被公司教了十年的人。”
我说:“公司教人很快。三年就够。”
当天下午,周明远找了外部安全公司做固证,没惊动郑文海。
结果出来:瀚昇科技那台盒子,装了个“设备健康上报代理”,能把电表、温度、振动摘要往外发,字段和我们系统高度重叠。合同里没这条,客户也不知道。
更尴尬的是——代理里硬编码了郑文海私域邮箱当告警接收人。
也就是说,郑文海一边在评审会上说“小系统没价值”,一边通过弟弟公司,悄悄把小系统喂出来的数据往自己兜里揽。
周明远看完报告,手都有点抖。
不是怕郑文海,是怕自己一直信错人。
周五晚上,董事会紧急小会。
我没参加,但在交付中心加班。老赵泡方便面,小陈啃面包,孙敏在改培训手册。
十点一刻,周明远发来一句:
“郑文海免了分管技术,保留董事但停权。他弟公司合同移送法务。你那项目,周一正式转交付中心常设产品,名字别叫助手了,叫‘现场通’。”
我回:“名字随便,别叫赋能就行。”
他发个笑哭表情,少见。
小陈探头:“沈哥,真赢了?”
我说:“没赢。就是把该干的事留下,不该混进去的捞出来。”
老赵:“那还加班不?”
“加。但今晚十一点半走,谁不走我关灯。”
后来很多人以为,我这事儿是“删代码逼老板低头”的爽文。
不是。
我没删公司备份,没要天价赔偿,没让谁跪着求我。
我只是把“我不欠你了”这件事,做得干净点。
四月,滨江厂区验收。
老邵带着班长们站一排,拿手机点告警,看历史曲线,说“这玩意儿比新来的大学生好使”。
临港仓也过了,供热站张阿姨拉着我说:“小沈,这玩意儿一响,我就不用爬三楼看阀门了,我腰不好你晓得吧。”
我晓得。
我们这种人写代码,不是为了融资PPT上那行“技术壁垒行业领先”。
是为了张阿姨的腰,为了老邵不被厂长骂,为了班组长半夜能多睡半小时。
五月,公司真把“现场通”做成产品线。
没大屏,没中台,就一个网页端、一个微信推送、一台边缘盒子。
周明远在全员会上没提“沈知远力挽狂澜”,只说:“以后立项,先听现场,再听汇报。”
张海军请了一周假,回来把研发流程改了:评审必须留书面意见,不准五个零一键枪毙,项目发起人可申诉。
他跟我说:“这规矩,算你挣来的。”
我说:“别算我,算那一百零六天。”
六月,妈来城里住几天。
我请不下整天假,她自己坐公交去菜市场,回来做西红柿鸡蛋面。
爸腿好点了,视频里举着拐杖说“你妈来了你别老吃外卖”。
我坐在出租屋小桌前,碗热气冒到手机屏上。
妈突然问:“你那公司,还让人删代码不?”
我笑:“不删了。要删也是删糊涂账。”
她听不懂,但点点头:“只要不熬通宵就行。你小时候发烧都瞒我。”
我鼻子一酸,没让泪下来。
三十六岁男人,不能在妈面前掉链子。
七月,有个年轻程序员小常来找我。
他做的“库存预警”被新来的总监打零分,气得想把测试库清空。
我请他喝矿泉水,没讲大道理。
只说:“你删了,他们就说你疯;你留着,他们就说你乖。别走这两头。你把能交的都交了,该要的写下来:排期、人手、责任、出事谁扛。他们不写,你就知道这活儿不是做给业务的,是做给面子的。面子项目,别拿命填。”
小常问:“那要不填,不就输了?”
我说:“输赢别看一次评审。你把自己当资产,别当炮灰。炮灰烧完没人记得灰;资产搁那,哪天机器转不起来,还得请你吹灰。”
他似懂非懂走了。
我回工位,继续改告警阈值。
有天周明远路过我座位,站了会儿:“小沈,你咋还不升总监?”
我说:“我嘴笨,开会老说‘这玩意儿能跑吗’,不适合当官。”
他笑:“公司以前就缺你这种扫兴的人。”
“那您别让我当官,让我扫兴就行。”
秋天,郑文海那事和平收尾。
没报警,没上法庭,他和公司签了竞业限制和解,弟弟公司把代理撤了,客户数据全部回流。周明远保住了面子,业务保住了里子。
张海军有天中午在食堂端着盘子坐我对面,忽然说:“其实你删本地代码那下,真把大家吓醒了。”
我夹着排骨:“我没删公司东西。”
“知道。可你敢把‘我不玩了’演出来。”他顿了顿,“我们这些中间人最怕这个——底下人一旦不怕走,上面就没法拿‘你离了公司活不下去’吓唬人。”
我嚼着饭:“张总,别把我写成英雄。我那晚也怕。怕删了真出生产事故,怕被保安请出去,怕妈问我为啥又失业。”
“那你为啥还动?”
“因为再不动,我就真信了他们那套:你不够战略、不够平台、不够贵,所以你不配被尊重。”
我放下筷子。
“可我写的代码,张阿姨腰不疼了。这就够贵了。”
后来“现场通”跑进七个客户现场。
没融资故事,没行业奖项。
有一次展会,市场部小姑娘要做海报,写“AI驱动工业元宇宙巡检引擎”。
我给划了,改:“工人扫码,班组长收到微信,机器坏了早点修。”
她嫌土。
周明远看了却说:“就贴这句。客户不是来拜神的。”
那年过年,我回老家。
爸的腿好利索了,非骑电动车去镇上买鞭炮,被妈骂一顿又乖乖下来。
年夜饭桌上,我喝了点酒,手机震,是公司群:临港仓班长发来照片,系统抓到冷库温度异常,提前半小时处理,货没坏,奖励了三百块。
小陈在群里发:“沈哥,这三百块比年终奖香。”
我回:“因为那是工人真保住的货。”
妈在旁边问:“单位还行吧?”
我说:“还行。这回不是我救单位,是单位终于肯让干活的人喘气。”
她听不太懂,夹块红烧肉放我碗里:“那就好,吃肉,别瘦了。”
我三十七岁生日那天,周明远发微信:
“知远,别嫌我矫情。公司活到今天,不是因为谁战略写得漂亮,是因为有你这种肯把网关心跳当回事的人。”
我回:“周总,别发这种,明天开会我怕憋笑。”
可我关了手机,在出租屋阳台站了好久。
楼下烧烤摊冒烟,外卖小哥闯红灯被骂一句,远处高架灯一串串往南。
普通人活这一生,哪有那么多“全公司跪下认错”。
更多时候,是把被踩扁的东西,一点点拍平、接上、再跑起来。
你不是复仇,也不是成佛。
你只是终于明白:
代码会过时,平台会黄,PPT会臭。
但车间里那声“温度高了”的提醒,是真有人需要的。
五位评审的零分,没把我打成废物。
它只教会我一句话——
别拿别人的打分,决定自己还值不值当好好干活。
十分钟那通电话,不是爽文开头。
是一个公司终于听见了机器另一边,还有人喘气。
而我,沈知远,三十六岁零几个月,普通程序员,离异,房租三千二,发际线暂未后退,腰背偶尔酸。
不传奇。
但第二天早上七点四十,我还是准时刷卡进公司,给网关看日志,给班组长回微信,给年轻孩子说“先别删库,先写交接”。
因为活还得干。
人还得体面地活。
这就够了。
后话
第二年春天,小常的“库存预警”终于立项。
新总监没打零分,提了三条意见:告警太吵、权限太粗、和采购系统没打通。
小常气得来找我:“他挑刺!”
我笑:“挑刺比打零分强。零分是‘你别活’,挑刺是‘你还活得不够好’。”
他愣了:“这也算进步?”
“算。公司从‘杀做活的人’,变成‘嫌你活粗’,这就是中年男人的浪漫。”
小常走了以后,我把“现场通”的告警策略再调一版。
老赵退休前跟我说:“小沈,我干运维二十年,最怕两种人:一种不懂还敢拍板,一种懂却不说人话。你属于第三种,懂一点,肯说人话。”
我问他第二种咋办。
他穿好外套:“第二种当副总。”
我们都笑了。
周明远后来真把“评审零分制”废了。
以后任何项目,不允许五位评审齐刷刷零分,必须有“可改进项”。
张海军在管理会上说:“零分不是技术判断,是权力暴力。”
大家都鼓掌。
我没鼓,因为我知道:制度写得好,不等于没人变着法儿糊弄。可至少,再有个傻小子熬夜写采集代理时,不会一觉醒来被五个“0”像五记耳光扇懵。
妈又来城里,带了一罐咸菜。
她说:“你王姨她儿也是搞电脑的,天天加班,头发都没了。”
我赶紧摸额头:“妈,我这还有。”
她瞥我一眼:“别光顾项目,赶紧找个人。你三十七了,不是二十七。”
我笑:“项目就是我对象,它比人省心。”
她拿筷子敲我碗:“放屁。”
可吃完饭,她洗碗,我擦桌。
窗外的城还是那样,玻璃大厦反着光,外卖车钻来钻去,远处工地还在盖新楼。
世界一天一个词:赋能、闭环、生态、底座、第二增长曲线。
我听归听,手底下还是写:
“设备离线超过九十秒,重连三次仍失败,推班组长微信,并生成工单。”
就这么土。
就这么有人用。
有回滨江老邵来市里办事,顺路到公司,塞我一袋苹果。
“小沈,我们新来的大学生又想加‘数字孪生大屏’,被我拒了。我就问他:半夜电机烫了,大屏能摸电机吗?”
我笑得差点呛水。
走的时候老邵说:“你们城里人爱整词儿。我们厂里就一句——东西管用,人就服。”
我送他到电梯口,鞠躬。
不是拍马屁,是谢他让我记牢这件事。
人到中年才懂:
所谓成长,不是学会删代码吓老板。
是明明知道世界会拿零分砸你,你还是把该装的代理装好,该推的告警推出去,该给妈回的“我挺好”发过去。
不逞强。
不跪着。
不把命全押在谁赏识你。
五位评审全给零分那天,我若真删库跑路,故事可能是另一种“爽”。
可我没跑。
我把本地成果收好,把生产旧版本留着,把该说的话写进邮件,等那通电话。
不是聪明。
是还信一句话:
“活儿是干的,不是演的;人是活的,不是分出来的。”
这行字,我后来写在“现场通”的关于页面最底下。
市场部想删,周明远说别删。
客户看不见,但写代码的人看见,就够了。
夜深了,网关日志静悄悄。
没有告警。
没有零分。
只有一台边缘盒子,在车间角落,安安静静数着电机转了多少圈。
像极了中国千千万万个不打分、不露脸、不写PPT的普通人——
不响,但一直在转。
续篇:现场通八月下旬,天气还闷着,没一点秋天的意思。
我刚把临港仓新加的三台冷机接入系统,小陈就风风火火跑过来,手机举到半空:“沈哥,你快看群,出事了。”
我擦了擦键盘上的灰,点开交付中心群。
群里炸了。
滨江厂区老邵连发三条语音,最后一条带着喘:“小沈,你们那玩意儿刚才疯了,一下子推了六十多条告警,全是‘温度异常’,可我刚带人去现场看了一圈,啥事没有!班长们手机都震麻了,差点把夜班的人全叫起来。”
我头皮一紧。
告警误报,比不告警还招人恨。不告警顶多漏个故障,误报多了,人家直接把你微信推送给关了,以后真出事也看不见。
“我马上查。”我回了一句,转头喊老赵,“老赵,滨江网关日志拉一下,时间范围今晚八点到现在,过滤‘温度告警’触发记录。”
老赵已经戴上了老花镜,手指在键盘上敲得哒哒响:“不用喊,我早就开始看了。怪了,日志里告警触发逻辑没问题,传感器上传的数据里,温度值确实在短时间内飙到了八十五度,然后两分钟后又掉回正常区间。可现场没这么高。”
“传感器坏了?”小陈凑过来。
“不可能七八个传感器同时坏,还只飙两分钟。”我摇头,脑子转得飞快。
八十五度,两分钟,集体飙升,集体回落。
这不是设备故障,这是数据被改了。
我点开系统架构图,顺着数据流向往回捋。传感器到边缘盒子,边缘盒子到我们平台,中间没有人工可篡改的节点。除非——
“老赵,边缘盒子有没有人动过?”我问。
“上周滨江厂区停电检修,老邵说他们自己换了块电池,盒子拆过。”老陈翻记录,“但硬件没动啊。”
“盒子拆过就行。”我站起来,“有人往盒子里刷了东西。”
小陈瞪眼:“谁啊?自己人还是客户那边?”
我没说话,心里已经想到了一个方向。
郑文海走后,他的人没全清。研发部还有两个他招进来的工程师,平时不显山不露水,但权限不小。其中那个叫方恒的,负责过边缘盒子的底层固件升级,手里攥着烧录工具和root密码。
我拿起手机,没打给方恒,打给了周明远。
电话响了两声接了:“知远?”
“周总,滨江告警误报,我查了,不是我们平台问题,是边缘盒子被人动了手脚。方恒嫌疑最大,您那边能查一下他今天加班没?”
周明远沉默了两秒:“我让行政调门禁记录。你先别打草惊蛇。”
挂了电话,我让小陈去茶水间堵方恒,别让他碰电脑。自己带着老赵直奔机房,把滨江厂区对应的边缘盒子镜像导出来一份,存进加密移动硬盘。
九点四十,小陈回来说方恒不在茶水间,工位也空了,电脑锁屏着。
“跑了吧?”小陈急了。
“没跑远。”老赵指着屏幕,“他刚才登过内部wiki,搜了‘边缘盒子固件回滚教程’,看来是想擦屁股。”
十点十五,周明远回电话:“门禁记录显示,方恒六点半进过研发区,七点十分出来,带着一个黑色挎包。保安说看他脸色不太好,问了一句,他说家里有事。”
“他要是真回家了倒还好,怕就怕他去滨江厂区。”我皱眉,“现场盒子要是被他物理重置了,咱们就拿不到固件被篡改的证据了。”
“我让小林联系老邵,现在就去车间看着盒子。”周明远说,“你带着镜像分析结果过来,我等你。”
十一点整,我坐在周明远办公室,把分析结果摊开。
“方恒在边缘盒子固件里加了一段脚本,每半小时往温度数据里注入一次异常高值,持续两分钟,然后自动清除注入痕迹。这么做的目的——”
“制造误报,让客户对‘现场通’失去信任,最好能逼你们回滚到旧版本,或者干脆下架。”周明远接过话,脸色铁青,“旧版本里,他留了后门。”
“您怎么知道?”
“郑文海那次出事后,安全公司把旧版本也扫了一遍。方恒当时负责旧版本维护,留了个远程执行的口子,能绕过认证直接往数据库写数据。”周明远冷笑,“他们这是一套组合拳。先打零分毙项目,再偷数据,现在又搞破坏。真当公司是他们家后院了。”
我点头:“那现在怎么办?报警还是内部处理?”
“报警。但报警之前,得把证据链做扎实。”周明远站起来,“你那个镜像够不够?”
“够。注入脚本的哈希值、执行时间、调用链,全在里头。加上门禁记录和保安证词,够他喝一壶了。”
“行。你和小林去派出所做笔录,我让法务准备材料。”
第二天一早,方恒在高铁站被警察找到。他没跑远,买了去邻市的票,说去见朋友,包里装着烧录器和一台备用边缘盒子。
派出所里,他一开始不承认,看到镜像分析报告才蔫了。承认是郑文海走之前托人带话,说“让那破系统出点毛病,客户自然不用了”。至于动机,他说郑文海觉得周明远护着我,让他丢了分管技术的位子,要找回场子。
案子走了流程,方恒被拘留,郑文海那边因为教唆证据不足,没立案,但公司彻底和他切割了,股份也慢慢清退。
这事在公司里传开后,没人再提“沈知远靠删代码上位”的闲话。大家看我的眼神变了,不是崇拜,是那种“这人惹不起但也靠得住”的复杂。
张海军在食堂端着盘子坐我对面,叹了口气:“知远,你说咱们这行,写代码难,还是防人难?”
“都难。”我说,“但防人比写代码费脑子,因为人不会按逻辑出牌。”
他苦笑:“以后评审我亲自盯,谁再敢往项目里塞私货,我第一个不答应。”
九月,天气终于凉下来。
滨江厂区的事处理完,老邵专门录了段视频发群里:车间里,班组长拿着手机给我看告警推送,说“现在这玩意儿安静得很,只有真出事才响,比我家那口子还懂事”。
群里一片哈哈哈。
我也笑了,笑着笑着,忽然觉得肩膀松了。
这半年,从五个零到告警误报,像坐了一趟过山车。没那么爽文,但每一步都踩在实地上。
十月中旬,周明远找我谈了次话。
“知远,现场通现在跑了十一个客户现场,月活设备四百多台,告警准确率九成七。我想把它独立成一个事业部,你当负责人,带三五个人,自负盈亏。怎么样?”
我听完没急着答应,问:“自负盈亏是什么意思?亏了算我的?”
“亏了公司先兜着,但你的绩效和事业部利润挂钩。赚了,你们团队分提成;亏了,先砍预算,再砍人。”他看着我,“我查过你的考勤,你这半年没休过完整周末。当负责人,至少能把加班费算明白。”
我想了想,摇头:“周总,我不适合管人。真要成立事业部,您找个会做PPT、会跟客户喝酒的人当头,我当技术负责人,只管把系统弄稳。这样您面子上好看,我也不用逼自己学怎么写年终总结。”
他愣了一下,然后哈哈大笑:“行,就按你说的。头儿我来安排,你当技术总监,股份给你一点,年底分红别想跑。”
就这样,现场通事业部成立了。
头儿是个女的,叫许岚,三十四,以前在一家工业自动化公司做销售总监,被周明远挖过来的。她第一次来部门开会,穿一身藏青色西装,头发盘得一丝不苟,往那儿一坐,气场比张海军还足。
我心想,这怕不是个难缠的主。
结果第一次开会,她就说:“我不管你们技术怎么实现,我只管三件事:客户签单、回款、别出大事。中间你们怎么折腾,我不问。但客户要的功能,别跟我说‘技术上实现不了’,你跟我说‘实现要多少钱、多少时间’,我自己去跟客户谈值不值。”
这话一出,我反倒放心了。
她懂边界。
许岚确实能干。来了不到两个月,就拿下两个新客户:一个城东的食品加工厂,一个郊区的物流分拣中心。她不画大饼,不吹AI,就跟客户老板算账:“你这分拣线一天跑二十小时,电机烧一次停产四小时,损失八万。我这系统提前半小时告诉你温度不对,你花两千块换轴承,你说值不值?”
老板们听得懂这个。
但新客户多了,问题也来了。
食品厂用的是进口传感器,协议是私有的,不对外开放。我们平台接不进去。
小陈研究了三天,挠头:“沈哥,这玩意儿用的是Modbus变种,文档没有,只能逆向。但逆向出来万一跟人家专利撞了,法务说有风险。”
许岚听完,直接飞了一趟食品厂,跟对方技术总监喝了顿酒,回来拎着一份合作协议:“他们同意给我们开放协议文档,条件是现场通免费给他们用半年,换长期合作。我签了,你看行不?”
我看完协议,摇头:“免费半年太长,最多三个月。而且协议文档只能我们内部用,不能传给第三方。”
“三个月就三个月,我改。”她爽快。
物流分拣中心更麻烦。他们车间信号差,边缘盒子经常离线。老赵说加信号放大器,但客户嫌贵,不肯加预算。
我蹲在车间里看了半天,发现他们传送带旁边有根废弃的网线,是以前装监控留下的。灵机一动,让小陈把边缘盒子改成有线回传,无线只做备用。问题解决了,成本多了根网线钱。
许岚知道后,在周会上说:“沈知远这人,抠门抠到点子上。别人加设备,他找废线。”
周明远笑:“这叫技术人员的浪漫。”
日子一天天过,现场通跑得越来越稳。
我妈又来城里住了段时间。这次她没带咸菜,带了个保温桶,每天给我炖汤。她说:“你脸色比上次好点,但黑眼圈还在。”
我喝着汤,心想,妈的眼睛才是真正的传感器,什么数据都瞒不过她。
三十七岁生日过完没多久,公司年会上,周明远破天荒没讲战略,讲了个故事。
“去年这时候,我们差点丢了一个四百多万的单子,因为有个项目被打了五个零。”他看着我,“当时很多人说,这项目该死,这人该走。但今天,那个项目活得好好的,养活了一个事业部,服务了十几个客户。我想说的是——”
他顿了顿,声音低了点:“别轻易给做事的人打零分。你打的不是分,是人心。”
台下掌声响起来。
我没鼓掌,端着茶杯,眼眶有点热。
不是感动,是觉得,这趟没白来。
年会结束后,我在停车场遇见张海军。他胖了点,头发还是用发蜡压着,但眼神比半年前松快多了。
“知远,明年我想把研发流程再改一版,把‘客户反馈’直接接进立项评审。你觉得咋样?”
“挺好。但别搞成形式主义,真让现场工人填评分表,别让主管代笔。”
“知道。你这人,永远在扫兴。”他笑骂。
“扫兴的人总得有人当。”我也笑。
回家路上,手机震了,是老邵。
“小沈,过年好啊。跟你说个事,我们厂长今年评先进,把我报上去了,说是因为那个系统,车间故障率降了三成。我寻思,这先进得有你一半功劳。”
我回:“邵哥,您领着就行,我不要那纸。您要是实在过意不去,开春请我喝瓶啤酒。”
“那必须的!”
放下手机,车窗外霓虹灯晃过。
三十七岁,普通程序员,离异,房租三千二,发际线暂未后退,腰背偶尔酸。
但今天,网关日志安安静静,没有告警,没有零分。
只有一台边缘盒子,在车间角落,安安静静数着电机转了多少圈。
像极了中国千千万万个不打分、不露脸、不写PPT的普通人——
不响,但一直在转。