理论物理的优美在于从少量基本原理(如最小作用量原理)出发推导出整个理论大厦。而在软件设计领域却充斥着林林总总的"最佳实践". 太多的规则只会意味着没有规则。软件设计领域的现状说明这个领域还处于非常稚嫩的阶段,应该从其他领域借鉴更多的知识。在我前面的blog中已经说明了在软件中的一些具体的分析技术。但如何有效的应用这些分析技术,我们还需要一些指导性的理论框架。如果把软件设计放在更加广泛的系统工程的背景下,一个合适的支配性原理应该是最小复杂性原理。即在软件分析过程中我们所作的一切,无论是面向对象分析,基于工作流的分析等等,其目的都是尽量降低系统构建的复杂性。只要能够有效降低系统构建的复杂性,那所采用的方法和所建立的模型就是好的。复杂性是唯一的度量,而不是是否符合某人的观点,是否采用流行的技术等(当然,采用流行技术往往意味着降低了和其它系统交互的复杂性)。
李小龙说:简单是美。但是否最简单的就是最好的?科学界对此却有着否定的结论。关于复杂性的一个很深刻的基本事实是,复杂性是分级的,不同复杂性层次的事物有着本质的差异,不能期待一个较低复杂性的方法能够解决一个更高复杂性层次上的问题。所以Einstein说:make everything as simple as possible, but not simpler。复杂性级列的存在意味着,随着我们获取到更多的信息量或者因为系统自身的发展,当我们所建立的系统的模型沿着复杂性级列演化的时候,我们所提出的解决问题的方案也必须作相应的演化。即我们提供的不是一些固定的解决方案(solution), 而必须是一个完整的策略(strategy)。这样我们就不是孤立的看待一个问题, 而是要看到它的过去,现在和未来。
在作分析的时候,我们都知道"从一般到特殊,从特殊到一般",但如何科学的,有步骤的去做呢? 我从等离子体物理的BBGKY Hierarchy中学到了一个基本的分析框架: 级列理论.这个理论首先定义了一个最普适的模型:气体由N个完全相同的原子组成, 其动力学由N个互相耦合的Newton力学方程来描述。理论的第二步是从最极端的简化开始,假设所有的原子之间不存在相互作用,即假定原子之间是相互独立的。则得到Vlasov方程。理论的第三步考虑系统的复杂性逐渐增加,当气体密度较高,必须考虑分子之间两两碰撞的时候,得到Boltzman方程。当需要考虑更高阶的相互作用的时候,我们得到关联动理学方程,如此继续下去建立一个无穷级列。
抽象一些地说,该理论包含如下内容:
. 建立能够描述所有情况的最广泛的模型M0, 该模型定义系统的边界
. 建立一个包含最少假设的最简单的模型Mn,该模型作为求解的基础和基本的参照。
. 建立一个从Mn到M0的复杂性逐渐增加的模型级列,确保在每一个复杂性的层次上,都存在着对系统有效的建模,而且在求解高阶问题的时候,可以参考较低阶问题的解。
如何从这种无穷级列中做出选择,必须根据具体应用情景而定,Vapnik在其统计学习理论中详细描述了这种求解策略:
综合代价 = 训练数据与模型预测之间的偏差 + 模型自身的复杂性
学习 = minimize[综合代价]
即在能够解决问题的方案中选择最简单的一个。
李小龙说:简单是美。但是否最简单的就是最好的?科学界对此却有着否定的结论。关于复杂性的一个很深刻的基本事实是,复杂性是分级的,不同复杂性层次的事物有着本质的差异,不能期待一个较低复杂性的方法能够解决一个更高复杂性层次上的问题。所以Einstein说:make everything as simple as possible, but not simpler。复杂性级列的存在意味着,随着我们获取到更多的信息量或者因为系统自身的发展,当我们所建立的系统的模型沿着复杂性级列演化的时候,我们所提出的解决问题的方案也必须作相应的演化。即我们提供的不是一些固定的解决方案(solution), 而必须是一个完整的策略(strategy)。这样我们就不是孤立的看待一个问题, 而是要看到它的过去,现在和未来。
在作分析的时候,我们都知道"从一般到特殊,从特殊到一般",但如何科学的,有步骤的去做呢? 我从等离子体物理的BBGKY Hierarchy中学到了一个基本的分析框架: 级列理论.这个理论首先定义了一个最普适的模型:气体由N个完全相同的原子组成, 其动力学由N个互相耦合的Newton力学方程来描述。理论的第二步是从最极端的简化开始,假设所有的原子之间不存在相互作用,即假定原子之间是相互独立的。则得到Vlasov方程。理论的第三步考虑系统的复杂性逐渐增加,当气体密度较高,必须考虑分子之间两两碰撞的时候,得到Boltzman方程。当需要考虑更高阶的相互作用的时候,我们得到关联动理学方程,如此继续下去建立一个无穷级列。
抽象一些地说,该理论包含如下内容:
. 建立能够描述所有情况的最广泛的模型M0, 该模型定义系统的边界
. 建立一个包含最少假设的最简单的模型Mn,该模型作为求解的基础和基本的参照。
. 建立一个从Mn到M0的复杂性逐渐增加的模型级列,确保在每一个复杂性的层次上,都存在着对系统有效的建模,而且在求解高阶问题的时候,可以参考较低阶问题的解。
如何从这种无穷级列中做出选择,必须根据具体应用情景而定,Vapnik在其统计学习理论中详细描述了这种求解策略:
综合代价 = 训练数据与模型预测之间的偏差 + 模型自身的复杂性
学习 = minimize[综合代价]
即在能够解决问题的方案中选择最简单的一个。