Martin Fowler上海交流实录:关于“RUP是楷书,XP是草书”的对话

来源:互联网 发布:未查到域名注册信息 编辑:程序博客网 时间:2024/04/29 19:52

熊节:我这里有一个来自下面观众朋友的问题,而且这个问题很有趣,还跟林教授有关。据说林教授说过这么一句话:“UP是正楷,XP是草书,先用XP再用UP就会乱套。”我们先请林教授来解释一下。

 

林教授:我先用英文来翻译一下(speak in English)。欢迎您,你被我们称作教父。我们等你这次演讲足足等了一年。我们非常遗憾地错过你一年之久。

 

Martin:我保证,我那天非常希望能在酒店里面进行那一次的演说。

 

林教授:有趣的是“教父”说要一遍一遍地思考它。我们在软件行业已经工作了很多年了。我们从C++,Java……所有这些语言都经历了比较长的时间。教父介绍给我们不同的语言。但是从我的这类接受传统教育的软件业者来看,我们接受的是UMLCMM,来自于RUP。人们都希望能非常严格的执行,并且实现起来并不容易。有一些人就在想,为什么大多数方法论都来自于美国。很多人从传统的方法学,转到敏捷,转到极限编程,原因是什么呢?这个我要问问您。

 

Martin:我不认为现在大多数的这样的转化,和改变都来自于美国。为什么敏捷真正的得到了重视?我想是因为学习的过程。当人们拿到一个大型繁重的方法的时候,他们不愿意去使用。当你去到IBM全球服务部门时,他们会给你看很多的文档,但是并没有看到任何真正的产品。另外,我们发现,工程仍然会存在失控的问题。有的时候,我们很晚才会意识到项目要延期了。重型方法论的另一个特点在于它吸引传统工程的开发,认为软件开发是需很准确的预计的。告诉开发者你需要的是什么,之后花几年时间得到一个产品。处于理想状态的时候,这样做是可以的。然而事情并不像想象的那样。因此,我们得到了学习。重型方法中指导的一些方法和实践,实际上不应该被采用。所以我们需要寻找新的方法。在你去探索的时候,你并不知道你走到了哪里,是不是接近了终点,我们就在这样探索着敏捷过程的方法论。我非常幸运的处在一个采用敏捷方法的一个公司。但是现在我们还看不到很多的改变。我现在仍然处在这样的研究过程,我们现在做项目的方式已经和三年前不同了。我相信,再过几年,又会有一个不一样的变化。有的时候,人们会谈起几年前的一个项目,然后会说到那是多么可怕的一个项目,他们的工作是多么糟糕。我想这是很好的一件事情,因为你可以看到你已经学会了很多。你可以看看你五年前写的代码。如果已经不能理解了,这不是一件好的事情。

 

林教授:非常好。我曾经在美国工作了很多年,当时我们有大概75%的项目都失败了,尤其是c++的。你同意么?

 

Martin:因为很多人对“失败”这个词有着非常不同的定义,我如果这样回答就太狡猾(tricky)了。软件有很多不一样的分工, 很多人在传统的计划驱动的项目里面失败了,是因为他们超过了预算。在敏捷方法里面,我们用不同的方法看待失败。如果项目没有(向客户)交付价值,那么它是失败的。所以一个项目可能是被延期,超过预算,但是它向客户交付了价值;也可能是按时,在预算内完成,但是却没有向客户交付价值。这两个定义是不一样的。大部分的项目都是令人失望的,我们可以做得更好。大部分的项目我们可以进行一些我们正在进行的实践,使它变得更好。我们这在致力于软件这个行业,希望能促进它的发展。

 

