- 读书简介
林川李大志是现代言情《摸鱼才是正经事》中的主要人物,梗概:996程序员林川,连续加班两年半,换来的却是裁员名单上的头号名字。凌晨两点,一个声音在他脑子里响起:\...
第17章
周五早上七点半,林川到公司的时候,发现项目群里有一条来自赵贺的消息,发布时间是昨晚十一点二十三分。赵贺平时很少在晚上发消息,这条消息的措辞也比平时正式:“各位同事,应王主管要求,下周起项目组将对所有代码进行一轮‘代码规范复核’。复核范围包括变量命名规范、注释完整度、缩进格式、函数长度限制等十五项细粒度指标。复核结果将纳入月度绩效考核参考。请大家提前做好自查。”
消息发出来之后,下面有几个人回了“收到”,但更多人是沉默的。林川知道那种沉默意味着什么——一个项目组在已经过了三分之二的进度节点上突然增加一轮“代码规范复核”,而且复核结果要纳入绩效考核——这在所有人看来都是一个信号:有人在找茬。
他把这条消息截了图,存进手机里。然后他坐在工位上,没有急着回复“收到”,而是在脑子里把这条消息拆解了一遍。
系统说:“你觉得这条消息意味着什么?”
“意味着王胖子的新切口找到了。”
“什么切口?”
“需求文档的路被我堵了。他从需求角度找不到我的毛病,就从代码规范的角度来找。代码规范是一个‘没有绝对标准’的东西——每个人都有自己的习惯,有的公司用空格、有的公司用TA*,有的公司规定函数不超过五十行、有的规定不超过两百行。没有统一标准就意味着他可以选一个标准来跟我对标。”
“那你怎么办?”
“先确认他选的是什么标准。”
林川给赵贺发了一条私聊:“赵哥,那个代码规范复核——用的是哪套标准?公司的旧规范文件还是重新定了一套?”
赵贺隔了大概十分钟才回:“王主管说他有一套新的规范文档,今天上午会发到群里。据说是参考了几家大厂的规范整合出来的。”
“你提前看过吗?”
“还没有。他说他昨晚写完的,今天早上发。”
林川看着屏幕上这行字,手指在桌面上敲了两下。王胖子昨晚写了一份代码规范——一个平时自己写代码都很少的人,忽然花一晚上写了一整套规范文档。这说明他花了大心思在这个切口的准备上。
系统说:“他在昨晚你交付PJ-047之后连夜写了这份规范。”
“对。因为我堵了他的需求坑,他需要连夜换新坑。”
“那你准备好了吗?”
“准备不是‘要不要做’的问题。是‘怎么做’的问题。”
上午九点半,王胖子把那份规范文档发到了项目群里。文档的名字是《破晓项目代码规范V1.0》,一共二十三页,涵盖了变量命名、注释格式、缩进标准、函数长度、类结构、包管理、异常处理、日志输出等十五个大类的细则。每一条细则都标注了“推荐”或者“强制”,其中强制项占了大约百分之七十。
林川花了大约二十分钟把整份文档看完了。
看的时候他做了一件事——把自己过去一个月提交的代码和这份规范逐条对照。大部分符合,小部分偏离。偏离的地方主要集中在两个点上:变量命名风格和注释语言。
他用的变量命名是驼峰加简写,比如“usrScore”表示“用户分数”,“clickCnt”表示“点击计数”。而王胖子的规范里写的是“变量命名应使用完整英文单词,禁止使用缩写,建议使用全称如‘userScore’、‘clickCount’”。注释语言方面,林川习惯用英文写注释,因为他看的技术文档大多是英文的,写英文注释方便他和外部技术文档对照。但王胖子的规范里写的是“注释应使用中文,便于团队成员阅读”。
系统说:“他有两条可以攻击你的点。”
“对。两条。但两条都是可以改的。”
“你打算全都改?”
“全都改。花一上午时间把过去一个月的所有代码的变量名和注释全部改一遍,改成符合他规范的样子。然后提交记录里会显示‘今天我修改了全部历史代码的命名和注释’——这条记录本身会告诉大家两件事:第一,我服从规范。第二,我的历史代码除了命名和注释之外没有任何问题。”
“如果他再找到新的攻击点呢?”
“那继续改。他每多列一条规范,我就多改一轮代码。改到他知道——用规范来卡我是一件成本很高的事。每一次他出一份新规范,我就能交一份‘全量改完’的记录。到最后所有人都会看到一个事实——他每提一次要求,林川就改一次。但他改完之后,代码的运行逻辑没有任何变化。他做的全是表面功夫。”
林川放下手机,打开代码编辑器。他从今天要写的代码开始——先按照王胖子的规范来写。变量名用全称,注释用中文。花了几分钟适应了新的习惯之后,他发现写起来也不慢。真正的成本不在“怎么写”,在“习惯的切换”。过了那个切换的坎,后面的速度就恢复了。
上午十一点,王胖子的那份规范文档开始在群里引发讨论。***的人问了一句:“这个规范是强制性的吗?我们之前已经写了两万多行代码了,都要改吗?”
王胖子回了一条:“核心模块的代码需要统一过一遍。非核心的可以逐步迁移,但最终目标是一致的。”
然后有人问了一个更实质的问题:“那之前已经完成的代码,算不算核心模块?”
王胖子回:“推荐层和数据层算核心。”
推荐层是林川负责的。林川注意到这条消息的时候,手指在键盘上停了一下。他没有回复,没有表态,甚至没有在群里点一个“赞”。他继续写代码——按照新规范写的代码。
系统说:“他直接在群里说推荐层是核心,要重新过一遍规范。”
“看到了。”
“你打算什么时候开始改?”
“不急着改。等赵贺出一个明确的改版排期再动。赵贺是项目主管,规范复核的执行权在他手里。王胖子只是提了规范文本,赵贺才是那个安排‘什么时候改、谁负责改、改完怎么验收’的人。我现在提前改完了,赵贺那边反而不好做排期。”
“你在等赵贺动?”
“对。让赵贺来推动这件事。我配合。这样王胖子就不能说‘林川***’——因为他没办法反驳赵贺的安排。”
十二点十分,赵贺在群里发了一条补充消息:“规范复核的具体执行方案我下午两点发到群里。届时会明确改版的范围、时间表、负责人和验收标准。大家稍等。”
林川看到这条消息的时候,微微点了点头。赵贺用了“明确范围、时间表、负责人、验收标准”四个词——每一条都是一个可以追溯的节点。他在把这件事正规化、流程化。一旦正规化之后,王胖子的操作空间就会被压缩。
下午两点整,赵贺的执行方案发出来了。他把规范复核拆成了三个阶段:第一阶段(本周末前),各人自查自己负责的模块,标注偏离项。第二阶段(下周一至周三),集中修改。第三阶段(下周四至周五),交叉复核。
林川名下的任务是第一阶段的“自查标注”。标注的截止时间是周日晚上十点。
他看了一眼时间,现在是周五下午两点十分。距离周日晚上十点还有五十六个小时。他完全可以现在就做。但他不打算现在做——他打算把这件事放在周六的上午来完成。这样周五剩下的时间和周一上午可以继续写新代码,不影响破晓项目的整体进度。
系统说:“你不现在就改?”
“不急。排期给了两天半,我就用两天半。所有活都提前干完不一定是好事——它会让别人觉得‘你的时间不值钱’。但把活控制在排期之内完成,会让人觉得‘他在正常节奏里干活’。”
“那你这周六上午改的时候,会用到效率压缩吗?”
“不会。”
“为什么?”
“效率压缩是用在刀刃上的。刀刃是指——对方出招最凶猛的那一刻,我需要十五分钟来翻盘。代码规范这件事属于常规斗争,还不到掀底牌的时候。”
周五剩下的时间,林川以正常速度写了一组新的接口代码,然后在五点五十分提交,走完了全部自测和审核流程。他的工位上安安静静的,键盘声、鼠标声、喝水声,和平时没什么两样。
五点半的时候,苏晚晴路过他工位。她停了一下,在他桌角放了一张便利贴——浅绿色的,上面写着一行字:“代码规范的事,我帮你看了。你的变量命名习惯之前是驼峰加简写,新规范要求全称。如果你需要批量替换的工具,我那边有一个脚本可以帮你自动化处理。”
林川看着这张便利贴,把它揭下来,夹进了笔记本里。然后他给苏晚晴发了一条消息:“你连批量替换工具都帮我准备了?”
苏晚晴回了一个字:“嗯。”
“你自己写的脚本?”
“周末闲着没事写的。”
“你周末闲着没事写了一个批量替换代码的脚本?”
“不是完全闲着没事。上周看你写代码的时候注意到你的命名风格比较固定——如果你需要改,批量处理比手动改快很多。所以就顺手写了一个。”
林川看着屏幕上这行字,心里翻了一下。她说“顺手写了一个”——一个批量处理代码的脚本至少需要理解正则表达式、文件递归遍历、多行文本解析、备份机制、回滚逻辑等等,这是至少一两个小时的工作量。她说“顺手”只是不想让他觉得欠她太多。
他打字回了一句:“那脚本你发我。周末用。”
苏晚晴回了一个“OK”,然后把脚本发了过来。附带了一行简短的说明文档,写了使用方法、参数说明、备份位置和回滚步骤。
林川打开脚本看了一遍。代码干净、逻辑完整、异常处理都考虑到了——连边界情况都写了注释。他看了大约五分钟,然后给苏晚晴发了一条:“你写这个脚本用了多久?”
“周末上午。大概一个半小时。”
“你在帮我准备武器。”
“不算武器。算工具。工具是给你用的,不是帮你打的。”
“那区别是什么?”
“区别是——工具你学会了就是你的。别人帮你打一次,你之后还得找人帮。工具你学会了之后永远能用。我教你怎么用脚本,以后你自己想改任何代码的命名风格,都能自己搞定。”
林川靠在椅背上,看着屏幕上这行字。她的逻辑很清晰:她不是要替他做,而是要让他自己能做。
“那这个工具我收下了。”他说。
“那你什么时候用?”
“周六上午。”
“需要我陪着你远程看着吗?万一行走不通。”
林川的手指在屏幕上方停了两秒。她没有说“万一你搞不定”——她说的是“万一行走不通”。前者是怀疑,后者是协助。
“不用远程。脚本我看过了,不会有问题。但如果你明天上午有空的话——”
“我明天上午有空。”
“那明天上午十点,我改完代码之后给你发结果。你帮我复核一下有没有漏掉的地方。”
苏晚晴回了一个字:“好。”
晚上七点半,林川回到家。他没有立刻打开电脑,而是先洗了个澡,换了身衣服,倒了杯水坐在沙发上。窗户开着一条缝,初秋的晚风从外面吹进来,带着一丝干燥的凉意。
他掏出手机,翻到和苏晚晴的聊天记录。今天聊了几十条——从脚本代码到使用说明、从周末安排到“明天上午十点”。他往上翻了一会儿,又往下翻了一会儿,最后停在她说“工具你学会了就是你的”那条消息上。
系统说:“你在看她的消息。”
“在看。”
“你最近回看消息的频率越来越高了。”
“因为有些消息值得再看一遍。”
“那这条消息值得再看几遍?”
林川想了想:“三遍。”
“那明天上午改完代码之后,你打算跟她说什么?”
“说她写的脚本跑得很好。”
“然后呢?”
“然后问她想喝什么咖啡。”
系统沉默了一下:“你从湘菜进化到了咖啡。”
“那下一步是什么?”
“你问我?”
“我在问自己。但你可以先记着。”
系统在日志里记了一行:“宿主主动提出‘下一步’概念。备注:未明确内容,暂无法分类。”
周六上午九点五十分,林川打开电脑。他先把苏晚晴发来的脚本跑了一遍,确实干净利落,一行多余代码都没有。然后他打开自己的代码目录,在备份文件夹里存了一份快照,然后开始执行脚本。
脚本运行了大约四十秒,屏幕上滚动过一串绿色的成功提示。林川在改动记录里追加了一行说明:“用户反馈回传模块——变量命名及注释语言迁移至新规范V1.0。备份可追溯。”
他保存之后,把改完的文件打开了几个检查了一下。变量名从“usrScore”变成了“userScore”,从“clickCnt”变成了“clickCount”,中文注释清晰简洁,没有任何遗漏。
他给苏晚晴发了一条消息:“改完了。脚本跑得很好。”
苏晚晴隔了大概两分钟回了一个“发我”。林川把改完的文件打包发给了她。
她大约过了十五分钟才回。那十五分钟里,林川没有做任何事——他坐在工位前,手里端着水杯,看着窗外的阳光从云层缝隙里漏出来,落在对面的楼顶上。电脑屏幕亮着,显示着聊天窗口,光标在输入框里闪烁着。
十五分钟之后,苏晚晴回了一条:“全部合格。没有遗漏。变量命名全称替换成功,注释全部改成中文,连文件头部的版权**都改了。”
“那以后就按这个规范写。”
“你以后就用全称加中文注释了?”
“对。反正已经改了一整遍了,习惯已经形成了。继续写下去不用再适应一次。”
苏晚晴这次隔了几秒回:“那你适应得挺快的。”
“被动适应。”
“被谁?”
“被规范。”
苏晚晴回了一个“哈”——那个“哈”的意味林川已经能读懂了。它意味着“我知道你想说的是被谁逼的但你不想直接说那个名字”。两个人之间的默契已经发展到了不需要把话说满的程度。
周日晚上,林川把自查标注的表格发给了赵贺。他在表格里标注了自己所有的偏离项和修正状态,并在备注栏里写了一句:“已完成全量修正。备份可追溯。”
赵贺回了一个“收到”,然后过了大约半小时,在项目群里发了一条群公告:“各位同事,第一阶段自查标注已完成大部分。部分同事提交了修正记录,包括林川。请未完成的同事在明天上午九点前提交。”
没有点名的“包括林川”四个字,在群公告里像一枚沉入水中的硬币。没有人评论,但大家都知道这意味着什么——林川是第一轮规范复核里第一个完成全量修正的人。
当天晚上,林川坐在沙发上,手机屏幕亮着,显示着和苏晚晴的聊天框。他打了一行字:“周日了。你明天早上喝美式还是别的?”
苏晚晴回:“美式。加一份浓缩。”
“那我明天早上带给你。”
“你记得?”
“记得。你说过的话我记得。”
苏晚晴没有回。但林川看见“对方正在输入……”亮了很久,才最终消失。她没有回话,但她也没有退出聊天框。她在屏幕后面停留了很久。
系统说:“你明天早上要给她带咖啡。”
“对。”
“你打算几点到公司?”
“八点半。她通常九点十分到。咖啡放她桌上,等她自己看到。”
“你不等她来了当面给?”
“当面给会让她觉得‘我必须马上回一句谢谢’。放桌上,她自己看到、自己拿走、自己决定什么时候说谢谢。她不用被迫回应。”
系统沉默了一下:“你对她的事,算得越来越细了。”
林川把手机放下,靠在沙发上。窗外的城市灯火安静地亮着,秋夜的风从窗户缝里挤进来,轻轻晃了一下窗帘。
“不是算。”他说,“是记住了。”
小说《摸鱼才是正经事》试读结束,继续阅读请看下面!!!
为您推荐
小说标签

>
爱过,就此别过
一梨风月碎光景
领证前撞破未婚夫出轨,我连夜卖掉全款婚房
重活一世,我亲手送丈夫和他的小青梅下地狱
未婚妻纵容竹马抢我婚车红绸缎,我果断另娶








