我的SD2C话题:VCL已死!RAD已死!(200分)

  • 主题发起人 主题发起人 aimingoo
  • 开始时间 开始时间
A

aimingoo

Unregistered / Unconfirmed
GUEST, unregistred user!
反正生是DELPHIBBS的人,死是DELPHIBBS的死人。所以在外面晃荡久了,就想回来看看。这
次回来,可没带来啥子好话题。不过,希望看的人用心看,骂的人口下留点情,我只想着这
些东西,能给Delphi的、VCL的、RAD的兄弟们一些启发,一些或可以瞻见未来的东东。
======================================
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。
然而,我们的系统已经越来越复杂,已经越来越不是“一个人”能干的活儿了。
 
二、分层,真的改变了你的思想了吗?
-----
分层思想提出来了——这在操作系统的设计上可以上溯到上个世纪50年代,但在应用软件开发上
却并不太久。一个比较稳定的分层系统是“交互、业务和数据”三层,当然,与实际需要相关的
还有更多层、更多更多层。
分层没有什么不好。正如我说WIMP没有什么不好一样。但是,厂商们开始掺合了。为了让我们的
程序员成为RAD中的SuperMan,以及表明我们这些厂商直接就是超人学校,并提供超人道具。所以
我们的开发工具加上了各种各样的RAD工具:数据库可以拖、网络接口可以拖、应用框架可以拖、
设计模板可以拖。厂商们宣传:只要往界面上一拖,我们的开发人员就可以回家睡大觉了,三天
后系统就可以Build出来。
老板们相信了这样的鬼话,并且认为那些没有按这样的方式为客户“生产”出产品的程序员都是
笨蛋,应该立即开掉并招聘另一批RAD的SuperMan进来。按照RAD对时间节省的功率来看,客户给
出的时间富富有余,重复开发三五回都没问题。
但是,结论是:我们失败了。在所有的分层上,由同一个厂商,在同一个工具,使用同一个或一
类开发人员来完成产品的理论和实践,通通的倒掉,死掉,一个不留。
没有人是超人,没有人能象孙猴子那样从天上打到地下,从龙宫打到阎罗殿。我们是在写软件,
不是在制造神话。相信这一点,你就知道在各个分层上由同一方案来解决是不合理的。分层是伟
大的思想,只是工具产商们胃口大到了极点,因而无视于这伟大思想背后的深意。
纵向的切分带来了模块与模块间的隔离,可以将系统由大而化小,从而分解了“系统的复杂性”,
这与把一个住宅小区分成几十橦大楼,以及无数的生活设施是一个道理。同样的,横向的切分带
来了专业领域,以及领域间的界面,这与把楼房看成砖瓦等构件是一样的。但砖瓦等构件带来的,
是砖头工、瓦匠,以及木工、电工。无视于领域存在的人,只配去建猪舍,在那样规模的建筑上,
不需要“术业有专攻”,而且项目失败成本的边界无过于:
压死一头猪,或一群猪。
大厂商们以牺牲一头或一群猪的风险成本与战略眼光,以及战术思想,要让我们——开发人员去
建设一橦大楼,或一片小区。这就是现实。
分层,带来模块的分解,以及领域的切分。而你的求职简历上还写着:熟悉二十种语言、各种开
发工具、设计工具、调试环境、性能分析测试以及服务器端部署……
开玩笑啊,如果你的工作经验未能超过150年,而你的老板还敢雇佣你,那么活该他项目做死掉。
 
