《VCL已死,RAD已死》
——SD2C中未能尽言的话题
今年的SD2C,我匆匆去又匆匆还,因为有急事要处理,所以第三天的课程都没来得及参加。与此相同的是,我的那场话题,也讲得匆匆忙忙,有许多不清楚透彻的地方。其中之一便是这两个断言:“VCL已死,RAD已死”。
所以今次开贴重讲!
一、从UI的变革到系统的复杂性
UI怎么构成?在Windows及同期的Linux、Mac平台上,对UI的解构是WIMP(Windows,Icons,Menu,Point)。这个抽象具有相当的合理性,并一度带来了GUI的繁荣。然而,界面技术本质上是掌握在平台技术厂商的手上,例如Windows提供MFC,大家便只能在这个MFC的基础之上来构建GUI应用。所以Delphi早期的成功,就是把MFC变成了更便捷的编程形式来替代,尽管其本质上还是MFC框架下的UI,但就是比后者方便,从而有了RAD(快速应用开发)一说。
同样的道理,Java做了自己的平台,将虚拟平台与操作系统平台隔离开。于是,在Java之上有了Swing或jFace等等,应用提供商也基于这样的平台来做开发,出来的界面仍然是在同一个风格体系之下的。
我们现在来看一个软件产品,它是Delphi写的,还是VC写的,或者是Java写的,也或者是在Linux上基于某个GUI包做的,在很多时候从界面上一眼就看得出来——因为他们其实是不同平台上对WIMP的实现。然而,我们来看WEB,便没有这种同质化的倾向,WEB精彩纷呈,不同的网站有各自不同的特性。没有了所谓“软件产品”的基本面貌,似乎没有人愿意承认“WEB网站”是一个“软件产品”。
但是,仔细分析WEB UI,你会发现它的本质结构是“块+层+链接”。“块+层”是表现上的本质,这与Photoshop等作图工具是完全一样的。所以,只要能用Photoshop画出来,就能用HTML做出来,这二者之间基本是可以等量转换的——因为这二者本质相同。同样的,“链接”是用户UI交互的本质,也是WWW的本质。Mac系统可以让鼠标只有一个键,本质上也是这个道理。用户行为,只需要点击一个位置来触发,而不需要位置上的二义性。如果需要另一个含义的行为,那就换一个位置(例如按钮),这个,是“简化UI”或“人性化UI”的本义。
所以,事实上WEB的成功,与WEB UI比传统的WIMP UI更加人性,以及更加面向设计师(例如PS高手)有直接的关系。而另一个方面,RAD的出现,与WIMP则有密不可分的关系——WIMP抽象了界面的“可组件化的基本要素”。
UI的变革带来了最直接的问题:使用WIMP的思想,开发不出WEB UI。最明显的例子就是Delphi的没落。事实上,这中间也包括Virsul C/C++的没落。二者相同的在于,原本“可视化编程”优势变成了劣势。
这是为什么?
什么叫“可视化编程”?Delphi/VC/PB/VF...这一类的开发工具中,你可以把一个组件拖到窗体上,然后配置属性、添加行为、处理逻辑代码,然后“RUN”。一切就OK。这就是“可视化的”、“快速的(RAD)”编程。然而注意一个事实,这个过程要求一个“程序员”的全程参与:界面设计工具与代码开发工具在同一个环境中,不可分离。
所以,在RAD的时代,我们的UI设计师是要迁就软件开发人员的。UI设计师设计了界面,然后开发人员说:荒唐!这样的界面用Delphi根本做不出来!然后一切就推掉重来。客户端软件产品的开发,就是在设计与开发人员的战斗中一路走过来的,而且,通常是开发人员取得胜利。
开发人员不会做界面。真正会做界面,需要有相当高的图形程序开发功底,于是,那些有这样功底的人开始做组件,例如很漂亮的换肤控件。这——看起来漂亮了,但是仍然不是界面设计师理解中的UI。
从中暴露出来的表面问题就是:开发人员最好是superman。RAD开发中的程序员,最好就是精擅各门的大家。无论是网络、数据库、图形、操作系统还是所有的一切,你最好都懂,都专长。
这样,一个模块给你,你完全搞定,大家都放心。因为RAD嘛,你搞不定,是不够快速,是工具不够好,或者你不够super。
然而,我们的系统已经越来越复杂,已经越来越不是“一个人”能干的活儿了。