跳转到内容

科研与工程的区别

工程的目标是造出能用的东西,科研的目标是产生别人不知道的、可验证的知识。本章讲两者在目标、评价、时间尺度上的差异,以及计算机科学中两者交织的特殊性——很多 CS 研究的"知识"以系统或算法的形式存在。

工程的目标是造出能用的东西;科研的目标是产生别人不知道的、可验证的知识。两者的产出物形态不同:工程的产出是系统、功能或修复;科研的产出是可检验的主张(claim)——在什么条件下、通过什么机制、比什么更好或更差。

系统、代码、数据集在科研中只是证据。同一个 KV cache 优化,工程师问"上线后能省多少内存、会不会引入延迟";研究者问"为什么能省、在什么负载模式下省、代价是什么、这个结论能不能推广"。前者交付一个可用系统就结束了;后者必须把观察提炼成主张,并给出证据链。

维度工程科研
目标满足需求、可靠运行产生新知识、可验证
评价者用户、产品、运维同行评审
评价标准是否可用、性能、成本新颖性、证据是否支撑主张、重要性
时间尺度持续迭代维护一次性的完整论证
失败返工、修 bug也是结果(排除 bug 后的负面结果可发表)

对科研来说,"能跑"不是贡献,"为什么在什么条件下更好"才是。Demo 再炫、代码量再大,如果不指向一个可检验的主张,就不构成研究贡献——这是新手最常见的误区。

计算机科学是少数工程与科研深度重叠的学科:很多 CS 研究的"知识"以算法、系统或数据集的形式存在。系统会议(OSDI、SOSP)的论文本身就是"造出来 + 测出来",构建一个真实系统并诚实测量,就是合格的证据;ML 研究的许多贡献是经验性发现("预训练数据质量比模型结构更关键"),离开大规模工程实践无法获得。

这带来两点:

  • 优势:想法到验证的闭环极短。一个假设可能两周内就能实现并检验,这在多数学科不可想象。
  • 风险:容易把工程量当研究贡献。"我们做了大量优化、很多行代码"不是主张;"在此约束下,瓶颈在 X,因此 Y 类优化有效"才是。写论文、评审、规划工作时都要警惕这个混淆。

判断手头的工作是工程还是研究,问三个问题:

  1. 这项工作回答了什么之前不知道的问题?
  2. 证据能否支撑这个回答?
  3. 这个回答改变了谁的认知?

三个都答不上来,就是在做工程——工程本身没有问题,但应当自知,并决定是否要把它升级为研究(见研究空白与"增量"的边界)。

  • 科研的产出是可检验的主张,系统只是证据
  • "能跑"不是贡献,"为什么/在什么条件下更好"才是
  • CS 是少数工程与科研高度重叠的学科