Danny Sabbah:大家早上好,谢谢各位,很遗憾我不能用中文介绍,我希望我讲的话题大家能够明白,今天讲的是软件开发的前景以及IBM所看到的一些发展态势,特别Rational方面发展的态势。我会讲到我们面临的一些挑战,我们都是软件开发商,我们都面临着很多的挑战,我会具体分析这些挑战,然后介绍一下我们认为这些挑战将会对软件开发产生什么样的转型影响,我们如何能够在这种变化的条件下,如何面对这些挑战实现既定的目标面向实现服务的架构也就是SOA。
如果看一下今天商业环境,特别是软件开发的商业环境,我们发现我们受到速度、全球化、新的管制、特别在全球范围内开展业务的时候,我们必须要建一个软件,它能够适应于各种不同管制的要求,同时也要被迫迅速做出变化,这样才能保持它的竞争力,同时也能够使许多所服务的企业从中受益,我们受到上述所有因素的挑战。除此之外还有非常有意思的转型,也是我们在今天的市场中所看到的,我到中国来的时候就感受到这一点,而且感受非常强烈,很多商业模型都在发生转变,如果想一下一个新兴的经济体,没有任何一个经济体可以像30、40、50或100年前的方式发展,所以信息技术确实触发了迅速的变化,也触发了技术生态系统的迅速变化。这些企业必须要随着速度的要求来重新定位自己来发展,这是他们面临很大的挑战。
我提出了一些全球管制方面的例子,我们必须要应对这些管制的变化,我们因此要做出这样那样的变化来迎接它。这些管制是面向业务的发展方面,我们作为开发商必须要改变我们的重心,特别在新的市场当中要更加注重新的市场新的商业模式以及不断产生新的想法。
这是从另外一个角度来说,我们在实施有效解决方案时候看到的情况,即使在新的市场当中,即使我们面临崭新的业务,你们很快会发现你在创造一些软件,你在创造自动化,特别在IT资产中实现软件和自动化,这是随着要求的变化,随着应用不断更新,随着管制不断变化对你提出的要求,而且你发现软件演进方面有一些问题,虽然你不是长期进行软件的开发,但是软件演进变得越来越难管理了。这是一个电子器材零售商的例子,从其中可以看到所有的应用资产之间的相互关系和相互依赖性,这是一个中等规模的零售商,并不是很大型的企业,这只是四页报告中第一页。正是在这种特定的类型下,这是一个特定软件生命周期的环境,我们现在面临着一个事实,就是我们要加速自己的变化,要不断创建、修改、管理IT资产的演进,所以情况有所不同,在一个集成开发的环境之下,你需要坐下来,然后创建简单的Java代码,写一些简单的Java程序或者C++程序已经够了,现在情况完全不同了。现在很多企业和业务人员都面临的问题,如果他们不能应对这样的挑战就不能取得成功,因为在今天以IT为主导的环境当中,我们都面临全球的竞争压力,你或许要改变自己,或许要让自己实现自动化,或者扩展自己业务生产的领域,或者进入一个新的具有新的管制性条例的市场当中,否则只能死路一条。所以我们要了解软件开发的角度就是当我们创建出一个应用的时候,当我们在写可重用代码的时候,当我们想要建立一些解决方案来解决业务问题的时候,我们必须要考虑,我们不仅要解决今天的问题,而且我们所建立的软件应该是能够实现迅速演进的,因为不用多长时间,这张图上所显示的相互关系,随着公司的购并,随着新业务的出现,随着进入新的市场,这样复杂的相互关系都是我们大家要面临的新问题。
软件开发作为一个规则,也必须要继续保持下去,在我们讨论业务的速度以及业务转型速度的时候,实际上我们已经对个人的生产力提出了很高的要求,同时对大家作为整体软件开发的社区和一个群体给了更大的压力,我们必须要更快做出这样的软件,在今天的环境当中,你所要做的就是你可以在北京四处看一下,你可以看到各种各样起重机在不断工作,来建立起高楼大厦。北京是一个很好的城市,我们实际上可以更快的建立一个大型的购物商场,也许建大型商场的速度要比一个公司实施一个ERP的系统要更快一些,所以我们今天面临的主要挑战就是让我们软件或者让软件的资产能够尽快地运转起来,使我们在不断前进的过程当中,我们可以在很短的时间内也可以和城市共同的发展。
现在可以看到互联网以及个人电脑的革命,实际上通过这些革命把计算的概念带给每一个人,我们不断开发各种互联的装置,我们在利用带宽,这时候信息技术和计算的资源实际上已经影响到了所有人的生活,而且是每天的生活。所以社会联网、社会计算的出现已经给我们带来了很多的压力,要求我们做出更快的变化,而且要求我们提供更多软件的资产,我们要以一个可管理的循环模式来管理它。同时要有开发工具和开发平台,你必须要考虑一个事实,如果只是着重于提高个人开发者的劳动生产率已经不够了,而且也不具有吸引力的,我们必须要在广泛的范围之内提高它的生产率,这样才能确保我们自己能够随需应变,而且能够适应情况。我们要考虑到业务的转型,还有应用的采纳,所以作为一个真正的软件开发者必须要考虑新的变化,而SOA的概念就是一种集成的概念,是把现有的资产集中在一起,可以提高能力。现在全球部署还有新兴的商业模式,如果我们不谨慎,不了解软件的演进,不考虑建立一个软件开发的生命周期管理的话,我们在整个进程中就会出现中断,我们就会迫使自己不得不在商业和社会的演进过程中放缓我们的脚步。
软件工程化正在成为核心和具有创造性的资产,对于任何社会都是这样,如果我们不能把它作为一个定律遵循的话,我们就会看到它不是一个资产,而将会成为前进道路当中一项障碍,阻碍我们的步伐,所以我们如何能改变这个状况呢?很遗憾的是每次我们看到一些挑战的时候,比如互联网带来的挑战,我们都会发现挑战与机遇并存,我们在接下来的时候会讲新的技术是什么?我们有哪些新的愿景,以及那些新的想法会帮助我们解决这些挑战难题,讲到群体和社会的联网以及模块化,所谓模块化是一个老的概念,模块化是我刚做软件开发时候比较流行的,那已经30年前的事情,模块化是面向服务架构的核心。就这个具体观点就可以了解,它是我们解决软件演进过程当中复杂问题的关键。第三个想法是围绕权力和管理,我们必须要有纪律,因为没有纪律以及不能了解和其他人相互关系的时候,我们做软件开发的时候不是作为个体来做的,我们是一个灵活的组织,如果不能了解这一点,就不能够应对我们一直讲的复杂局面,所以今天试着给大家在这么短的时间内讲一下每一个发展趋势当中我们的见解,我们从Rational角度如何看待它,这些因素是如何聚集在一起,能够让我们塑造一个全新的软件开发平台,这个软件开发平台能够帮助我们提高软件开发的能力,而且也可以使一个复杂的系统不断演进。
首先要认识的一点就是软件的架构是非常重要的,另外需要认识的就是软件架构同时也是易碎的,讲到这个架构必须是模块化,必须是松散的联合,这里好消息就是计算能力因为摩尔定律不断加强,现在用的带宽也不断加强,这是由于在.COM的时代所建立起来的带宽,我们有一个非常松散的架构,而且这个架构应该是模块化的架构。在我们面临各种沉积层的时候,可以看到以前遗留下来的应用和层面堆积在一起我们不断看到新的应用,新的技术叠加在老的上面。这就像我们考古时候发现人类的演进和地质的演进,就像土壤在地质演进过程一样,我们要实现新的演进目标必须叠加在旧的目标层面之上,我们在软件开发上面建立新的规律和新的定律这和考古学是有类比的,我们要能看到老的系统,要能理解老的系统这样就不必把老的系统丢弃,同时我们又可以建立新的系统,在更大程度上看来,如果你看一下人类大脑的发展架构,它是我们知道最复杂的一个信息技术系统,它是有很多软件的结构组成,而且是专门化的,也是专门经过优化来解决某些具体任务的。但是演进不是白手起家做一些事情,是不断优化目标,当需要一个新的架构的时候,就建立和创建一个新的架构,然后把这个新的架构和老的架构完美结合在一起。我们将要建立起一个软件开发环境中的规则定律,这个规则和定律能够让我们以上述同样的方式来发展,当你想到建立软件资产的时候,首先要想到架构,想到松散的耦合,想到模块化,想到演进,要想到上述的特点,要了解它的定律和生产周期。这不仅仅是创造新的功能,要在软件开发环境中迅速理解,关键是要理解架构的考古问题,当你进入现实环境中,遇到现实商务问题的时候,在IT资产中这是你真正会面临的问题。我们可以看一下曾经谈到的这些方向,加速器是剧烈的全球竞争,迫使我们改变业务模式,改变软件资产,也就是运行这些服务的资产。我们还说到沉积层的阻挠因素,让我们无法前进的因素,我们还要利用新技术的优势,新创的速度和能力,这样才能加快我们对软件开发的了解,同时还要考虑解决这些问题的方法。这里问题是要利用和控制这些加速器,把他们放在一起创建解决方案解决上述问题。
第一点我们称为社区,我们已经从开放源代码社区和开放运动社区了解了很多东西,关键是要处理当前的复杂问题,关键是开放的运算,我们想一下建立一种松散结合在一起的结构,我们可以考虑让系统实现模块化,业务模型是要变化的,在我们创建一个供应链的时候,选择合作伙伴的时候,就会出现各种各样的变化,变化是非常迅速的,因为全球监管的变化,全球市场在逐渐开放,需要的是一种开放的技术,这种支持的基础技术很重要的,因为如果你技术不开放是锁定的,你的技术演进速度就会变慢,这不是可有可无的,是必须有的条件,还得有演进中松散的架构,这样才能适合一个可以迅速变化的模式。专有的系统已经过时了,专有系统是上一代的演进结果,他们是上一代的考古问题,今天的关键是开放的系统,而且在很多方面关键是要创建一种标准,通过利用互联网让这些标准逐渐成型,通过开放源的群体共同开发这些标准,这种社会联网,把它用于软件开发的理念,让我们有可能形成各种社区,也给我们带来非常赋有挑战性的理念,这一点很有意思,是因为全球都有同样的趋势,这是一个新的模式,这种新的模式下,是在全球协作实现软件开发,我们不可能摆脱这种模式,这具有重大挑战,因为对业务模式来讲负责具有挑战性,今天软件厂商要利用这一点才能实现自己的发展,才能够有自己的价值。但是在Rational在IBM,我们已经采纳了这样的方向,我们也不会回头,这将成为我们总体战略向前发展最重要的环节,这是不可或缺的一个环节,是非常重要的,我们会演示它是软件开发的核心,软件开发平台的核心,软件开发平台能够把信息组织起来传播标准。这种开放源软件社区的概念关键在于把互联网技术基于明确的交流和成本经济性上面,这样就可以有利于共创知识产权,它的关键在于创新,也通过它能够发挥所有人的潜力,我们大家都可以把自己的创意变成现实,通过群体来共同创新,我们可以共同为世界来创造价值。同时他们也告诉我们,通过这种系统我们可以把技术从专有的实验室里拿出来放在一个开放的环境下,可以进行测试,大家也可以理解这些新的技术,这些技术经过测试可能会被接受,也可能会被放弃,这对于具体的企业来讲是具有挑战性的,因为某一个具体的概念,某一个软件可能会被抛弃,这样的想法令人很不愉快,但是如果我们不挑战自己就不可能成功,这就好像一个大学学校的环境中,你会不断接受考试,会被挑战,人们会看你是否真正了解所学习的知识。在这样一个开放的社区中在大家共同参加的环境中,会不断接受挑战,来考验你是否能够创造价值,增加价值,这是和过去实验室环境中不一样的,实验室是一个孤立的环境,要创造一个专有的软件,迫使世界来接受,因为世界没有其他的选择,这是一个新的模式,创建价值测试创新的新模式。这对于技术的演进来讲非常重要,对于软件开发,软件设计是非常重要的,这种模式不会离去会成为我们软件开发未来的重要环节,如果有人不愿意接受这模式,这些人会被历史的潮流淹没,因为开放源会不断前进,最终会把他们抛在后面。
社区有不同的类型,因为社区的类型可能由厂商发起的,比如Eclipse。在Eclipse上面,我们做出贡献,我们也进行测试,在我们创建Eclipse的时候,并没有什么保障,我们希望围绕着Eclipse创建一个社区,让大家接受这个技术,但是对此并没有保障,事实上我们完全没有想到人们接纳Eclipse的速度会这么快,我们也没有想到人们会加入我们的队伍,帮助我们共同发展Eclipse,这就是为什么我们认为要脱离IBM,把它作为一个开放的标准来推出,我们会继续这样做,把它作为IBM软件战略Rational的重要环节。我们会逐渐的发展一个基于社区的开发环境,现在我们已经讨论这个工作,我们会利用开放源作为一个重要环节,帮助各位了解协作工程设计的意义,并且接受你们的测试和考验,看一下我们自己是不是真正了解它的意义所在。这是我们从现在开始开发提供软件的方式。我们已经证实开放源软件可以和商用软件共存,我们在很多产品中都看到这一点,我们今天开发的所有软件业务的产品都带有一定的开放源软件,将开放源软件纳入这个产品之中,我们已经创建这样一个模式,可以把开放源和商业软件结合在一起,这对于我们来讲是让系统更加开放的模式,让系统中能够纳入社区接受的内容,让我们不断地改变和演进我们的标准,并且参与社会的活动,我们不会控制这些社区,我们不会控制这些技术的演进和软件的开发,但是我们会参与其中,不断做出自己的贡献。我们在IBM内部所做的是希望把开放源开发环境利用起来,让它为我们找到不同的演进形式,我们一直做的是社区源,社区源的意思是我们利用开放源开发的原则,让源代码开放给所有人,在一个封闭的社区内部开放,这个社区是封闭的,有门的,比如在40多个地方的几十个开发人员。
现在从商业软件到开始利用开放源的方法开发商业软件,我们这样做的原因是这里有一定好处的,也就是说与开放源有关的开发流程是有好处的,因为它是有一定原则的,并且在开放源模式中有一定可以应用的。我们在我们理解中已经考虑到对软件开发流程的修改,从参与Eclipse、Apache、Linux开放源代码等各种当中,都看到开放源社区和开放源软件。社区源概念是很有意思的,我们所做的是确确实实公布了我们的软件,这是在一个软件开发环境下公布的,我们可以这样说DB2、WebSphere、Rational、Lotus、和Tivoli都有共享的一些组件,这些组件是可以用IBM内部开放源方法的模式来开发,这个组件是共享的,谁都可以在没有控制的情况下做出自己的贡献,我们可以把它和过去软件开发的公认模式比较一下,在过去有一个固定的等级结构有一个固定的模式,而新的模式可以发挥我们的潜力、创意,整个软件开发的团队都可以发挥他们的创造性,随时随地的进行开发,加速了共同组件的共享和开发,在整个产品开发过程中都可以利用,这是一个关键的原因,因为它我们就有可能在中间件开发不同的功能,另外我们又可以迅速把这些功能共享,放到其他的市场,就有可能提供一个完整的SOA端到端的平台。整个生命周期服务都是共享的,开放源放到商业软件中的做法是非常重要的改变,会改变软件开发的方法和环境,Rational部门正在改变软件开发环境,让开发人员可以越来越容易在封闭的社区中工作,我们所做的就是利用SOA的原则,通过创建松散的结合在一起的架构,我们Web Service是以软件为中心,遵从标准的,Rational开发平台会融入越来越多开放标准,W3C的标准也会让我们重新利用这些标准的实施在IBM内部迅速把新的产品推向市场,一个例子就是一个新桌项目,这项目是新的桌面工具套装,或者今年年底推出我们利用这些原则来创建一个开放的社区,这样就可以共享开发的成果,把基础的组件,模块化的能力进行利用,让我们分解我们产品,让他们更容易利用和实施,这是我们面对软件开发越来越复杂环境的做法。我们有300多个项目正在运行,这是IBM软件开发的300多个项目,通过封闭的社区开发流程实现的,很多的关键元素,比如工作流引擎,这是用来创建基础设施的,这是很多不同项目共享的一个技术,而工作流引擎可以实施软件开发流程,并用Rational来设计这个流程,也会以共享的流程为基础,它会建立在一个业务的SOA上面,我们会在此基础上不断发展。我们不仅讨论SOA,而且IBM内部也利用SOA让我们产品更快推向市场,同时给予我们更大的灵活性。
这里有几个例子来说明老的做实方法和新行事方法对照,在一个开放源头当中,或者封闭源的项目当中,你投入多少要根据需求而定,我并不想详细讲这个问题,大家可以自己来看。我们最佳实践或我们的理解,我们理解老的事物和新的行事方式的区别,我要鼓励大家对此了解,这样就可以在自己的组织当中,或者在自己软件开发的流程当中确定开放源的开发,我们也会帮助大家实现这一点。
我们所要做的就是要利用网络的影响,还要利用互联网、社会计算能力、社会联网能力,把它放在软件开发环境当中,同时这种方法能够让我们加速软件开发的程序,不论是一个封闭有门的社区还是一个完全开放的社区都没关系,在这两种环境之下,网络的影响能够让我们实现共用,这是以前没有做到的。
我们已经讲了很多的模块化,在SOA架构的核心当中,这个图显示不是一个模块系统松散结合,不是我们所理解松散结合的架构,这也就是它为什么很难被改变,很难对做业务时候需要的速度进行响应,与之相反我们想要做的是显示在这里的,除了不要把重点放在技术之外,除了关注技术的发展,还要了解你的业务,你不是要看这些单一的资源,要了解你的业务如何经过变化成为模块化的业务,这样你就从一个单一仓库式的概念过渡到集成点的概念,它能够在各个模块化的服务之间建立起连接接口,实现一个完全集成化,而且高度灵活的系统,这里颗粒度是非常重要的,而且一直以来也非常重要,我在这里提出并不是一个新的概念。如果我们想一下模块化的设计,想一下对象的设计,如果我们想一下在UML当中所定的这些规则,实际上我们不断修改这些规则,考虑到技术的清晰度,技术是基于互联网的计算之上来发展起来的。为了能够解决软件的考古,我们做了上述的工作,我们首先要做的就是要了解业务,要了解各个与众不同的因素,这样才能确定工作的优先顺序,并且确定如何对待软件的沉积层之间如何分解,我们还要了解我们究竟是要改变哪些因素。因为很遗憾的是我们没有人可以在一张白纸上画图的,我们大家都不会这么奢侈。我们都是要在一个很广泛的环境当中作业的,不论一个小的企业,小的业务还是一个大企业大的业务,你都必须要考虑价值链,考虑供应链,而这个价值链、供应链在某种形式上必须要实现自动化,而某种形式上也必须要适应于互联网,所以如果在一个企业当中,或者你想建立一个新的业务来适应更广泛的供应链和价值连,从某种程度来说集成是关键,模块化是关键,互联网之上的模块化是关键。
所以XML和XML的标准建立起一个公共的语言,我们可以在一个企业内部各个数据仓库之间进行交流,或者在各个业务之间,在全球化部署范围内可以交流和通话,不论中国、美国、欧洲都要正道一个共同的语言,这种语言必须是要简单的,这也就是为什么我们开始创建基于网络服务,还有以网络为中心的架构,也就是我们所说的SOA,我们想要找到一种方式来确定模块化,而且把模块化和颗粒度因素应用到我们服务当中,我们用它创建新的商业模式,找到新的合作伙伴,建立新的合作链。我们可以创建和修改IT系统来实现零节度,我们可以重新配置,就像我们做拼图一样,我们可以改变拼图每一个块的形状,在全球化过程当中,我们要快速转型,适应每天面临的新压力。
我们已经有了一个非常稳定的老代码,已有的代码,我们必须要迅速改变,我们要有预见度的改变,我们需要零节度,同时我们也需要质量,在生命周期进行修改和变化的过程当中,质量也是非常重要的。SOA并不容易做到,它很难,因为它是建立一个松散联合的模块化架构,它需要变化,需要反映来转变商业模式,它实际上是IT资产与核心的治理相匹配的关键,所以这也就是为什么我要讲第三个因素,就是治理,治理非常重要,治理就是权力所在。
我们必须要有软件开发的方法和流程,这使我们可以迅速决策,也使我们能够确定相互的依附关系,还有确定我们的权力,这可以是架构,也可以是软件的开发者,他们要集成在一起,他们要能够利用所创建的资产从中受益,同时要不断调整和变化,我们要有一个衡量,要使所有这些工作和公司治理相符合,和公司目标相符合,我们要在软件开发环境中实现IT治理。
要实现真正的治理,真正的速度和零节度,我们需要一系列因素,我们需要了解整个生命周期,我们要有骥可察,要有可预见性,如果我们不能够理解,在我们软件架构和软件模块之间相互关系和相互依赖关系就不能实现零节度的开发,我们必须要定义软件开发过程各个模块,在治理发展过程当中,我们必须要了解它的复杂程度,因为复杂程度会相应转化为风险,同时我们也面临不断把复杂程度考虑在内的压力。所以我们要把工作困难程度做一个排序,这是很难做到的,我们看到软件治理中的发展。在2005年以后,重新利用会发展一个根本的变化,在现今世界当中,基本上70%复用程度,30%是新创建的能力。我们必须要让让它变得可以管理,而且必须是模块化的灵活的架构,并且也是可以预见的,风险是在整个流程当中,整个生命周期当中得到管理,所以我们要基于业绩,基于结果,要实现根本的协作,要建立社区同时他们的结构是非常恰当的。同时要有架构师的演进,而且应该具备迅速管理的流程,没有任何官僚体系存在,这就是为什么我们要实现零节的开发,要通过基于互联网的方式进行开发,这就是我们所说的能源统治,这是一种开放源社区当中我们要实现的,我们为什么需要这些,是因为我们需要更快的速度,如果我们不能迅速变化,不能够做迅速的软件开发就不能实现速度的要求,有很多体系是非模块化的,不是灵活的,就会延缓整个流程,我们必须要让互联网不能非常极端的改变我们的生活,而且我们要管理风险,要建立起软件领域的治理,同时要考虑这个模块化的架构,要建立一个基于社区的开发环境。要把它放在新型软件开发平台环境当中,所以仅建立一个基于社区的开发平台是不够的,仅建立一个模块化的架构是不够的,必须要有一个非常明确的风险管理和治理的体制,要把它放在整个的生命周期管理当中。