林教授:还有什么问题么?(开始回答关于正楷与草书的问题)现在Martin Fowler来这里是一个很重要的时刻。我总是感觉到我们软件学院的同学们可以思考一个问题,为什么这些人早年时受过严格的训练,写的书也是关于UML的,你不能批评他们不懂UML这些很严格的东西,他们本身就是UML的专家。但是,现在整个的思潮像钟摆一样转向了XP这一边,这一点值得我们深思。当然跟他们的环境有关系,还有一点,他们这些人,我们接触多了就发现,他们的反思能力特别强。不固执于认为自己对的一方面,他们始终在前进,去调整自己,所以他们发散性的思维和反思能力是值得我们去学习的。但是,问题是,我说过的那句话,中国软件业的现状,2006年,就成熟度讲,大概相当于美国的1986年,整整20年的落差。我们的起步是从一个农民的国家,一个完全手工作坊的时代,要改变到大工业,符合世界软件业的水平,有很多事情要做。正如现在有人开车,中国人开车和美国人开车完全不一样。我们最主要的,在这个时候,软件学院的教育更应该倾向于正规化,倾向于讲rules,讲严格的东西。这不像美国的工业。美国的工业从1986年以后,20年的发展,走过了一段很痛苦的时期。它走过一些很复杂的,非常讲究,而且可以说是教条主义。所以人们对于从DoD(美国国防部)发展出来的,像CMM这些东西,或者是UP这些东西,在美国有时他们进行反抗,他们进行叛变,这是完全可以理解的。但是,回到我们国家现有的情况,我觉得我们现在好像学习“正楷”还是非常重要的,至于现在他们的倾向,他(Martin)刚才也说了,他们也在摸索,他甚至于,回答我那个问题,他觉得他们所理解的感受和我们的感受还是有些差别的。他们认为他们也在这几年,现在做出来和去年比的话,他觉得他们也许会用另一种方法来做。所以他们的很多想法也在改变中。现在看来,这两个极端的东西都对我们有好处,我们可以从中学到一些他们长处的地方,特别是XP,像JUnit这样的软件,在没有code以前就先test,这个我看在软件工程界是已经承认了的。我回答已经完毕,有什么意见可以讨论。

 

Martin:如果我的理解正确的话,我刚才提到中国需要经历一段走向理论化的过程阶段,之后在走向敏捷过程,像XP这样的方法,因为美国经历过这样的一个过程。我不同意这样的观点,包括这在美国也是个必须一个过程,很多人确实经历过这样的过程。我认为在美国,很多项目需要花费很多资金用于表面工作,当你认真去观察事实上的工作的时候,你会发现它完全处于混乱状态。你看到的是他们已经掩饰好的一个表现,在事实上却完全不同。 Alistair Cockburn在他很早研究方法论的时候就已经揭示了这个问题。他研究了一些方法论,去采访了一些项目,询问他们的工作情况。他的做法是很聪明的,他找到项目领导和架构师,询问过程是怎么样的。做了记录。之后,他去找那些真正的分析人员,开发人员,并且询问过程是怎么样的。他对这两个方面进行比较,发现答案根本就不一样。Official Story看起来还不错,但是Real Story却完全不同,显得比较混乱。很多企业并没有采取这种重型的开发过程,我们也没有这样做。XP可以帮助项目解决这样无序的问题,他并没有看到RUP具有有竞争力,这个是在无序性方面的竞争。我们希望公司能够潜移默化,自然而然的使用方法,并且使它向前发展。虽然在一开始使用的时候也是混乱的。在美国可以使用的这些方法,我想在中国一定也是可以推广的。所以我不认为你需要重型的方法,你可以直接跳过这一步。我想说的第二点是,这里对于UML和统一过程有一个不明确的地方。这是两个完全不同的东西,但是通常被混在一起。人们发明UML的初衷是,当你使用UML的时候,可以使你避免使用那些重型的方法。我现在使用UML的频率和十年前是一样的。我所写的书里面也有很多很多UML,特别是关于模式方面的书。UML使沟通变得非常方便。不要认为你可以通过UML对于一个系统进行完整的分析和设计,这也不是UML唯一的用途。我在白板上画UML图,在书中用来解释一些问题,UML具有非常重要的价值。UML有很多应用的方式。在敏捷过程里,UML就具有很重要的作用,当然它也可以被用于重型过程。但是不要把这两个概念混淆在一起。UML是非常重要的工具,有着不同的应用方式。

王海鹏:刚才林老师讲的那一句名言给我一点感触,实际上就是说如果把它比作楷书或者草书的话,我们不能说楷书优于草书或者草书优于楷书,只能说是谁写出来的。如果我没练过的话,那无论是写草书或者楷书都不能拿到台面上的。实际上,就我知道的,在敏捷和建模这两方面实际上是不冲突的,而且有人会把它组合在一起用的很好,比如用feature driven developmentFDD),就是由Peter Codd他们一些人做出来的,他非常强调在前端有一个domain的一个设计,做出一些domainclass,然后再进行一次一次的迭代来进行一种敏捷的开发。我想这可能就是说,如果是草书或者楷书的话,那它可能就是介于其中,行书,的一种做法。另外,林教授说Martin先练楷书,再转到草书,我想到中国书法家有一个人物,也是走过了这样的道路,就是八大山人。他早期的书法都是很规矩的一板一眼的有侧锋入笔,再提按,再折…练的是颜体。但是在他的晚期之后,他的所有的转折都已经圆滑了,已经变成草书那种写法了。我想这个可能和Martin先生的经历有一点点类似。提到这个比喻,是我刚才听到林老师的比喻之后想到的一些问题。




原创粉丝点击