Agent X-Ray
RuntimeNotesAbout
Notes/产品经理/AI native 软件工程教程/第6章

工程问题与科学问题的区别?

7 分钟 · 更新于 2026-09-01

核心观点 科学关注“什么规律成立,以及凭什么相信它”,工程关注“在给定目标和约束下,怎样把结果可靠地交付出来”。二者不是高低之分,而是目标、证据和完成标准不同;优秀工程会主动使用科学方法处理未知问题。

同一个现象,可以提出两类问题

假设团队准备上线一个 AI 代码审查助手。

科学式问题可能是:

  • 在固定数据集上,模型识别空指针风险的准确率是多少?
  • 提示词中加入调用链上下文,是否显著提升召回率?
  • 不同模型在同一评估集上的误报差异是否稳定?

工程式问题则可能是:

  • 审查结果应在多少秒内返回,才不会阻塞合并流程?
  • 误报达到什么程度时,开发者会开始忽略提示?
  • 私有代码能否发送到外部模型?
  • 模型不可用时,流水线应该失败、降级还是跳过?
  • 每月预算有限时,哪些文件值得进入深度审查?

前一组问题试图建立可重复验证的认识,后一组问题要在性能、成本、安全、体验和维护之间做出选择。它们可能使用相同的数据和实验,却服务于不同的完成标准。

科学问题:建立可检验的解释

科学研究通常从现象出发,提出假设,再通过观察或实验判断假设是否得到支持。

一个科学问题通常关心:

  • 概念能否被清楚定义和测量;
  • 条件变化时,结果是否稳定;
  • 结论能否被他人复现;
  • 是否存在更合理的替代解释;
  • 当前证据支持到什么程度。

科学工作的产物不一定是一个立即可用的系统,也可能是一套模型、规律、数据或对不确定性的更准确描述。

“证明绝对正确”并不是所有科学研究的现实状态。许多结论是当前证据下最有解释力的认识,未来可能被新数据修正。科学的关键不是永不变化,而是结论能够接受公开检验。

工程问题:在约束下交付结果

工程从目标和现实条件出发,利用已有知识设计可运行的人造系统。它不仅要问“能不能做”,还要问“是否值得这样做、能否按时完成、失败是否可控”。

工程问题通常同时包含:

  • 目标:要改善什么结果;
  • 约束:时间、预算、法规、技术栈、人员与历史系统;
  • 权衡:性能、成本、质量、速度和复杂度之间如何取舍;
  • 风险:哪些失败不可接受,哪些可以通过降级处理;
  • 生命周期:如何部署、监控、维护、升级和退出。

因此,工程方案很少只有一个。两个方案都可能正确,只是优化目标不同。

例如,小团队要在两周内验证一个内部流程,单体应用和托管数据库可能最合适;同一业务进入高并发、多团队长期协作后,模块边界、容量规划和故障隔离就会变得重要。方案没有改变物理规律,改变的是目标权重和约束条件。

两者最重要的五个差异

1. 起点不同

科学往往从未知现象或理论冲突出发;工程从需要实现的功能或需要改善的结果出发。

2. 完成标准不同

科学结论需要经得起证据检验;工程结果需要达到验收指标,并能在真实环境中运行。

3. 对上下文的依赖不同

科学希望找到跨场景仍成立的规律。工程决策往往高度依赖具体环境,同一做法换一个团队、阶段或风险等级就可能不再合适。

4. 对权衡的态度不同

科学实验会尽量控制变量,以识别因果关系;工程必须同时处理多个变量,并接受“足够好但并不完美”的解。

5. 对失败的处理不同

科学实验失败也可能提供新知识。工程失败如果影响资金、安全或用户权益,就必须提前设计隔离、降级和恢复机制。

“最佳实践”为什么不能直接照搬

所谓最佳实践,通常是某类团队在一组常见条件下反复验证后形成的高成功率做法。它是一份经验压缩包,不是脱离上下文的定律。

评估一项实践时,可以追问:

  1. 它最初解决什么问题?
  2. 它假设团队具备哪些能力和基础设施?
  3. 它牺牲了什么,以换取什么?
  4. 我的项目是否处于相似阶段?
  5. 如果不采用,最可能发生什么?

例如,微服务可以改善大型组织的独立部署与责任边界,也会引入网络故障、数据一致性、观测和运维成本。对一个尚未验证需求的小产品,先拆成十个服务可能不是“更专业”,而是提前支付尚未产生收益的复杂度成本。

正确做法不是拒绝最佳实践,而是理解它成立的条件,再决定采用、简化还是延后。

工程中的未知,应当分类处理

工程项目经常混合“已知如何实现”和“不确定是否可行”两类内容。如果不做区分,团队容易把研究任务当成普通排期,也可能把已有成熟解的问题反复实验。

可以把未知分成三类。

事实未知

例如某 API 是否支持批量操作、某版本是否修复了安全漏洞。处理方式是查询可靠文档、源码或实际环境。

