关于“自动编程软件”的一些问答
http://www.pconline.com.cn/news/gjyj/0406/391866.html
这条消息提及了所谓“自动编程软件”。《互联网周刊》记者吴小姐就此问题跟火炬,tiny
进行了一些讨论。
因为tiny的观点和火炬的基本类同,感觉火炬在这方面的理解更加的深刻和清楚,所以就不
丢脸的把自己的讨论发言贴出来了,下面内容转自火炬的blog:
原文链接:http://dev.codelphi.com/virushuo/archive/2004/06/14/14544.aspx
W代表吴小姐,H代表火炬。
W: 这个消息是否可信?
H: 可信。
W: 我想知道他们的技术是不是现在最牛的。
H:
我不认为这是所谓的“自动编程软件”,这个定义本身就是模糊不清的。这类的技术思路倒
是并不陌生。从原文的描述中可以看出,所谓“自动编程”,其实只是一种从业务模型中快
速生成程序代码的技术。其实目前的开发工具所提供的类似的功能也并不少。他们所提到的
这种软件大概是更为完善的接近“用户语言”的方式描述业务模型,这样的技术在中国也有
人研究,目前在这个领域作出一定成果的是的是justep(www.justep.com)。
W: JUSTEP跟CARE做的是一样的东西吗?
H: 不一样,不过我认为思路应该比较类似。
W: 是在自动编程软件这个行业里国内最大的?
H: 我不同意所谓“自动编程软件”这个说法。
W: 那么在你看来,CARE那个到底是怎样一种技术?
H:
什么叫做自动?什么叫做编程?用模型来表述业务逻辑,你说这个叫不叫编程?当然也叫。
只不过是更高层次的抽象,并非直接写代码而已。这类工具只是提供更接近用户的语言,让
用户可以完成程序员的部分工作而已。
所谓编程,就是是把你所需要的事情告诉计算机的过程。这个过程需要用特定的语言,这个
就叫做程序设计语言。部分环节可以不需要程序员干预完成,这个说法是
没有问题的。其实对于高级语言,和机器码相比,早就有部分领域由计算机代替了程序员的
工作。
最早的程序设计语言是穿孔带。那时候需要人工再纸上打孔。现在呢,使用高级语言设计程
序,然后用编译器生成本地机器代码或虚拟机代码。这是后,编译器就代替了“手工编为机
器码“这个过程中的所需要的程序员工作。所以说“自动编程软件”这个概念本身就是模糊
而荒谬的。只能说,这种系统提供了更高的抽象层次而已。
W: 那么我们关于自动化的设想是完全没有来由的吗?
H:
自动化的设想,只是自动完成某些工作。并非自动完成所有的工作。justep的东西也一样,
他们提供了非常高的抽象层次。比如说,可以用用户语言来工作或是进行所谓的“编程”工
作。这时候,需要的程序员工作变得非常的少。但,这并非自动编程语言。
W: 比如程序设计这方面,程序员是不可能退场的?
H: 退场的只是某些人。但一些人退场,必定会出现更高层次的人。
W:
你所谓的“抽象”是不是可以理解为智能?你所说的那种“抽象”可以高到什么程度?更高
层次的人指什么人?
H: 比如说:
我们编写一个用户验证模块的时候,需要编写安全模型,然后登陆入口,验证的过程,等等
。但,在业务建模系统中,可能这个就叫做“用户登录”。那么,只要懂得业务逻辑的用户
,不需要知道技术细节,他们把这个“用户登录”拖过来放在这里,这个平台就自动替他们
生成一个可运行的用户登录程序。其它的如此类推。
用户是在使用用户语言来工作,而并非程序员语言。当然,这个过程也并非“无需程序员”
的 。某些复杂的情形仍然需要程序员参与。只不过,这种需要大大降低了而已。
W:
那么再回到那家美国公司,他们开发的那种软件,能称的上是尖端技术吗?有发展前景吗
?
H: 我不认为能够称为尖端技术。发展前景当然有。
W: 某些复杂的情形仍然需要程序员参与”这种情形是不是正在变得越来越少?
H: 是的,会越来越少。这就是我说的抽象层次。
W: 请简要的说说编译器。
H:
这里我们先做一个定义:越利于人类理解的语言,则抽象层次越高。越利于计算机理解的语
言,则抽象层次越低。简单点说,就是人类越好理解的东西,计算机越难理解。反之亦然。
编译器是这两者之间的桥梁。把抽象层次高的语言翻译成抽象层次低的语言。在这个编译器
的帮助下,过去很多程序员的人工工作现在由计算机自动完成了。学习程序设计也不用先去
学习晦涩的机器语言或是汇编语言了。
W: 那么依你看,将来在编程方面,可以在多大程度上实现“自动化”?
H:
这个很难预料。技术的发展是一日千里的。但是有一些事情很难改变。比如说,系统的结构
一定需要有经验的专业人员处理。建筑行业是个很好的例子。建筑业已经发展了几个世纪,
非常成熟。但是建筑设计师,结构设计师仍然不是随便什么人都能做的。
这个行业的变化大部分发生在:大型搅拌机替代了大部分混合泥沙的工人,卡车等运输设备
替代了大部分搬运工。
W: 也就是说,CARE现在在做的东西其实也就是类似建筑工地上的搅拌机或者卡车?
H: 如果说现在程序员还是搬运工的话,care确实造出了了一辆卡车。
W: 你怎么看这个行业的前景?
H:
我认为,这个行业始终需要提高更高的抽象,因为我们面对的世界非常复杂。用接近机器的
语言描述世界很困难,而是用更贴近人类的语言则简单的多。
10年前我们只能开发出字符界面的程序。但现在大家都用上图形界面的系统了。
W: 这个提高有没有个极限?
H: 这个提高我看是没有尽头的。正如人类的科学没有尽头。
也许一些工具能取代现在的人,但是不能取代将来的人。随着抽象程度的提高,生产力的发
展,人的能力也在不断的提高和发展。现在的中学生的知识甚至有可能比1000年前的哲学家
更加丰富一些。
所谓的“自动编程工具”(其实就是更高抽象层次的工具)能帮助我们完成更复杂的需求。
W: 这个复杂性体现在哪儿?
H:
复杂性首先体现在巨大的信息量。然后体现在行业的丰富和不同。就是说,每个行业所要处
理的都是包含巨大信息量的工作。现在的信息化程度还远远不够。而行业还是在不断增加的
。
比如,过去,大家觉得字符界面下的工具够用了。但是,其实远远不够。现在软件都有图形
界面了,这些软件使用简单,培训容易,也更不容易出错误。这就是更复杂的需求。
其次,没有卡车的时代,只是靠人力搬运,那时候管好人就行了。现在呢,有了卡车,就需
要创造交通规则,需要创造修理工,需要开采石油和能源......方便的背后带来了更大的复
杂性。
W: 程序员现在的状况怎么样呢?“自动编程软件”的出现是否会导致程序员失业?
H:
对于特指编码人员的“程序员”来说,这个大概是他们听到这个消息之后最为关系的话题。
最开始我们说过,40年前的程序员是用串孔带工作的。他们需要非常了解计算机的结构,所
谓程序只是控制一系列电路开关的过程。他们要想好按照什么顺序去处理这些开关得通断,
然后用穿孔带来表达,最后让机器执行。这种方法显然对人要求非常高。这是非常难掌握的
方法。后来,出现了汇编语言,这是后,开始有比较简单的助记符出现,程序员虽然还要了
解机器结构,但是难度已经大大降低了。后来出现了C,出现了面向对象,现在出现了虚拟机
等等,这些一点点提高了抽象层次,也降低了对最低编码人员的要求。
但是,更高要求的职业也出现了。最早是没有所谓的
架构设计师的。因为那时候的程序写起来很难,也不可能写出来太大型的程序。自然也不需
要架构设计。
所以说,随着抽象程度的提高,一定会有一部分人失业。但一定也会创造更多的职业。比如
说刚刚说的系统分析员,架构师,这些就是随着抽象层次提高被创造出来的职业。
继续用刚才那个卡车的例子。比起没有卡车的年代,现在搬运工这个职业需求少了,但是创
造了司机这个职业。
W: 可是,高层次的职业毕竟需要的人少。
H:
需要的人少这个问题,我想要从更高的高度看。刚才说了,所面对问题的复杂程度是不断增
加的。卡车出了创造了司机,还创造了制造业,交通,道路,桥梁,能源等等许多行业的提
高,对于社会整体来说,所需要的劳动力并没有减少。具体到软件这个行业:就算有了相对
自动化的工具,但开发这些工具同样需要程序员。完善这些工具同样需要。当工具完善到可
以处理更复杂的情况的时候,对使用这些工具的人需求也会大大增加。对于整个IT行业来说
,人员的需求量始终是增加的。虽然再开发工具的辅助下,现在1个普通程序员的工作所创
造出来的代码质量和数量远远超过30年前的10个做同样工作的科学家的成果。但IT行业总体
的需求还是在增加。我们可以看到一个现象,就是IT/软件公司越来越多,越来越大,而不
是越来越少或是越来越小。所以,高抽象层次的开发工具带来的并非程序员的失业,而是IT
行业的整体上升。
W: 不妨说,那些从工地上淘汰下来的搬运工,必须学开车或者别的什么……
H:
当然,具体到个人,如果不学习,不思考,肯定会落后,会失业。这个并非IT行业专有。任
何行业都是如此的。