软件设计的两句箴言:降低维护成本与系统复杂度的核心原则

本文探讨了软件设计的核心原则,强调降低维护成本比降低实现成本更重要,且维护成本与系统复杂度成正比。通过实例和讨论,展示了如何从这两条原则推导出其他软件开发准则。

软件设计,两句话概括 » 代码简洁性

在软件设计等式的背景下,现在可以将软件设计的主要原则简化为两句话:

降低维护成本比降低实现成本更重要。维护成本与系统的复杂度成正比。

差不多就是这样。如果你对软件设计的了解仅限于这两条原则和软件的目的,你就可以推导出软件开发的所有其他通用原则。

  • Max

评论

Mark Castillo 说: 2010年5月13日下午1:01
嘿嘿……我还在寻找实现和维护零成本的原则。也许这里可以有一个基本原则……“零成本是无法实现的”。

回复

Wanderson Santos 说: 2010年5月18日上午5:39
我完全同意,但我们能否将其与敏捷原则(如XP中的“简单设计”)对齐?

回复

Max Kanat-Alexander 说: 2010年5月20日下午3:12
嗯,我并不真正认同任何现有的特定软件方法论。所以,如果有人想说“哦,这听起来有点像XP的某个原则,可以这样与之配合”,并且这对某人有帮助,那很好。但如果目的只是因为XP存在,而有人认为一切都应该符合XP,那么我认为这并不太好。通常,那些希望将所有东西都塞进他们特定软件方法论的人,个人会有所获益——例如,他们是该方法的顾问,或者他们写了一本关于它的书,想卖更多书。并不是说卖书或当顾问有什么问题。但仅仅因为个人获利而推广一套想法是有问题的。

  • Max

回复

Ape 说: 2010年6月12日上午2:43
我想看看你如何推导出其他原则的一些例子。观察这个思维过程和推理模式会很有趣。

回复

Max Kanat-Alexander 说: 2010年6月12日下午12:36
嗯。好吧,这里有几个简单的例子:

我们知道复杂度会导致更多的维护成本。什么导致复杂度?嗯,我们可以证明导致复杂度的一件事是系统组件的紧密耦合。因此,通过寻找降低复杂度的方法,我们可以推导出松散耦合的原则。

我们想降低维护成本。所以,我们会花点时间观察什么占用了我们的维护时间。修复错误肯定占用了相当一部分时间。那么,如果能在错误出现之前就捕获它们,从而消除错误维护,不是很好吗?通过一些实验,我们可能会推导出自动化测试的想法。

如果你将较低层次的原则追溯到这些较高层次的简洁性,这会更加简单。

它适用于几乎所有的软件开发原则,除了HCI原则,我认为那是一个单独的领域。

  • Max

回复

Todd A » 软件设计两句话 说: 2010年7月15日上午10:41
[…] 这就是我在网页设计中一直争论的,尽管我从未像代码简洁性那样雄辩地表达过:1. 降低维护成本比降低实现成本更重要。 […]

回复

Harald Wellmann 说: 2010年10月27日上午7:36
假设系统中的维护问题数量与其大小成正比,你还需要考虑在较大系统中隔离和修复问题所需的额外时间。

这就是为什么我认为维护成本与系统大小之间的关系不是线性的:

在复杂度分析方面,你的第二句话相当于
m = O(c)

我甚至认为
m = O(c log c)

m = O(c^2)

回复

Max Kanat-Alexander 说: 2010年11月4日晚上11:42
是的,我确实仔细考虑了你的评论,我认为你是对的。一个更数学准确的陈述可能是:维护成本是系统复杂度的函数。

但我担心有些人可能不知道“是……的函数”是什么意思。

回复

Mike W. 说: 2017年9月21日晚上9:41
“维护成本与系统的复杂度成正比。”

我认为这是一个很好的句子;它只是使用了“成正比”的英语含义,而不是数学定义。

为了不打扰数学家,你可以这样说:
“随着系统复杂度的增加,维护成本增加。”

或者如果你不在乎非数学家是否理解你:
“维护成本是系统复杂度的严格递增函数。”

(如果你过多思考最后一句,你会意识到无法数学测量系统的复杂度,但你_可以_简单地检查两个系统并确定它们的相对复杂度。)

回复

Max Kanat-Alexander 说: 2017年9月24日晚上11:15
基本上。

回复

Enrique Dewulf 说: 2012年3月10日下午3:10
我认为热情甚至高于专业技能。没有时间用于枯燥的单调。当然有时间工作。也有时间恋爱。那就没有其他时间了!

回复

软件设计两句话 说: 2015年1月23日上午9:50
[…] 这就是我在网页设计中一直争论的,尽管我从未像代码简洁性那样雄辩地表达过: […]

回复

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计