八月中的保定,天气依然闷热。绿源公司院子里那几棵杨树的叶子,边缘已经开始泛黄,在烈日下无精打采地耷拉着。车间里机器运转的声音透过办公楼紧闭的窗户传进来,沉闷而持续,像是这座工厂永不停歇的心跳。
周三上午九点,研发部照例开周会。小会议室里,空调开得很足,冷风从出风口嘶嘶地吹出来。长条会议桌旁,周经理坐在主位,吴普同和牛丽娟分坐两侧。桌上摆着三杯刚泡的茶,热气袅袅上升。
“上周主要解决了料斗数据异常的问题。”周经理翻开笔记本,“小吴的系统升级已经完成,累计偏差预警功能运行正常。车间反馈,最近三天没有再出现类似问题。”
他说着看向吴普同:“小吴,你那边还有什么补充?”
吴普同打开自己的记录本:“除了预警功能,我还优化了数据同步机制。现在即使在网络波动的情况下,本地缓存也能保证至少二十四小时的数据完整性。另外,我写了一份操作手册,已经发给车间和化验室了。”
“很好。”周经理点点头,在笔记本上记了一笔,“牛工,你那边的原料检测标准化方案进展如何?”
牛丽娟今天穿了件浅灰色短袖衬衫,扣子一丝不苟地扣到最上面一颗。她双手交叉放在桌上,坐姿笔直,闻言微微颔首:“方案初稿已经完成了。主要是统一各批次原料的取样标准、检测流程和数据记录格式。我建议,这个方案应该和小吴的系统对接,确保检测数据能自动导入,减少人工录入误差。”
这个提议很合理。吴普同立刻说:“可以对接。我需要知道数据的格式要求和传输频率。”
“我会把详细需求发给你。”牛丽娟语气平淡,听不出什么情绪。
会议按部就班地进行着。大家讨论了几个在研的配方调整方案,分析了上个月的市场反馈,又安排了下一阶段的工作重点。一切都显得正常、专业、高效。
就在会议接近尾声时,牛丽娟突然开口:“周经理,我还有个问题想提一下。”
周经理正收拾文件,闻言抬起头:“什么问题?”
“是关于小吴那个数据采集系统的。”牛丽娟的视线转向吴普同,眼神平静无波,“系统现在用得越来越多了,车间、化验室都在用。我考虑了一下,觉得有个安全隐患需要解决。”
会议室里的空气似乎凝滞了一瞬。空调的冷风还在吹,但吴普同感觉后背有些发紧。
“安全隐患?”周经理放下手中的笔,“什么隐患?”
“程序源代码的问题。”牛丽娟说得很慢,每个字都咬得很清楚,“现在整个公司的生产数据、配方数据、检测数据,都依赖小吴一个人开发的系统。但程序的源代码只有小吴一个人有,如果他哪天请假了、生病了,或者……不在了,系统一旦出问题,没有人能维护。”
她顿了顿,目光在周经理和吴普同之间扫过:“我的建议是,小吴应该把源代码提交到部门,由部门统一管理。这样既能备份,也方便其他人学习和审核。”
吴普同的心沉了下去。他看着牛丽娟,对方的表情依然平静,甚至可以说得上是诚恳——就像一个真正为公司着想的老员工,提出的合理化建议。
“牛工的意思是……”周经理斟酌着用词,“让其他人也看看代码?”
“不仅仅是看看。”牛丽娟纠正道,“是审核。程序现在涉及公司的核心数据,万一代码里有漏洞,或者有什么……不该有的东西,后果会很严重。咱们搞技术的,应该知道安全性是第一位的。”
她说“不该有的东西”时,语气很自然,但吴普同听出了弦外之音。
“牛工是担心我的代码有问题?”吴普同直接问。
“不是担心,是规范。”牛丽娟看着他,眼神里没有任何挑衅,只有一种公事公办的认真,“小吴,你别多想。这不是针对你,任何重要系统都应该有代码审核机制。我在以前的大厂工作过,他们的流程就是这样的——所有上线程序,必须经过至少两名高级工程师的代码审核。”
她说得没错。大公司确实有这样的流程。但绿源不是大公司,而且……
“我的代码没有安全隐患。”吴普同说,“所有数据都是明文存储,没有后门,没有恶意代码。如果牛工不放心,我可以写一份详细的安全说明。”
“文字说明解决不了问题。”牛丽娟摇摇头,“代码里可能有无意中留下的漏洞,比如缓冲区溢出、SQL注入风险,这些只有看代码才能发现。小吴,你是学畜牧的,编程是自学的吧?我不是说你水平不行,但自学的东西,难免有不规范的地方。”
这话说得滴水不漏。既肯定了吴普同的能力,又指出了潜在的风险,还摆出了为公司考虑的姿态。
吴普同感到一阵憋闷。他张了张嘴,想说些什么,但周经理先开口了。
“牛工说的有道理。”周经理的手指在桌上轻轻敲着,“系统现在确实很重要,安全性要考虑。不过小吴的顾虑也能理解——源代码相当于程序员的知识产权,直接交出来,可能有些敏感。”
他看向吴普同:“小吴,你看这样行不行?你不必提交全部源代码,但可以把核心模块的说明文档写详细些,包括数据处理逻辑、算法原理、数据库结构。牛工可以先看文档,如果还有疑问,再针对性地看部分代码。”
这是个折中的方案。吴普同心里明白,周经理在努力平衡。但他依然感到不舒服——不是不愿意分享技术,而是牛工提出这个要求的方式和时机,让他觉得这不是单纯的技术讨论。
“周经理,我觉得这不是最好的办法。”牛丽娟却不同意,“看文档和看代码是两回事。文档可以写得很好,但代码可能完全是另一回事。只有直接审核代码,才能确保没有安全隐患。”
她的语气依然平和,但态度很坚决。
会议室里安静下来。空调的噪音显得格外刺耳。窗外的杨树上,几只知了突然齐声嘶鸣,那声音穿透玻璃传进来,尖锐而烦躁。
吴普同深吸一口气,抬起头,直视牛丽娟:“牛工,我想问一下,您要审核我的代码,是以什么身份?技术指导?质量监督?还是别的什么?”
这个问题问得有些直接。牛丽娟的眼神闪了闪,但很快恢复平静:“我是研发部的老员工,有责任确保部门的技术工作符合规范。而且,我对程序安全比较关注,以前也学过一些编程基础,能看出基本的问题。”
“也就是说,您并不是专业的软件工程师。”吴普同说,“我的代码用的是VB,涉及到数据库操作、网络通信、多线程处理,这些都需要一定的专业知识才能看懂。您确定能审核吗?”
这话说得有些尖锐。周经理轻咳一声,想打个圆场,但牛丽娟已经开口了。
“小吴,你这话是什么意思?”她的声音依然平稳,但温度降了些,“觉得我不够格看你的代码?”
“我不是这个意思。”吴普同努力让自己的语气保持平静,“我只是说,代码审核是个专业工作。如果您真的担心安全问题,我建议请专业的安全公司来做审计。或者,我可以自己找同行做代码复审,出具报告。”
“找外人?”牛丽娟的眉头第一次皱了起来,“公司的核心系统,让外人看代码?这合适吗?”
“那让非专业人士审核,就合适吗?”吴普同反问。
话一出口,他就知道说重了。会议室里的空气彻底凝固了。周经理的脸色变得严肃,牛丽娟的嘴唇抿成一条直线,手指无意识地收紧。
“小吴。”周经理的声音带着警告。
吴普同知道自己不该这么说话。但他控制不住——那种被怀疑、被审视的感觉,像一根刺扎在心里。他花了那么多时间完善系统,解决了那么多实际问题,到头来却要被质疑代码里“可能有不该有的东西”。
“对不起。”他低声说,“我情绪有点激动。但我坚持我的观点:源代码不能随便给人看。不是我不愿意分享,而是这涉及到程序员的职业底线。”
牛丽娟沉默了很长时间。她端起茶杯,慢慢喝了一口,放下杯子时,陶瓷与桌面碰撞发出轻微的响声。
“周经理,您看吧。”她终于说,“小吴既然这么坚持,我也不好再说什么。但安全问题确实存在,万一将来出了事,责任谁负?”
这话把难题抛给了周经理。作为部门经理,他必须做出决定。
周经理看看吴普同,又看看牛丽娟,最后叹了口气:“这样吧,就按我一开始说的,小吴先提供详细的模块说明文档。牛工你先看文档,如果看完后还有疑问,咱们再商量。至于代码审核……暂时先不强制。”
他看向吴普同:“小吴,你尽快把文档写出来,越详细越好。包括数据处理逻辑、算法原理、数据库结构,还有你说的那些安全机制,都写清楚。”
又看向牛丽娟:“牛工,你看这样行吗?”
牛丽娟没有立即回答。她的目光落在会议桌的木质纹理上,像是研究着什么重要的问题。过了足足半分钟,她才点点头:“听周经理安排。”
会议就这样结束了。周经理先离开会议室,说是要去向刘总汇报工作。吴普同收拾好自己的东西,正要起身,牛丽娟叫住了他。
“小吴。”
吴普同停住脚步。
牛丽娟还坐在椅子上,没有看他,而是看着窗外。阳光透过百叶窗的缝隙,在她脸上投下明暗相间的条纹。
“我工作二十多年了。”她突然说,声音很轻,“在三个厂子待过,见过各种各样的人。有的人技术好,但人品不行;有的人踏实肯干,但脑子不灵光;有的人聪明,但太聪明了,总想走捷径。”
她转过头,看着吴普同:“你知道我最佩服什么样的人吗?”
吴普同没有说话。
“我最佩服那些既能做事,又能做人的人。”牛丽娟说,“技术可以学,经验可以积累,但做人是一辈子的事。在厂子里,你不是一个人在干活,你是团队的一份子。团队要信任,要透明,要互相支持。”
她站起身,走到吴普同面前。她的个子不高,但站得很直,目光平视着吴普同的眼睛。
“我今天提源代码的事,不是针对你个人。”她说得很诚恳,“我是真的担心。系统越重要,风险就越大。万一哪天你不在,系统出问题了,整个生产都要停。那时候怎么办?”
吴普同想说,他可以写详细的维护手册,可以培训其他人,甚至可以远程支持。但牛丽娟没给他说话的机会。
“你还年轻,有些事可能想得不周全。”她说,“但我作为老同志,有责任提醒你。代码审核不是不信任你,是规范流程,是对公司负责,也是对你负责——万一真出问题,至少能证明你该做的都做了。”
说完这些,她拿起自己的笔记本和水杯,走出了会议室。高跟鞋敲击地面的声音在走廊里渐渐远去。
吴普同一个人站在会议室里。空调还在吹,冷风让他打了个寒颤。窗外的知了声一阵高过一阵,吵得人心烦。
他慢慢走回自己的办公室。空荡荡的房间里,只有他的电脑屏幕还亮着,屏保是马雪艳去年在校园里拍的照片,笑得灿烂。
他在椅子上坐下,看着屏幕上的笑脸,心里的委屈一点点涌上来。
他不是不愿意分享技术。在大学里,他经常和同学讨论代码,互相帮忙调试。在红星饲料厂时,他也把一些小程序分享给同事,帮他们提高工作效率。
但这次不一样。牛丽娟要的不是技术交流,不是共同进步,而是一种审查,一种不信任的验证。而且,她选择在周会上公开提出,用一种看似合理、实则施压的方式。
吴普同打开编程软件,屏幕上是他这几天正在完善的库存管理模块。代码整整齐齐,注释清晰,变量命名规范。这是他自学编程以来一直保持的习惯——写让人看得懂的代码。
可现在,有人要“审核”这些代码,要用放大镜找出“可能的不该有的东西”。
他感到一种深深的疲惫。
手机震动了一下,是马雪艳发来的短信:“中午一起吃饭吗?公司附近新开了家米线店。”
吴普同看着那条短信,突然很想见到妻子。想听听她的声音,想看看她的笑容,想暂时忘记办公室里这些让人憋闷的事。
他回复:“好。十二点,老地方见。”
放下手机,吴普同强迫自己开始工作。他新建了一个文档,开始编写系统模块说明。数据处理逻辑、算法原理、数据库结构、安全机制……他写得非常详细,几乎是在写一本技术手册。
键盘敲击声中,时间一点点过去。写到数据库连接安全的部分时,他突然停下了。
这段代码里,他用了加密的方式存储数据库密码。不是简单的Base64编码,而是真正的AES加密。密钥是他自己生成的一串随机数,硬编码在程序里。
如果牛丽娟看到这段代码,会不会问:为什么要加密?密钥是什么?会不会有后门?