软件设计的两句箴言
在软件设计等式的背景下,现在可以将软件设计的主要原则简化为两句话:
- 降低维护成本比降低实现成本更为重要。
- 维护成本与系统的复杂性成正比。
这就是全部了。如果你对软件设计的了解仅限于这两条原则和软件的目的,你就可以推导出软件开发的所有其他通用原则。
-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
[…] 这就是我在网页设计中一直争论的,尽管我从未像Code Simplicity那样雄辩地表达过: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
[…] 这就是我在网页设计中一直争论的,尽管我从未像Code Simplicity那样雄辩地表达过: […]