周三下午,我盯着屏幕上那段被注释掉的300行函数,手指悬在删除键上,迟迟按不下去。
这是我在新公司的第三周。此前五年,我一直在一家流程规范的中型IT企业做后端开发。那里的代码库像一本装订精美的技术手册:目录结构清晰,命名风格统一,过期的注释会被定期清理,连代码评审的粒度都精确到变量命名是否达意。"干净代码"不是口号,是日常呼吸的空气。
新公司给的冲击是全方位的。同样的技术栈——后端、前端、数据库、API——却像闯进了另一套平行宇宙。被注释掉的旧代码像地质层一样堆积,函数动辄两三百行,业务逻辑和工具方法搅在一起,命名风格随文件而异,某些遗留模块的注释日期能追溯到三年前。我的第一反应是焦虑:这些人为什么不清理?
但住得久了,我开始看见代码背后的地层运动。
上一家公司节奏相对从容。需求周期以月计算,重构和架构讨论是排期表上的常规条目,技术债务有专门的sprint来偿还。新公司完全是另一套生存算法:功能要这周上线,紧急bug正在燃烧,客户的临时需求通过电话直接砸过来,系统能跑就别碰。这里的开发者在高压下游刃有余,他们的能力不差,只是优先级排序不同。
我逐渐意识到一个被教程和博客遮蔽的事实:软件开发不是发生在真空里的智力游戏。截止日期、商业压力、客户变卦、线上故障,这些变量从未在《代码整洁之道》的章节里出现,却每天都在重新书写代码的形态。某些看起来"丑陋"的实现,可能是凌晨两点的热修复,可能是需求突变后的妥协,可能是三代开发者接力留下的考古现场。我们只看到最终的沉积岩,却错过了每一次火山喷发。
更让我难堪的是自我审视。入职初期,我满脑子都是改造计划:重组目录、批量删注释、拆分大函数、统一命名规范、发起大规模重构。现在回想,这种冲动背后是一种隐蔽的技术傲慢——带着"你们的代码很乱"的预设闯入一个陌生团队,信任从何建立?每个代码库都是一部口述史,那些奇怪的命名、冗余的注释、别扭的结构,往往标记着特定时刻的权衡与求生。不理解上下文就谈"纠正",本质上是一种暴力。
这个认知推翻了我过去对"好代码"的定义。我曾经将其等同于"干净的代码"——短函数、纯逻辑、无注释、高度抽象。现在我发现,在真实的商业环境中,"好代码"的评判标准要务实得多:团队能否读懂,bug能否修复,业务能否持续运转。这不是向平庸投降,而是承认技术决策始终嵌入在更大的约束网络中。干净是一种奢侈品,而生存是刚需。
当然,这并不意味着代码质量无关紧要。技术债务会复利增长,混乱的架构终将反噬。但如何处理它,需要策略而非洁癖。我现在学会先观察再动手:这段代码为什么写成这样?谁在维护它?改动会影响哪些业务线?有没有更小的切口可以渐进改善?有时候,加一个清晰的注释比重写函数更有价值;有时候,暂时不动它比"优化"后引入新bug更负责任。
这段经历没有让我放弃对代码质量的追求,但确实磨平了一些棱角。我开始区分"理想状态下的最佳实践"和"当前约束下的最优解",也理解了为什么经验丰富的开发者会对新工具、新范式保持审慎——他们见过太多"更好的方案"在落地时撞碎于现实的复杂性。技术能力的一部分,正是学会在混乱中保持清醒,在妥协中守住底线,在快速迭代中埋下未来可治理的种子。
那300行被注释的函数,我最终没有删除。我在它上方加了一行注释,说明了它的历史作用和当前替代方案,然后继续处理优先级更高的需求。这不是放弃,是成长。
热门跟贴