返回留言板
文章标题:与网友AvayaEngineer的讨论
文章作者:bluesen
发表时间:2004-11-9 15:40:27
内容:
--------------
AvayaEngineer: 看过你的“语言”介绍,我觉得目前还不是真正意义上的“语言”,能生成目标文件吗?能编译连接吗?呵呵。。。

看看这里,http://www.ngnc.net/NGNide/NGNide_intro.htm,
这是我的一个朋友凭个人力量独自设计开发的一种类C语言,当然了,它跟IVR流程脚本一点关系都没有。 
 
Bluesen: 误解和偏见

看来你对脚本语言充满了误解和偏见。

和很多脚本语言一样,koodoo语言的编译和链接是在内存中完成,生成的目标代码(对象)也是直接在内存之中,从用户的角度出发更加简单。
Koodoo有完整的语法结构,丰富的系统库和完善的外部接口。蓝星际语音平台只是这个语言的一种实现,类似IDE,有可视化集成编译调试环境。

JavaScript加载到浏览器就可以直接运行,也没有你所期望的“生成目标文件”、“编译连接”等过程,你能说它不是一种语言吗?

看了你朋友的“类C语言”,其实也是脚本语言,和Koodoo一样,当然也是面向特定的应用,因为没有语法手册和库说明,不好评论。
但以同行的眼光看来,其IDE和调试器无疑太复杂了,Keep it simple,这应该是脚本语言的设计目标。

对于语法的取舍,不妨多说几句。
我自己是C/C++的狂热爱好者,实际上koodoo语言也是用C/C++来实现的。
但是如果一种面向特定领域的脚本语言完全照搬C/C++的语法,那太复杂了,我不认为是个明智的想法,尤其C/C++复杂的类型系统和指针。
毕竟C/C++是个通用的程序设计语言,它试图解决的问题要广泛的多。而且面向特定领域的脚本语言本来就是要简化问题,否则还不如直接
用给用户提供一套C++的CTI类库框架呢。

C++之父B Stroustrup在被问到对于当前脚本语言的兴旺态势怎么看时,他回答道:
“有些语言很不错。比如Python,我很喜欢。但是我认为你从不同的语言中学到的OO技术是不完全相同的。当然,每一个职业程序员都要通晓几门语言,并且应该意识到,在不同的语言之中,编程和设计技术有着显著不同。

在我看来,用脚本语言建造的系统与用C++那样的通用语言建造的系统大不相同。从两类语言中学到的技术区别明显。不存在“可以满足绝大多数高效系统构建所需”的公共OO技术子集。”
--------------
AvayaEngineer: 现在很多人动不动就把某种标识符号或类脚本就说成语言,呵呵。。。

Bluesen: 你觉得脚本语言就不是“语言”吗?
也许在你看来,Python就是一种“标识符号”,哪里入得了你的法眼呢。
--------------

AvayaEngineer:
个人观点:

看过您的koodoo“语言”,是很不错,我很佩服你钻研技术的精神。也可以想像,您在设计这个“语言”的时侯,肯定花了不少功夫,
值得敬佩。不过,我以为,如果单纯是为了解决语音平台的问题,完全没有这个必要来设计一种“语言”来解决。如果非要用“语言”
来解决,为什么不直接借用Javascript或VBscript来做呢?而且很多公司的产品都是这么做的。另外开辟一种“语言”来做,你不认为
这是花架子吗?我也以为,用Javascript或VBscript来做,也是完全没有这个必要,有吗?独辟一门语言专门来解决语音平台的问题,
这似乎也不太符合您的Keep It simple这个理念。

为什么不能做的更 Simple 呢?

要生成一套流程,还要让用户熟悉一种“语言”?然后用这种语言来生成流程,这 Simple吗?用一个简单的规则不就完全OK了吗?而
这个自己设定的简单规则,并不意味着它不能解决复杂问题,而恰恰是,这个简单规则,可以解决绝大部分问题,可以灵活定制出各种
各样的流程。

而您独辟Koodo语言,又能推动多少计算机技术的发展呢? NGNc不是脚本语言,是面向嵌入式设备以及移动设备应用开发的。您说他的
IDE太复杂了,呵呵。。。不复杂。其所有的功能都是必须的。Keep It Simple,呵呵。。。Simple的标准是有高低的。

Bluesen:
我所说的简单是指用户体验的简单,更重要的是保持架构的简单,而不是功能的简陋。

我设计Koodoo当然是为了解决实际问题,它决不是我自娱自乐的玩具语言。我也很清醒,我从来没有认为它是一个解决广泛问题的通用
语言。面向特定领域的脚本语言,当然要在易用性和功能之间取得某种平衡。任何产品都有它的客户群,我认为CTI中间件/语音平台从
来就不是为最终用户设计的,它的真正用户应该是系统集成商,或者说业务应用的开发者。

