返回

文章详情

“软件工程”并不是工程

Hacker News2026年7月6日 11:42

"计算机科学"不是科学,而"软件工程"不是工程。更新于2005年3月8日。 我参与过很多关于"软件工程"的辩论,也许太多了。关于制作软件的"正确方式"有很强烈的意见,但没有一种简单的方法来客观地比较这些意见,以解决长期以来的争论,这让人感到沮丧。我一直在思考和研究为什么会这样,并认为我终于能够阐明一个答案。如果软件学科是"科学",那么应该有科学过程可用于解决争论。但是似乎它失败了。有些人建议,它实际上是"工程",而不是"科学"。但是工程无非是应用科学。例如,在工程中,桥梁设计长远来看是经过现实测试的。即使在短期内,桥梁模型也可以在模拟现实的环境中进行测试。模拟是通往现实的捷径,但如果我们希望它们有用,仍然必须与现实相关联。如果一座桥最终失败,并且失败不是由于施工或材料缺陷,那么剩下的就是桥梁工程需要负责。工程师的模型必须与物理和化学的规律紧密结合。无论工程师是否希望,都会与这些规律结合在一起。但是,我们在软件设计中大部分时候并没有这种情况。我们有需求,比如输入和输出的外观以及运行时约束,这些约束决定了某个操作所允许的最大时间。但在这些要求之间还有许多难以用客观指标衡量的内容。大多数常见争论中的技术和范例通常可以满足要求。这是因为它们是"图灵等价"的,基本上意味着它们可以实施任何明确定义的算法,只要有足够的时间和资源。底线是,交付所需的结果并不是一个有区别的因素;它们都可以做到这一点。有一些专业领域,例如人工智能,答案不一定是"固定的"。"答案"的判断更多的是在一个连续的尺度上。在这些情况下,不同的算法被比较,结果被排名。例如,可以执行类似实验室老鼠迷宫测试的度量来评估性能。然而,虽然一个给定的算法被认为是更好的,这并不能告诉我们它是否是"正确的"或唯一可能的算法。它可能是在某一时刻"已知的最佳",但除此之外,几乎无法得出进一步的结论。正如后面所阐述的,我们不知道我们不知道的事情。一些争论中的选项可能运行得更慢,但这通常不是争论的关键点。有些人会辩称,更高的开发者生产力弥补了较慢的速度(或对更大机器的需求),或者在未来几十年中,芯片会快到不再重要。开发者生产力可能是另一个可测量的指标,但仍然难以捉摸,因为变量太多。我稍后会回到生产力的问题,因为这确实是一个重要问题。那么,如果物理工程确实是科学(更确切地说是“应用科学”),但软件设计并不遵循相同的模式,那么软件设计是什么呢?也许它是数学。数学并不固有地与物理世界相绑定。有些人有争议地认为它是绑定的,因为在假设或真实的替代宇宙中可能不一定有效,而这些宇宙的规则比我们能想象的要奇怪,但在实际目的上,我们通常可以认为它独立于已知的物理、自然、生物等规律。数学最有用的地方在于,它可以创建几乎无限的模型。这些模型可能反映已知(或预计)的自然法则,或者数学家凭空构造出来的法则。数学具有创造另类宇宙和现实的神奇特性。唯一的规则是,这些模型必须具有内部一致性:它们不能自相矛盾。(好吧,也许它们可以,但如果它们这样做,通常会变得没什么用,就像总是崩溃的程序一样。)软件与数学非常相似,并且根据某些定义,可能算作数学。我们可以使用软件创建替代现实的事实在游戏世界中得到了体现。游戏通过创造虚拟现实来娱乐,反映实际现实的不同程度,但以希望的有趣方式弯曲现实。一个流行的例子是《模拟人生》,这是一个模拟社会中社会互动的游戏,而不仅仅是典型"动作"游戏中的物理动作。大多数游戏倾向于借用物理世界的某些方面或法则。这是因为购买游戏的人更可能购买他们可以以某种方式相关的东西。但是,制作与物理世界几乎没有或完全没有关系的世界也是可能的。例如,可以创建反重力丰富的世界。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