三、RAD之死与系统的复杂性
-----
RAD在较小规模应用的开发上,具有相当的优势。同时,它具有两方面特性:
1、对于应付在各个模向分层上需求相对均势,并且在开发工具商提供的方案可应付的区间的需
求,RAD以及使用RAD开发的团队具有极大的能量。例如早期的C/S模式下的数据库应用。
2、对于系统可以纵向切分(为多个子项目或独立模块),而且各个块满足上述第一项的特性时,
RAD应付规模增长的系统时,也具有极大的能量。例如群件、或中间件等。
对于上述两个特性之外的系统,RAD的团队难于组织、管理,也难于复制。显然,RAD对个体特性
的要求过高,不利于团队的成长。大公司的高人们,难道真的没有看到这一点么?
不是,他们看到了。VS.NET开始把产品做成产品线,发布开发产品的不同版本:设计师的、架构
师的、测试工程师的……等等这些。与此相同的,各家都开始这样切分产品。但是相同的产品线
名称迷茫了开发人员:大多数时候,我们要么选用不分这种版本的早期产品,要么选用这种产品
的最完整版本。而后者,正是大公司的销售经理最喜闻乐见的,他们会相互吹嘘自己买出去多少
个Site Suite版本,并同时拿Web Devleper版本的业绩来开涮。同时,大产商也不会无视市场的
价格而鼓吹单一版本,因为那样的结果是:“网页制作应该用macromedia的”、“图形设计应该
用adobe的”、“数据库得选Oracle的”、“服务器最好用Linux便宜”……
拆开来买的“大”产品,虽然不至于一文不值,但至少没大产品值价。这个与传统产品不同,其
根源在于开发工具的“大”产品没几家做得出来,而“精”却很多人能做得到。大公司可不会为
了理论上的正确性而无视于市场盈利。
所以大厂商对RAD工具的细分其实只是假象,用来说明他们的工具足够牛足够大和足够好的一个
旁证。这些“细分”的背后是极强的相互依赖性,结果是:整个解决方案还是一家独大。
我认为,系统的复杂性需要横向的切分来分解。因为横向的切分产生的是领域,与之对应的,就
是不同领域、产业的力量,而非某个个人或团队或公司的力量。不同领域、产业带来的,是整体
性的推动,而不是某个个体的畸形发展。同样的,他也带来了个体品质的提升,例如有了最好的
砖瓦匠和水电工,也带来了在更高分层上独立思考的可能性,例如建筑师与城市规划设计师。
当然,我相信很多人认为自己拎上一把锤头就可以做水电工——我前两天在CSDN论坛里就看到了
这样的观点,我也相信很多人认为建筑师与城市规划设计师都是饭桶,他们存在的目的仅仅是就
业安置或者消耗粮食。我完全相信这种观点的存在,但不同意它。我曾经做过电工,我知道用一
把锤头敲击就听出设备的好坏是需要10年以上的功夫的;我也知道如果没有规划师,城市会比现
在更乱而不是更好。
你可以批评别人做得不够好,但把你放在相同的位置上,你未必做得更好。这与横向分层理论带
来的效果是一样的,你可以认为自己能做好所有层次上的工作,但你真要去做的时候,却未必做
得到。以及,由于你——这个个体不能被拆分,所以你的工作是串行的、效率是有限的,结论正
是:在这样的思想下,大的系统会越做越糟糕。
横向分层带来的结果要变成良性的,就必然是相信每个层面上有相“匹配”的人员。你要信任它,
并主动合作,你要相信团队是一个多层结构,相信团队中的其它人会给你帮助,以及需要你的帮
助。你做不到一切,你依赖于别人而达到你的成功。
同样的,你也必须认识到:没有任何一个团队一开始就是这样的。团队需要清理,需要沉淀。需
要花费一些成本来建立沟通,并逐渐形成合作的模式、默契。当然,另一种更加不错的方式是:
整个教育和培训行业相信这一点,在程序员走向商业产品开发之前就培养他们的团队组织与协作
能力,从习惯于服从和配合,到学会观察与学习,以及在团队中如何自我提升。等等这些,才是
我们传统行业——例如我们常常提及到的建筑行业中的职业进化模式。
产业的、领域的推动才会解决系统复杂性的问题,而不是某一个或几个大公司在他们各自有限的
领域中折腾。他们折腾的目的、根本只是为了商业利益,而不是为了解决问题。
 
后续预告:
(占座先……)
四、后RAD时代:界面可视,到界面可描述
 
后续预告:
(占座进行中……)
五、后RAD时代:领域的成熟
 
不过又想了想,也不是没啥好东西。这个大家可以去下载啥,是Delphi中应用WebBrowser的,解决了粉多问题。
SD2C大会,JavaScript + Delphi + ErLang 讲演相关资料完全公开!
http://blog.csdn.net/aimingoo/archive/2008/12/08/3477868.aspx
 
aimingoo的顶啊
 
aimingoo观点是不是有些偏激了?
web也存在很多不足:效率、表现力、即时性、执行权限等。
比如,web版的IM软件用的人就很少。
 
是Delphi中应用WebBrowser的,解决了粉多问题。
谢谢。不过好像不能下载。
您访问的资源不存在。
能更换一个地方上传吗?
delhpi@126.com
 
web,垃圾中的战斗鸡
 
aimingoo,说的不错,可以借鉴一些,谢谢了!
 
其中一些观点可以让人深思
 
进入程序多元化的时代,各有各的市场,至少10年之内,DELPHI控件还可以照常拉
 
看了 半天...感觉 横着 竖着 都是死........
软件 开发 没有 什么出路...
 
我个人认为正好相反,web 再有5年就菜不多要死了,反而是象qq,迅雷这类终端程序会逐渐发扬广大,对这类程序而言,现在web不过是一个纽带或壳而已,随着这类程序的完善,web的纽带和壳作用会逐渐边缘化.最终web也越来越不在重要.
 
此一时,彼一时,彼一时,此一时。
 
web只是界面的一种,并非万能的,表现能力也一般,而且不规范化,大理的不安全漏洞的制造者。
 
c/s,b/s感觉原理大致差不多,具体区别对待而已
 
已添加第四节:
四、后RAD时代:界面可视,到界面可描述
请移步楼上。^.^
 
后退
顶部