回到你的问题:
1.为什么不直接借用Javascript或VBscript来做呢?
答:我认为Javascript适合作动态网页,未必适合CTI领域,而且作为一个平台如果要完全实现其内部方法,系统对象,太复杂了。如果仅仅
是借用其语法,意义并不太大,很可能是作茧自缚。

2.用一个简单的规则不就完全OK了吗?
答:你的规则用什么来描述,ini文件?复杂的规则发展下去不就是语言吗?
我遇到到的很多应用不仅仅是简单的语音流程,需要和数据库打交道,甚至和非数据库的后台系统打交道,有些还可能要进行复杂的运算。
设计一个支持脚本语言的平台可以统一的解决这类问题。
应用千差万别,用一个简单的规则是不能完全OK的。

是否需要一种语言,当然是市场说了算。Intel有一个CT ADE,其脚本语言叫VOS语言(也叫AD语言),在国外卖得也挺好。其介绍参见:
http://www.ctiforum.com/train/intel/tech/tech01_001_00.htm
当然,我觉得其设计并不太佳,参见拙文"魔鬼隐藏在细节之中---我看Intel CT ADE":
http://www.bluespace.com.cn/koodoo/article_ct%20ade.htm

--------------
AvayaEngineer: 
简单规则当然是可以的,是完全可以代替你的Koodoo“语言”的

语音流程当然是指各种简单或复杂的流程,与后台系统交互当然包括与数据库,甚至交易中间件的交互,也包括与各种基于
WebService架构的应用或其它基于ASP的Web应用的交互。这些看起来似乎很复杂,其实说白了这些都是很简单的。靠一个极
其Simple的规则就可以解决,规则也未必需要INI的形式来定义,我不认为发展下去,他就是一种“语言”。也安全没有必要
让它复杂到需要用语言来解决的程度,我始终坚持认为,引入CTI语言来做平台,只是追求技术境界的花架子。我也看过同力
信通的平台,很简单,做流程就是简单的拖拉,然后设置几个参数搞定,就这么Simple。这不就是靠一种脚本规则解决问题
的实例吗?何需语言?根本就从中找不到任何“语言”的影子。
--------------
Bluesen:
我不知道你有没有做过复杂的IVR应用?

“做流程就是简单的拖拉”,你看到的图形化的拖拉只是一个外壳,它后面的东西呢?

贴一段我以前回应thinkp的话,算作是对你的回答吧:
------
"    我们原来在老泓那里讨论过,看来观点有所不同。

"    我们的论点在各自的文章里面已经说的很清楚,实际上是对目标客户的定位不同,还有对CTI应用复杂性的认识。也许这只能让市场来检验了。
"    其实“写程序的感觉”并非坏事,现在还很多人会用FoxBase写程序,做应用。关键是看如何更好的解决问题。

"    退一步看,即使是图形化流程设计,仍然需要好的语言来支撑。Delphi后面是Object Pascal, C++Builder后面是C++,VB后面是现代的Basic语言。

"    如果Delphi后面不是强大的Object Pascal,而是充满goto语句的节点描述文件,Delphi早就在市场上无影无踪了。
------

现在问题似乎转到了图形化拖拉界面的讨论,我的完整回答就是这篇文章"以语言为中心--论CTI中间件的设计":
http://www.bluespace.com.cn/koodoo/article_ctilan.htm

--------------
AvayaEngineer:
看过了你的文章

什么叫复杂IVR应用?银行业务复杂否?税务业务复杂否?

如果流程图做的像蜘蛛网,那说明流程设计器不完美。
如果流程设计器不能完成必要的功能,那说明做的不完善。
如果设计完流程图,还需要再改脚本,那说明做的不成功。

想必你曾经见过的流程设计工具都是这个样子的吧,要不然你不会有这样的观点。呵呵。。不要对流程图抱有成见麽。
你在文章所提到的流程图的种种弊病,在很多家的产品里确确实实存在这些问题,但是不要因为没见过Perfect的产品,而就否定流程图。

我始终认为,独创“语言”来做流程,确实是花架子,有故弄玄虚的感觉,因为,本来就是一件很简单的事情,为什么非要搞那么复杂呢?想必主流还是拖拽式流程设计吧。我想,不管是给最终用户使用,还是给集成商使用,有谁愿意去掌握一种独特的没有主流意义的语言呢?我同意ct_dev的观点,这是在浪费程序员的青春。

bluesen:
讨论到后来,就变成词语的重复了,说来说去就是那几句话了,旁观者未免乏味。

“什么叫复杂IVR应用?银行业务复杂否?税务业务复杂否?”
电话证券交易和有些较全面的电话银行系统可以称之为复杂的IVR,我也是行业中人,并没有见过完全使用图形化的
语音平台中间件来进行设计的。


