三个因素是软件本质?


作者在文章中提出了三个因素,用以解释软件的特性,并对软件开发中遇到的困难进行了深入的思考。

以下是文章的主要内容概述:

三个因素(Triad)

1、软件处于边缘状态(Liminal State):
软件介于物理世界的限制和完全自由的幻想世界之间:

  • 硬件对软件施加了一些硬性约束(如有限的内存和CPU速度),
  • 而软件则受到较少的硬性约束。

然而,如果我们尝试让软件处理每一种可能性,它可能会过于复杂且充满错误。因此,我们对软件施加了许多软性约束以简化开发和使用过程。

2、循环规范问题(Circular Specification Problem):
确切地知道我们要构建的软件需要完全规范它。但是,一个完整的抽象规范通常至少与创建软件本身一样工作量巨大,甚至更多。

因此,软件开发几乎总是规范的行为:我们必须创建软件才能规范它。

这意味着:

  • 我们几乎不能在构建之前或构建过程中真正知道我们正在构建的软件是什么。
  • 这导致了个人之间以及个人与他人之间关于应该构建什么的软件的误解和沟通障碍。

3、观察者效应(Observer Effect):
观察软件运行会改变我们对软件应该如何的看法。

随着软件的构建,我们发现了挑战和机遇,通常两者一样多:

  • 我们经常觉得有必要将我们对世界的改变了的观点纳入到软件的创建中。
  • 然而,创建软件的人通常不是观察者。

当我们创建软件时:
  • 我们通常有一个非常具体的用例。
  • 当其他人看到软件时,他们会提出我们未曾考虑的其他可能的用例,其中一些需要对软件进行更改。

作者认为这三个因素虽然不能告诉我们关于软件的所有事情,但提供了很多有用的信息。这些因素之间的相互作用特别有趣,例如观察者效应常常是循环规范问题的起因;循环规范问题为观察者效应提供了大量机会。

举三个不同的例子来让您体会一下:
1、通过了解软件处于幻想与现实之间的边缘状态,我发现有可能在脑海中澄清哪些是硬约束,哪些是软约束。这在两个方面都很有帮助。有时,我让人们相信,看似硬约束(例如,从根本上说似乎是单线程的软件)其实不仅是软约束,而且可以相对容易地消除。有时,我不得不指出,一些 "明显 "的软约束(通常是从其他软件继承下来的约束,但并不总是这样)是很难去除的。

2、循环规范问题和观察者效应都意味着软件开发中某种程度的迭代是不可避免的。一旦人们接受了这一逻辑,就必须接受软件开发过程中会出现摩擦(即意想不到的低效率)的事实。当我为一个软件规划未来时,我预计会遇到持续不断的摩擦,而且我会尽量考虑到这一点。让我感到惊讶的是,很多组织都认为可以严格遵循软件的总体规划。

3、我曾经接待过一个组织,他们发现自己的软件存在严重的性能问题。他们正在实施一项技术复杂、成本高昂的性能修复方案,并希望得到建议。

我深入研究了技术细节,但发现我并不确定所建议的性能修复方案能起到多大作用。我怀疑观察者效应被忽视了,但我与用户的第一次谈话毫无结果,因为他们已经被告知并相信,建议的修复方案会让他们的生活变得更好。

最终我意识到,我需要与用户坐下来,看看他们当下是如何使用软件的,而不管提出的修复方案如何。

很快我就发现,他们面临的真正问题并不是建议的修复方案所要解决的,于是我提出了一个更简单、更便宜的修复方案。

观察者效应是真实存在的,尽管组织忽视了它,观察者自己也曲解了它!

归根结底,我希望通过命名这些因素,并尽我所能解释我对它们的理解,可以帮助那些试图应对创建软件过程中诸多挑战的善意的人们在未来进行对话。即使你不同意这些观点,有一些具体的东西可以提出异议也是有益的!

致谢:感谢 Dan Luu 和 Hillel Wayne 的评论。