为什么要实现代码的工程化?
我之前对这个问题没有一个系统性的解答,只是粗略的认为工程化就是好的,但到底好在什么地方我也说不清楚,别人一说,我们又会绕到异常检测上,好像工程化好的代码就应该天然的处理好边界问题。
而且我自己的体感更是,有需求的时候,永远都是写Python去解决问题,直接修改代码的体验比费劲做UI好多了。
当我是唯一用户、需求固定、环境可控、变更频率极低时,工程化确实是冗余的,几行代码跑完就扔,完全没必要搞 UI、打包、配置管理、日志这些。
工程化不是为了写代码的人,而是为了用功能的人。工程化是“利他”的,工程化的价值,恰恰体现在“后续需要”的那些场景里:
1. 用户不是自己
- 自己写代码时,变量名、函数顺序、报错信息都在你脑子里。但换一个人,直接改代码的门槛就陡增。
- UI 和配置模板的存在,把“编程问题”降级为“操作问题”,让领域专家(比如设计师、产品经理)也能用工具,而不必理解代码逻辑。
2. 需求会膨胀
- 今天的需求“生成一张这样的图”,明天可能需求就变了
- 工程化的配置管理(如 JSON/YAML 模板、数据库持久化)天然支持这种组合爆炸的需求。而硬编码的脚本一旦需求分叉,就会演变成“复制粘贴改参数”的泥潭。
3. 环境会失控
- 工程化通过打包,把“运行门槛”从“配环境”降级为“双击图标”。
4. 长期成本
- 直接改代码的“高效率”是一次性的:第一次写很快,但每次需求变更都要重新读代码、找参数、改逻辑。
- 工程化前期慢,但后续变更通过配置化、插件化、自动化,可以让每次增加都是线性的,不需要考虑那些外挂的逻辑
5. 心理门槛
- 工程化的日志、配置模板、版本管理、撤销操作(比如 UI 的“重置”按钮)能显著降低这种心理负担。
这个逻辑其实和评估事情是否要代码化一样,使用频次决定了收益。换而言之,如果直接做事效率有时比代码化更好,工程化也并非优于代码化。不是越上级越好,而是越适合越好。
需要评估做的成本是否大于收益。一年做10来次的事情,脚本化的必要都没有,更不用说工程化了。