posts - 176, comments - 240, trackbacks - 0, articles - 7

软件与建筑

Posted on 2007-09-09 20:00 canonical 阅读(808) 评论(0)  编辑  收藏 所属分类: 设计理论
  建筑学的隐喻在软件业中一直很流行。开发软件和建筑楼房从某种意义上说都是一种构造过程,而建筑学的成熟无疑让很多软件工程师非常羡慕。Design Pattern的始作俑者坦承受到建筑学著作的影响更是让一些人对建筑学的精深顶礼膜拜不已。不过,建筑决不只是表面上的形象/功能设计,也决不是民工就可以干的活计,在现代建筑设计背后是土木工程的蓬勃发展。正是框架结构的出现和材料工艺的进步才使得批量生产的大型现代建筑成为可能。
  虽然建筑学有着它不为人知的复杂性的一面,但是与软件开发相比,它也有着简单贫瘠的一面。现在架构师言必称设计模式,但是估计很少有人读过Christopher Alexander的原著"A Pattern Language"。在Alexander的概念中,所谓的模式"describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice". 关键在于这些模式在建筑学中往往映射为某种独立的原子化的实体(entity), 因此可以把它们作为一种语言的基础组分,构成所谓的Pattern Language. 例如现在要开发一个门廊,你可以从"私家的沿街露台(140)"开始,在"有阳光的地方(161)"做成一个"有围合的户外小空间(163)", 选择"6英尺深的阳台(167)", 保留"小路和标志物(120)", 注意"天花高度变化(190)"和"角柱(212)"的位置,在"各式座椅(251)"的旁边安排一个"高花台(245)". Alexander共定义了253个模式,括号中的便是模式的编号。很明显,物理空间的不可重入性直接规范了建筑设计空间的有限性。
  在软件设计中,类似VB/Delphi的可视化界面设计的操作过程与此类似:理想情况下界面开发基本就是用各种界面元素填满一个Form的过程。但是软件的一个本质复杂性在于它的基本结构单元是函数,而设计空间中同一个功能点对应的实现函数的个数和形式并不存在有限性的约束,函数的组合形式也不是线性延展的。建筑基本上依赖的是静力学,而软件无疑需要用动力学来刻画。即使是界面开发,我们所关注的也决不仅仅是静态摆放问题,而更重要的往往是界面元素动态相关和动态变化的问题。
  在Web开发领域,一直有人鼓吹模仿VB/Delphi的快速开发工具,但是我并不认为这其中的设计哲学是与软件的本质相匹配的。软件中所蕴含的无限的动态变化不应该仅仅通过有限的配置过程来应对,我们需要更加强大的结构抽象和结构构建手段。

只有注册用户登录后才能发表评论。


网站导航: