MIT风格注重界面的简洁,“新泽西”风格注重实现的简单。⋯⋯ 虽然遵循MIT风格更有可能达到更好的抽象度,但是(较差的)“新泽西”风格的软件更容易传播。假以时日,“新泽西”风格的软件更能吸引人们的注意力,从而得到更大的改进。良莠因此对调。
——《The Art of UNIX Programming》
HTML替代plug-in的趋势也许意味着“新泽西”模式再一次战胜MIT模式。由于HTML最初低下的表现力(expressiveness),各大公司并不屑于把HTML标准作为宝贵的财产牢牢的控制,而是漫不经心把标准交给国际组织,形成了HTML/CSS/JavaScript更为开放的姿态。
HTML的接口比plug-in技术更为复杂,HTML的数据、表示、代码相互混杂的接口比plug-in的编程脚本语言难用的多。复杂的接口意味着意味着更少的操作原语(primitive)[1],以及原语和底层实现能更直接的对应。这意味着,首先产生歧义的机会更少,其次接口的实现更为容易,用户能够更快的得到参考实现作为进一步消除标准歧义、统一接口行为的依据。
从更广的视角来看,软件业解决一个特定问题时选择的接口复杂度的过程呈现一种在震荡中趋于稳定的模式。最初由于技术不成熟选择过于粗糙的复杂接口,而后开始进行抽象简化接口的努力。简化使用的需求推动寻求更高的抽象层次,但过高的抽象层次会被自己的实现复杂度压垮,因为过于抽象的接口定义的会因为实现复杂度过大而歧义丛生,导致实现的分裂。最后接口的抽象度逐渐在简化使用和接口统一的双重需求下收敛于有利于两方面的最优点。CORBA一类的RPC技术最后普遍退回到基于HTTP请求的页面访问服务或者基于socket的应用协议接口就是典型实例。
认识技术竞争的本质和对统一接口强烈的需求,在分析软件技术现状的时候会抛弃对高度抽象的所谓优雅接口的不切实际的追求。对粗糙接口的坦然面对也是一种放弃执着的体现。软件的复杂度不仅仅受到人类个体智力的限制,也受到人类社会行为的限制[2]。
注[1]:接口复杂度的高低并非取决于原语的多少,而是取决于使用每个原语时的难易。因此高复杂度的接口往往拥有更少的原语(比如汇编语言拥有更少的原语,底层网络协议接口也比高层网络协议的原语更少)。这也是接口复杂度和实现复杂度成为tradeoff关系的原因(实现复杂度很大程度取决于原语数量)。
注[2]:这种限制即技术奇异点。技术并非不能越过奇异点,但是越过之后开始自身发展而超出人类的理解能力。
发表评论