“如果流程图做的像蜘蛛网,那说明流程设计器不完美。”
如我文章中论述,这是根本问题,也就是业务流程的复杂性和图形拖拽固有缺陷的矛盾,不必举例,相信所有做过复杂IVR的人都要同样体会。
如果硬要在图形层面解决,只能把平台做成和业务相关,减少一些图形节点,但这样又有违通用中间件和业务无关的初衷。

“但是不要因为没见过Perfect的产品,而就否定流程图。”
你就举例说明吧,让大家也开开眼界。
如同我上贴指出,即使是优秀的图形化产品,其后台核心就是语言。


至于你反复强调的“花架子,有故弄玄虚的感觉”,这只能是你个人的混乱感觉。
香港最大证券商大福证券采用Koodoo语言成功开发证券电话委托系统,我深感荣幸--我“浪费了”他们优秀程序员的青春。

--------------
AvayaEngineer: 
平台就应该是平台的样子

既然是平台,那它就本来应该和业务无关,但是这妨碍节点的数量多少吗?
Delphi是个平台,是个编程工具,它和具体的编程业务有什么关系吗?它的控件少了,程序员还可以自己定制ActiveX控件来丰富.
我认为语音平台也应该是这个样子,它和具体的IVR业务毫无关系,可以利用它象Delphi那样设计出各种复杂业务应用(这当然只是个类比).也许你认为,唯独通过语言才能设计出复杂应用.我不认同你这个观点.Delphi当然是靠优秀的Object Pascal来支撑它,但是您别忘了,Delphi面向的是程序员.而语音平台不是面向专业程序员的,它很有可能是直接面向用户的.为了解决这个问题,为什么不能把所谓的语言隐藏在平台后面呢?而呈现在平台使用者面前的只是简单的拖拽和属性的设置、以及逻辑的控制呢?然后在编译的时候,通过内部的语言机制来实现呢?这是完全可以做到的,
而且不是没有这样的产品。另外,这么实现也是无需独创语言来实现的,完全可以借用C++的语法来直接实现。不管是采用何种语言,我认为这应该是系统内部的事情,而是不应该呈现到用户面前去的。呈现给用户的永远应该是最简单的,这样也许才符合Keep It Simple这个理念。


Bluesen: 
为什么语音平台不能面向专业的程序员?
面向没有计算机基础的最终用户,在我看来简直是天方夜谭。
你可以问问那些做中间件的厂商,他们的产品是什么人在使用它开发应用?

(首先声明,以下说法绝对没有贬低国内同行的意思,我一直以为只要有各自的用户空间,任何产品必定有它存在的理由。只是和AvayaEngineer争论至此,不得不发)
就让我再来说说Simple, 我试用或者分析过国内几乎全部厂商的图形拖曳的语音平台产品,他们的操作界面都是各不相同的,而且都是需要学习,学习的时间绝对都不短--要知道我作为专业程序设计师尚且如此,更何况普通用户乎?
而脚本语言通常都在语法上接近于C语言,很容易上手。
“一幅图形胜过千言万语”,那也得看什么图,很少有流程图少于1页的,而且线条多有交叉,非常复杂。有些厂商都提出了一些办法,比如分层,或者模拟语言里面的“过程”抽象出可以复用的公共图,但是由于缺乏语言中变量和表达式的强大的表达能力,以及语言中函数、过程、全局变量局部变量这种种语言机制的封装能力,使得处理复杂IVR业务捉襟见肘。
有的产品稍微复杂一点的节点就要采用外部语言来写一个动态库,采用单一的流程图根本不能解决问题。
具体一点,在语言中的一句话,想想对于图形拖曳平台来说意味着什么:
if( date=="2004.10.17" && (vol>1000 || price>19.36) && isOpen )
{
...
}

你也许又会像上次那样说,是你没有看到好的。好的在哪里?银弹在哪里?
如果没有,那结论就是:流程图没有办法解决复杂IVR的问题,落到最后它自己变得更复杂。

此外,你老是拿Delphi来说事,我不妨重复一下我的观点:
"拖放式流程图的拥护者也往往认为图形化是软件设计的潮流,君不见VB,
Delphi大行其道?这和应用有关系,很多桌面应用其操作界面就是图形化的。
而CTI应用本质上是一种服务程序,它是多路的、甚至是在后台进行的;它的操作也不是图形界面的交互,而是电话的、语音的操作。"

推荐各位看看一篇文章, 或者能够得到一些启发, "拖拽式IT开发还不成熟":
http://www.zdnet.com.cn/techupdate/apply/collaboration/story/0,3800030473,39285683,00.htm
这篇不是我写的了,是ZDNET专栏作家的大作。:)

已有回复:


回复如下

标题:
    发言人:

内容: [回复] [重写]