规律未知

例如增加上下文是否真的提高代码审查质量。这类问题需要设计对照实验、定义指标并收集数据。

决策未知

例如准确率提升 3%,但成本增加一倍,是否值得采用。它不能只靠实验回答,还需要业务目标、风险偏好和资源约束参与判断。

把未知分类后,团队才知道应该查资料、做实验,还是召开决策评审。

AI 给工程带来的特殊不确定性

AI 系统不是普通的确定性函数。把模型用于软件工程时,需要把以下特征当成设计输入,而不是上线后才发现的异常。

输出具有概率性

同一输入可能得到不同结果。关键流程不能只测试一次成功样例,而应使用固定评估集、多次运行和明确阈值观察稳定性。

上下文容量不等于有效理解容量

模型能够接收很长的上下文,不代表每条信息都会被同等重视。无关内容、重复规则和相互冲突的文档会稀释关键信号。

工程上应优先提供与当前任务相关的上下文,并让代码、规范和数据保持单一可信来源,而不是无差别地把所有资料塞给模型。

知识存在时间和环境边界

模型可能不了解最新版本,也无法凭空知道企业内部接口和实时状态。涉及版本、价格、法规、生产配置或线上代码时,应通过工具查询真实来源。

自信表达不代表经过校准

模型可能在证据不足时仍给出完整答案。因此,重要事实要能追溯到文档、代码、数据或实验结果,不能把语言流畅度当成可信度。

模型没有天然的项目连续性

一次会话中的理解不会自动成为团队长期记忆。需求、决策、接口和操作历史需要由版本控制、文档、测试和可查询记录保存。

模型可能优化“完成任务”,而非真实目标

如果提示只要求“修复测试”,模型可能修改测试来让它通过;如果只要求“减少错误”,它可能隐藏错误提示。验收标准必须描述业务结果和不可违反的边界,而不只是表面指标。

用科学方法降低工程风险

工程不是凭经验拍脑袋。面对高不确定性时,最有效的做法往往是把大决策拆成可验证的小假设。

以“引入 AI 客服摘要能否降低处理时长”为例,可以这样推进:

  1. 定义目标指标:平均处理时长、一次解决率和客服采纳率;
  2. 明确不可退化指标:投诉率、隐私泄露和错误承诺次数;
  3. 提出假设:自动摘要能减少客服阅读历史对话的时间;
  4. 设计小规模实验:选择有限业务线,保留人工对照组;
  5. 收集证据:不仅看平均值,还看异常案例和不同场景差异;
  6. 做工程决策:根据收益、风险、成本决定扩大、调整或停止;
  7. 建立运营机制:上线后持续监控模型漂移和失败模式。

科学方法帮助我们认识因果和边界,工程方法负责把这些认识转化为可靠系统。

一套工程决策模板

面对架构、工具或 AI 方案选择时,可以使用下面的顺序。

1. 写清目标

用可观察结果描述成功,而不是先写技术名称。例如“把订单查询 P95 延迟降到 800ms 以下”,而不是“引入缓存”。

2. 列出硬约束

哪些条件绝不能违反:数据不能出境、必须兼容旧接口、两周内上线、只能使用现有数据库等。

3. 标记未知

区分事实未知、规律未知和决策未知,为每类未知选择查询、实验或评审方法。

4. 比较候选方案

至少比较收益、成本、风险、可逆性和长期维护负担。不要只比较功能数量。

5. 优先可逆选择

信息不足时,先采用容易替换、影响范围小的方案,并设置重新评估的时间点。不可逆或高代价决策则需要更多证据。

6. 定义验收与退出条件

提前写明何时算成功,出现什么情况必须停止,以及如何回滚。没有退出条件的试点很容易永久变成无人负责的生产系统。

7. 记录理由

保留当时的目标、约束、证据和取舍。未来环境变化时,团队才能判断是方案错了,还是原有条件已经改变。

结语

科学问题帮助我们获得更可靠的认识,工程问题要求我们在不完整信息和现实约束中承担交付责任。科学追求可检验,工程追求可用、可控与可持续。

理解这个区别之后,我们就不会把某个框架、流程或 AI 工具当成普遍正确答案,也不会把“项目能运行”误认为工程已经完成。真正成熟的做法,是在未知处设计实验,在已知处遵循工程纪律,在取舍处明确责任,并让每个重要结论都拥有与风险相匹配的证据。


  • 为什么 Vibe Coding 不可以?
  • AI 时代最重要的能力是什么?
  • 构建一个新系统的设计和思考

本章目录
科学问题:建立可检验的解释工程问题:在约束下交付结果两者最重要的五个差异“最佳实践”为什么不能直接照搬工程中的未知,应当分类处理AI 给工程带来的特殊不确定性用科学方法降低工程风险一套工程决策模板结语Related Documents
苏ICP备2025204887号-2