软件是必然变化的,变化是常态;有变化就需要维护,随着时间的推移,维护成本必然会远远超过开发成本,占据整个软件成本的⼤半,因此,在软件开发中,降低维护成本是重中之重的事情,而维护成本正⽐于系统的复杂程度,因此想要降低维护成本,系统就应当追求简单而清晰的设计。
简洁,是我们所追求的。代码越简洁,未来做改动的难度就越低,测试也会越准确,对于软件性能也就会越有把握。但简洁并不等于少,⽽是没有多余的东⻄,同时,简洁也是相对的,因为变化从来都是不可能避免的,⼀味杜绝是错误思路,唯⼀可⾏的⽅式是将变化的范围限定在⼀个尽可能⼩的范围内,换句话说就是好的设计能尽可能适应外部尽可能多的变化,同时软件⾃身的变化尽可能的少。
程序员也是设计师,与其他⾏业⼀样,软件设计本身也是有科学的,尽管,科学并不等于全知全能。但依然是有章可循的,它们可以被认识,可以被理解。永恒不变的,也是最基本的事实,⽽且确实可⾏。只是很可惜,当今的软件开发⾮常复杂,整个软件⾏业的整体状态是⽅法众多,⽽且存在着彼此的⽭盾却各有道理的观点,这就说明整个软件管理的基本规律尚未被认识,也就是说真正的科学是缺失的。所以,现实中,技术决策的好坏,更多的是来源于主要决策者的经验、智⼒与胆识。
——水门写于杭州(2017-09-03)