遥望MDA——再访James Rumbaugh
记者/欧阳
《程序员》:Rumbaugh先生您好,去年《程序员》杂志就曾经在developerWorks大会上对您进行过专访,请您来谈谈这一年来软件技术上的发展和变化。
James:软件的发展速度非常快,而技术也一直都在不断变化,很难说哪一个特别的技术就是这一年来最大的变化与革新。让我来说过去的一年中有什么特别的,可能我很难记起,那是因为,一个技术要真正地深入人心,往往不是一年时间就可以做到的,而是需要五年,甚至更长的时间来才能看到软件技术趋势上的改变。变化的不断进行,同样会让你忘记那些不断兴起的技术。然而仍然有一些技术是深入人心的,比如SOA就是这样的话题,每个人都希望来讨论它,所以我想这是在技术领域今年一个非常大的改变。
记者手记:再见James Rumbaugh,我当然是非常希望听听他这一年来它所关注的技术领域及其变化,然而擅长于MDA、领域/业务建模的James大谈起了SOA,不由得让我不相信SOA已经渐渐深入人心。
《程序员》:在过去的一年中,OMG正式发布了UML2.0,而敏捷运动的一些领导者却认为,图形仅仅适合用来交流,而在描述程序时,代码是更自然和更有力的方式。人们的经验也表明,图形和语言各有各的优势。请问你对这个观点的看法。
James:我从来没有认为UML将代替编程语言,它的出现是为了帮助程序员来组织他们的程序设计。而相对来说,代码将会描述那些更加细节的东西。不知道出于什么原因,有些人认为UML将会代替编程语言。UML是你在软件设计过程中描述一个蓝图的方法,它提供了一个更高的抽象层次。这道理就好像你在盖房子,一个蓝图永远也无法代替你来修建一幢房子,尽管蓝图可以帮助你组织好设计,但是你仍然需要外出去施工。施工的过程中,有很多工作是借助于蓝图来了解的。因此,UML的出现并非为了替代编程语言,而是为了组织一个设计。
记者手记:对程序员来说,代码就是生命。UML的出现无疑给了很多程序员一个不安的暗示,将来的软件是否完全只要用图形去实现就行了?而技术社区中以代码见长的敏捷开发领导者们也对图形的使用提出了质疑。作为UML的缔造者,James给出的答案颇让人回味,也许让程序员们感到欣慰。不过我们还是注意到他与敏捷社群的不同观念——他认为编码是构造过程,而敏捷社群则认为编码就是设计。
《程序员》:UML/DSL作为MDA的描述方式,对某些软件的描述有很大缺陷,比如对企业业务。我们知道,任何平台都需要形式化的基础以对语义有充分和良好的支持,UML目前在企业业务的描述上,让我们觉得抽象层次还不够高,请您就这个问题谈谈您个人的看法。
James:目前的UML2.0所覆盖的范围已经非常大了,在短时间内,我们不再需要做一个新的版本,因此,我们暂时也没有考虑关于UML3.0的方案。既有的UML2.0中还有很多我们软件技术人员尚未掌握的内容,它是一个成熟的标准,期待着软件技术人员深入学习和理解它,并为这些软件设计人员的工作带来真正的好处。但是如你刚才所说,UML在对业务的描述上确实是有缺陷的,这些缺陷源于它并非为描述业务而设计。真正的MDA,将会需要另外的一些东西来衔接业务和你的描述,UML的用处主要还是在架构你的软件之初。而真正地将其转换成业务,你尚需要在此过程中设计一个“转换器(Translator)”来表达。目前的软件市场上已经有一些先锋在从事相关的工作了,而我也非常期待这些先锋在这个技术领域有所发展和有所发现。据我所知,这些人们的工作正在起步阶段,但是这个发展方向将会是值得肯定的,IBM公司目前也在协助一些这样的企业开发他们的这套系统,其最终目的还是要实现软件加工的自动化。当然,这部分自动化的工作目前还处在比较初级的阶段,并未取得突破性进展,但是随着他们继续深入的挖掘,这些工作将卓有成效。在描述层面上,ODM作为OMG的另外一个标准,正在和UML组积极沟通,因为大家都认识到,为了更好地提高UML自身的描述能力,还需要一些元数据的支持与协作,OMG也认识到了这一点,相信在两个标准的交互上,不久就会有新的进展。
记者手记:对于程序员来说,为客户解决问题就应该将更多的精力放在业务功能的实现上。然而,采用传统的代码来描述软件业务功能,其粒度未免太细,就如同用砂石来建造高楼大厦,尽管砂石是高楼大厦的必要材料,但是这样庞大的工程应该有抽象层次更高的方法。一些程序员们就将希望寄托在了相比代码抽象层次更高的UML上,然而,从James给我们的回答看来,UML也并不是为了解决业务的描述而创造的。目前国内的一些平台厂商正在研究的方向,正是在做James所说的“转换器”的工作,将传统的描述语言转化为更具形式化、抽象层次更高的描述方法。从这一点上看,这些厂商所做的工作将会是非常有价值的。
《程序员》:真正的MDA完全实现以后,对于目前的软件行业有怎样的影响?传统的开发人员是否仍然有相同的角色分工?或者MDA的出现只会解决某些领域的问题?
James:软件的发展过程中,往往都需要在软件开发的速度上有阶段性跨越。这么说可能不好理解,那让我们举个例子。比如现在你手边的数码相机和数码录音设备,在五年前或者十年前,它们并不是这样性能良好并易于使用的。他们受到当时技术生产能力的限制,没有办法很快大批量、自动化地生产。一定是由于某种技术的革新使得这些技术日益成熟和发展。在软件开发领域,MDA就是这样一种技术,它能够显著地提高代码编写的效率,因此它也将是推动技术进步的一种创新的方法。尽管目前的MDA在技术上还没有达到“成熟”的标准,但是在可以预见的将来,比如说5年以后,MDA所提供的软件编写自动化程度将会被某些特定领域广泛应用。由此,我们可以判断,这种创新的方法将会给传统软件行业一定的影响。比如说软件测试人员:庞大的代码生产能力无疑会让代码越来越多且越来越复杂,测试人员在其特定的领域将会肩负更多的工作,这不仅代表了工作量上的增加,而且还将表示,测试的工作将会越来越复杂。一如其他任何行业一样,每当创新的技术面世,将会带来更多角色的分工,MDA在一定程度上会是提高代码的生产效率,减少一部分程序员所做的工作,但是也必将在其他角色上造成影响。现在的很多程序员所做的工作大多数都是在重复劳动,想必这也是中国开发者感受颇深的一点,但这是一个阶段。任何行业的进步都将会逐渐将那些原来做简单重复劳动的工作自动化,并使做这些工作的人拔高到一定的层次。在软件技术领域,我们则更希望程序员们做更多设计、分析的工作。
记者手记:MDA的出现势必将会给某些领域的软件开发效率带来本质上的飞跃。然而任何技术的进步,一方面带来了生产力的提高,另一方面又带来了传统角色的细分。二十年前,计算机的使用还没有普及的时候,我们的工作可能不像今天这样复杂,然而将今天的人们放到过去二十年之前,他借助于自动化的工具,生产效率将会是过去的几十倍。那么过去从事这些工作的人们也就被细分到了更加复杂的角色当中。原因就是那些不断重复的工作已经被机器所替代,我们的着眼点,将放在那些更加需要人们主动去改变的事物上。James先生带着IBM成熟的经验,将这一信息传递给我时,确实让我又多了一些想法。
《程序员》:目前就我们所接触到的一些技术人员,有这样两种截然不同的观点:一些程序员认为,将来的软件架构相对稳定,架构师的工作将不再如今天这样重要;一些架构师认为,将来的代码由模型生成,程序员所做的重复劳动将会被替代,请您评价这两种观点。
James:在过去,我们并不重复做一些设计,尤其是在各种技术资源比较贫乏的时候。今天的世界也一样是,那是因为没有更多设计师和架构师做这些工作。当然也有一些人在做同样而且重复的劳动,但这并不是一个好主意。一个好的架构师在不断针对新需求设计不同的软件,问题在于,我们现在并没有足够多的好的软件架构师,好到不断创造出新的软件架构,很多架构师只是一而再再而三的重复设计。这道理就好像是建筑师的工作,今天我们所需要的房子绝对不会是风格和样式都一样的房子,而是需要各种各样不同的房子。房屋的建造师们建设传统的屋子,如果结构都一样,任何的建造师甚至是施工队也可以来做这项工作。而建筑师们则在不断地设计新的、与传统结构不相同的房子,人们也在不断地需要新的房子。而在新需求的基础上,人们仍然会提出更新的需求,为了满足这一点,你必须是一个好的架构师。
记者手记:James是一个设计人员、架构师,因此不出所料,他的回答更加倾向于后者。然而从上面的问题中,我们可以看出,他对任何软件发展的改变都持乐观态度。因此,不管是程序员或者是架构师都不必担心将来没有饭碗,只要保持你不断学习与前进的脚步,打下扎实的基础,就可以随着时代的变化,随需应变。
《程序员》:请您谈谈MDA开发工具的进展情况。尤其是其开发能力,目前的工具能够自动生成的代码数量大致比例怎样?瓶颈在何处?
James:对于使用MDA来产生代码上,更多取决于你的工作。比如你所做的工作是一个已经有很多传统积累的工作,这样的目标更容易通过MDA来达成。而如果你所设计的工作领域相对比较前沿,那么MDA所产生的效果就不如前者。这两者之间有一个很明显的分界线,而分界线本身所代表的,与我们前面所说的自动化程度相关。MDA所要解决的最重要的问题就是减少程序员们的重复劳动,这是它最能发挥自己功效的地方。如果你要通过MDA来提高工作效率,那么首先你就得关注你所应用的领域是否是一个已经成熟的领域。比如饭店的订房系统,你需要在Web上订房的这个业务系统已经是非常稳定的,并在全世界大量使用。人们并不指望通过这样的系统来获取更多他们想要的其他东西,这个系统仅仅提供一个他们已知的需求。类似这样的系统,它非常成熟,因此也极易采用MDA的形式来完成,很多Web应用都与此类似。与之相反,如果是一个全新的领域,我们仍然还需要不断探索和熟悉的过程,这些过程反映在MDA中,就是代码生成的数量相对较少。
记者手记:James并没有正面回答我的这个问题,这有点让我觉得失望。但是他却给出了另外的一个暗示,那就是关于建模。从业务建模到领域建模,如何将现实世界抽象成为计算机可以理解并描述的流程和对象是一个非常关键的问题,而James在软件技术上最大的贡献也正在于此。因此,MDA并不是一个纯技术的理论,它本身还关系到技术人员对于业务和需求的理解。这样看来,完整的流程和对象,通过图形转化为代码已经不是目前所要解决的主要问题了。
《程序员》:Ivar Jacobson目前致力于智能代理技术(Intelligent Agent),并称之为几十年来最重要的技术变革;同样来自IBM的Jason Weisser则称SOA为几十年来最重要的技术变革。请您谈一谈您在这方面的观点。
James:我想,智能代理技术更加适用于那些对软件要求更具可预见性的领域。而SOA则是我们在设计新一代的软件架构。智能代理技术是一个比较新的技术,它把过去经验性的、传统的技术通过代理的形式展现出来,是属于前沿的研究领域,并不适用于目前大多数的软件。对于开发和使用的人来说,对技能的要求很高。这是由于它仅仅只是一种智能的代理,而不是一个真正的人在客户现场帮你工作,它能通过以往的经验为你提供一些建议,但很难保证所给的建议能够相互有条不紊的工作。这些建议只能为你提供参考,你仍然需要有很高的自主性,用以处理你的业务。当然,在技术的选择上,更多还是根据用户自己的需求选择更加合适的技术。如果你所做的工作具有很高的前瞻性,那么你可以采用比较前沿的科技;相反,如果你所从事的工作领域需要非常严谨的技术,那你最好选择更加传统、成熟和稳定的技术来指导你的开发。十年前,Web刚刚开始的时候,今天的人们都在使用这种技术,所以我认为Web是一个标志性的技术变革,尤其是在软件技术的大众领域,它产生了很大的影响,它让所有的个人电脑用户都能通过Web来生活,工作,这是一个非常大的飞跃。那时,我们并不一定能意识到它将会这样发展,因为与它一同的,还有很多种不同的技术在流行着。而在当今软件开发中,如何改变业务,建立起与客户之间的良好关系则是SOA目前需要达到的目标。
记者手记:对于《程序员》的读者来说,这个建议更多是给那些喜欢了解前沿技术的人们准备的。其实,大多数人并不需要去追寻所谓潮流,而潮流到来的时候,你会不由自主地处在你应该的位置。前瞻性的技术研究对目前你手边的工作是否有直接的帮助,这是你需要考虑的第一点,除非你将来打算成为一个大师,或者科学家。
《程序员》:IBM目前的公司战略是帮助客户实现随需应变的业务,请问您这对于开发者意味着什么?Rational主要将从哪些方面来为这个战略服务?
James:Rational是IBM软件中的一个重要组成部分,其主要产品都是开发人员的工具。这些工具帮助开发人员提高他们的开发效率,让他们能够更加容易地应对他们客户在业务上的不断变化,加速业务的实现。因为更快的响应客户需求的变化,将让这些使用Rational产品的人们在激烈的市场竞争中立于不败之地。
记者手记:在采访这个部分的时候,IBM的一位员工告诉我:“Rational提供了一个支持随需应变的开发平台。”而我则希望能有更多的答案。值得高兴的是,James还是给出了他的理解,快速响应客户需求和变化,加速业务的实现也许是目前所有开发工具都应该追求的目标。这一点与IBM近百年积累是分不开的。
《程序员》:请您给我们中国的开发者提三个建议。
James:
1 迭代式的开发
2 设计先行
3 持续提高的软件技能,不要做重复的工作。
记者手记:为一提醒读者注意的是2,“设计先行”而不是“测试先行”,这两个字的差别体现了今天软件过程两大门派的关键不同点。