破解软件设计的复杂性

来源:互联网 发布:linux重命名文件命令 编辑:程序博客网 时间:2024/04/28 16:34

                          破解软件设计的复杂性

       在很多人眼里,设计可能会显得很神秘。其实设计和解题是一回事,只要把其中的规律弄清楚了,就能顺应规律的指引自然而然的得出结论。只不过任何事情都是由前提条件的,设计的前提就是方法论的指导加上广泛的领域知识(不是指业务领域,对软件设计来说就是软件解决方案)。生活中要做各种各样的选择,设计也是。

与软件相关的设计,不管是架构方面、GUI设计还是最终代码,都是在和复杂性抗争。人类大脑毕竟能同时处理的事件并不多,所以要借助于一些科学的工具来帮组我们理清复杂的关系,各种各样的设计方法学也就应运而生了。

1、分而治之。这是算法学上的重要议题,它的核心思想是化解。依据一个总体标准,把复杂的事物化解为小的概念的集合。这些小的概念之间可能也会有各种各样的关系存在,这个关系就是分解标准的一个体现。

2、层次结构。很多事物都呈现出层次结构,这正好适合我们的思维习惯。它和分而治之有相似的地方,都是化整为零的思维方法。我们在分析复杂事物的时候多是结合分而治之和层次划分,这样慢慢的把一个复杂的整体描画出来。实际的过程多半是一种递归的模式,因为实际的复杂性也会在某种层面上呈现出递归的特性。

3、自顶向下/自底向上。这两种方法给出的是一种思维的方向,也就是说,我们对一些系统可以采用分解的办法(自顶向下),对另一些系统可能会采用整合的办法(自底向上)。自顶向下的核心思想是分解,自底向上的核心的聚合。

有了这些大的思维方向,再结合一些实用工具(各种各样的图和符号),就能在复杂性面前不至于惧怕了。科学的东西,总是要用科学的方法。设计就是先把问题弄复杂,再把问题弄简单。第一个阶段是模型的建立,一个越来越丰满的原模型就预示着越来越复杂的问题被搞定。第二个阶段是映射,把复杂的模型映射到解空间。当每个细节都被映射过去的时候,问题已经简单化了。