他停下来,看向林晨:“暂时就这些主要问题。细节评论我都在代码行里加了,总共……四十七条评论”。
四十七条。林晨感觉脸上有些发烫。工作十年,他从未在一个 PR 里收到过这么多修改意见。
“陈哥,抱歉,是我没熟悉好规范”。他诚恳地说。
陈峰摆摆手:“不用道歉,新人第一个 PR 都这样。 Web3 开发,尤其是金融相关,安全性和代码质量的要求比传统 Web 高几个数量级。一笔错误交易可能造成用户永久资产损失,一个合约漏洞可能被黑客利用导致项目归零。所以审查严格是必须的”。
他顿了顿,语气缓和了些:“但你的优势也很明显——实现速度快,基础逻辑扎实,没有低级错误。只是需要适应我们的标准和思维方式”。
林晨点头:“我回去一条条改。大概需要多久”?
“给你两天时间”。陈峰说,“改完后重新提交,我会再审查。另外,建议你仔细读一下项目里的 CONTRIBUTING.md 贡献指南,还有 code-review-checklist.md 代码审查清单,里面写了所有要求和常见问题”。
“好的,我马上看”。
回到工位,林晨先点开陈峰说的那两个文档。贡献指南足足有三十多页,从 Git 工作流、提交信息规范、代码风格、测试要求,到安全注意事项、性能优化点,事无巨细。代码审查清单更是列了一百多项检查项。
他泡了杯浓茶,开始逐条处理评论。
第一条,类型定义。他把所有的 any 都替换成具体类型: string、 number、 BigNumber( Web3 中处理大数字的库)、自定义接口……光是完善类型,就花了两个小时。
第二条,智能合约交互。他查阅项目里其他类似组件的实现,学习如何处理交易发送、等待确认、错误回退。添加了 Gas 费估算函数,在用户点击前弹出预估费用和确认框。这部分涉及对以太坊交易机制的深入理解,他边学边做,到下午三点才完成。
第三条,代码结构重构。这是最耗时的。他把那个庞大的组件拆解:计算逻辑抽成 calculateYield.ts,格式化函数抽成 formatters.ts,状态管理改用 Zustand 创建独立 store。拆解过程中,他发现了自己原来代码里的几个隐藏 bug ——状态更新时机不对导致渲染闪烁。如果不是重构,这些 bug 可能要到用户使用才会暴露。
第四条,安全问题。他彻底重写了计算公式部分。不再允许用户自由输入,而是提供几个预设计算模式(线性、指数、对数),用户只能选择模式和调整参数。虽然灵活性下降,但绝对安全。
第五条,样式重构。他强迫自己学习 Tailwind CSS 的类名体系,把一堆内联样式替换成原子化类。调整响应式断点,确保从手机到桌面都能正常显示。
晚上八点,办公室只剩下寥寥几人。林晨终于处理完最后一条评论,重新运行测试,全部通过。他再次提交 PR ,这次在描述里详细列出了所有修改点,并 @ 陈峰。
几分钟后,陈峰回复:“收到,明天上午审查。”
林晨关掉电脑,揉了揉发酸的眼睛。走出写字楼时,南山科技园的夜空稀疏地亮着几颗星。晚风带着深圳湾的潮湿气息吹来,他深吸一口气,疲惫中却有种奇异的充实感。今天这四十七条评论,像一面镜子,照出了他过去十年在舒适区里形成的思维定式——只求功能实现,忽视安全质量;只顾眼前交付,不想长期维护。而 Web3 这个领域,正在用最严格的标准逼迫他打破这些定式。
地铁上,他打开手机,看到苏婉发来的消息:“今天又加班?晚饭在锅里,记得热了吃”。
他回复:“刚下班,在回去路上。今天被陈哥批了代码,改了整整一天”。
苏婉很快回复:“批得狠吗?”
“四十七条修改意见”。
“啊……那确实不少。不过能学到东西就好,别太有压力”。
“嗯,确实学到很多。就是感觉……三十五岁重新当学徒,滋味挺复杂”。
“学徒不可怕,可怕的是连当学徒的机会都没有。你现在至少还有公司愿意花时间培养你,不是吗”?
林晨看着这句话,心里某个地方被触动了。是啊,如果是在原来那家公司,以他十年老员工的资历,谁敢给他的 PR 提四十七条意见?但在那里,他也温水煮青蛙般停止了成长。而现在,虽然被批评、被要求重写、像个新手一样从头学起,但每一天都能感觉到自己在突破旧边界。
回到家已经九点半。苏婉陪乐乐睡了,餐桌上留着饭菜和一张便签:“热两分钟就能吃,别凑合”。
林晨热了饭,坐在餐桌前安静吃完。然后打开自己的笔记本电脑,没有继续看公司代码,而是点开了那个他一直
>>>点击查看《AI时代:码农的涅盘重生》最新章节