今天才明白什么叫做「完成功能」和「专业工程化的实现」。
前者是"为了完成任务的代码",而后者是"可长期维护的工业级代码"。
比如需要做一个"凸包"功能:
"完成功能"就是理解凸包概念,找到对应的凸包算法(增量法/Graham/单调链等),选择其中一种算法复杂度合适的算法,添加到业务中。
"专业工程化的实现"不仅要实现上述步骤,而且会进一步:
1. 算法选型阶段:建立算法选择矩阵,对比不同算法的时间复杂度、空间复杂度、边界条件处理难度
2. 原型验证时:创建独立可执行的算法模块,编写示例程序验证正确性
3. 性能压测:构造不同规模(尤其是极端规模)的测试数据集,评估内存占用和计算耗时
4. 集成阶段:设计清晰的API接口,定义标准化输入输出格式
5. 单元测试:覆盖正常案例、边界案例(如共线点、单点集)、异常输入(如空数据集)
6. 日志监控:添加关键路径的耗时日志,异常输入的告警机制
7. 文档建设:编写模块说明文档、API 调用示例、算法参考文献索引
8. 错误处理:定义标准错误码,实现输入预校验机制,预防脏数据导致系统崩溃
9. 可扩展性:通过策略模式封装算法,便于后续新增其他凸包算法
10. 依赖管理:明确算法模块的第三方依赖及其版本控制
工程化思维其实是系统性思维的一种具象,体现在:
- 可维护性:代码遵循 SOLID 原则,保持模块间低耦合
- 可观测性:通过日志系统追踪算法执行过程
- 可持续性:建立自动化测试流水线,确保后续迭代不破坏既有功能
- 协作性:代码符合团队规范,关键逻辑有清晰注释
- 安全性:对输入数据做防注入处理,避免算法被恶意利用