Posted on 2007-03-18 23:05
canonical 阅读(1642)
评论(0) 编辑 收藏 所属分类:
设计理论
软件这个领域中传统上占优势的是自vonNeumann以降的数学视角,计算问题是其思想内核,而函数式语言无疑是其比较贴切的表现。但是仅有数学,我们对于世界的认识是不充分的。有这样一个笑话。烧一壶水的完整步骤如下:1.向空壶中注满水 2.放到火炉上 3.烧到冒泡。现在有半壶水,求解烧水的步骤。数学家的回答是直接把半壶水倒掉,然后宣称问题已经解决,因为它已经被归结为第一个问题。实际上数学的视角直接限制了某些命题进入研究者的领域。现在业界占主流的面向对象技术,并不像是理论界的自然创造,它的思想来源更像是来自于开发窗口系统的工程实践。
http://gagne.homedns.org/~tgagne/contrib/EarlyHistoryST.html.
面向对象技术的核心是描述问题,它试图实现业务概念和业务关系在程序中的直接表达,所谓更贴近人的思维方式。但是从面向对象的实际操作过程我们即可得知,这里所谓的贴近只是贴近人们的常识而已。常识是有意义的,但也是浅薄的。当程序功能变得愈加复杂,程序的结构不再那么直观的时候,我们从面向对象理论得到的支持并不如最初它宣称的那样的巨大。早期面向对象技术所提出的枚举系统中所有名词和动词的设计方法现在看起来无疑是非常的幼稚。如何确定一个系统中到底需要定义多少个对象,以及如何确定它们之间错综复杂的交互关系,这些并不是通过我们的业务常识能够确定的。
在具体的,特定的常识与抽象的数学之间,存在着所谓的物理学。常识总是和一定的“有意义”的场景绑定着,可以直观的理解。而数学则蒸馏出一些纯粹的符号,试图与所有预置的意义划清界线。物理学是折衷主义的,或者说是非常狡诈的。它选择了只在需要的时候诠释。在物理学的推导中,大量的中间过程都是数学性的,难以寻找到明确的物理含义的,但是我们无视它,只对某个最终结论加以解释。事实就是公式千千万,但是我们却只对其中的某些说:嗯,这里面有物理。与此对应,在软件开发中,将直观的业务需求映射到通用的程序语言实现时并不是那么直接的,在这之间可以存在着超过一般人想象的与特定业务无关的厚重的技术层。在这个层面中可以定义出非常复杂的交互模式,并在不同的特定场景下将其诠释为不同的业务应用。这也正是平台技术赖以生存的基础。
丰富的物理学的根基在于丰富的物质结构,它的核心是动力学。实际上单量子体系并不如想象中那样难以研究,这个领域充斥着粗鲁的线性近似,而它们的预测精度却都难以想象的高。真正的复杂性来自于简单元素所构成的复合结构,以及这些结构之间的相互作用。随着ROR这样的动态语言框架的流行,很多人把它们的成功归结为语言特性的增强,这在我看来并不是富有成果的方向。诚然,更多的语法糖(syntax sugar),更多的动态性可以降低我们构建某些复杂结构的代价,但是这种降低最多是减少一两倍代码录入量,而绝不可能是数量级上的影响。对于程序开发可以起到决定性作用的是那些复杂的大范围结构,而不是通用语言本身所提供的那些抽象的简单的局部结构本身。当然,一般人大概很少有能力做出超过一定难度的创造,一般都只是依赖现有的语言,现有的框架以直白的方式实现功能,因此很难想象可以在语法特征更少的java中轻易实现超过ROR的开发便捷性。
通用语言的发展必然是有极限的, 也必然是贫瘠的, 因为它无法利用有限场景下的信息. 而DSL(Domain Specific Language)将注意力集中在某个特定的领域(domain)中,便可以名正言顺的引入非常复杂的语法结构. 这些结构旨在本领域中具有意义,而不用担心超出应用范围后遭到"冗余设计"的诟病. 我无法想像在一种通用程序语言中会规定Witrix平台中BizFlow这样的结构设计,但是作为一种domain相关的语言结构,它的表述却无疑是非常高效的。我相信,随着我们对于程序结构的认识的不断深化, 在DSL所构建的复杂结构空间中可以发展出一些真正有趣的技术.
对于DSL存在着两个常见的误解.一是DSL是存在于特定领域的,因此它是一种受限制的语言,应该在计算能力上弱于图灵机.但其实DSL的核心在于高效的表达,在于直接存在的高阶结构,与它的形式计算能力并无关系.正如物理中Lagrange表述和Hamilton表述在数学上是等价的一样,我们的选择只在于某种情况下某种描述方式会更加方便。这里所玩的游戏更像是概念空间中的拓扑变换。
关于DSL的另一个误解是DSL的表述形式应该接近自然语言.但事实上数学符号和化学公式都是高效的DSL,它们的表达形式甚至内在逻辑都和我们的自然语言相去甚远.我们是否已经完全解决了程序问题,而只是要把这种能力向无知的客户转授?目前在程序编码的过程中我们仍然面临着大量未决的问题,程序员应该是DSL的直接受益者.此外,西人对于语言的认知是偏狭的,因为他们眼中的language只有拉丁语系和日耳曼语系,而不知道这个世界上还存在着不符合西文语法的汉语。按照朱光潜的诗论,西人长时间认为诗是不宜于写景状物的,因为语言是串行的,因而只适于按照步骤叙事,却不了解汉语的自由组合形式和丰富的单字表现力可以轻易捕获微妙的瞬间.