敏捷开发的价值观

 

结合我长期对敏捷开发的实践,我将对敏捷开发的本质进行一次探讨。本文我打算理清敏捷开发的核心,并由核心衍生出它的价值观。我但愿可以经过抛出本文这块砖,可以引出高手的玉来。spa

 

符合现实的软件

软件是为着解决现实的问题而产生的。从而软件存在的意义就是与现实相适应。敏捷开发的核心即:符合现实的软件。一个符合现实的软件,才可以可持续地与现实共同发展。一旦软件与现实背离,软件的生命周期也就到告终束的时候了。翻译

现实的世界是动态变化的,人类造出来的东西,每每是落后于世界的变化的。如,地图造出来以后,可能又多修了几条路,几个建筑;刚买了一款高配置的计算机,几个月后,本身的机器配置又处于被甩的地位了……这些变化,人是被迫要去接受。由于这些东西属于硬件,人在目前还没法轻易地改变硬件。blog

而与此不一样的软件,则是另一种现象了。改变软件的代价是至关低廉的。改变软件,实际上只是改变硬盘上的磁性。改变软件的容易性,带来的结果是: 1、软件开发者容易以本身的想象来决定软件怎么作。 开发出一个无用的软件,比原由为出错而要毁掉待出售的10万张地图,比原由为工艺漏洞而要招回已经出售的计算机来说,代价过低廉了。 2、软件更加具有符合现实的条件。 开发者让软件与现实相适应,所要付出的代价很是低廉。生命周期

因此,敏捷开发的核心就是符合现实的软件。为了造出符合现实的软件,才有了进一步的价值观及方法论。开发

 

简单

 

简单,是在人认识到事物的本质的时候才可以得到的。在开发软件的时候,咱们每每疲于应付各类各样的需求。不多有人可以将复杂的需求化为简单的概念。好比,作一个音乐软件,有“我喜欢的”、“最近播放”、“最新添加”等不一样的性质的歌。有些开发者会作出三个列表来存放三种性质的歌。而实际上他们的本质是同样的,即播放列表。区别在于触发加入播放列表的条件不一样而已。于是只须要作一个列表,在列表中标记每首歌的触发条件。文档

 

把软件作得很复杂,一般说明软件所抓住的本质还不多。须要再好好考虑一下如何进一步进行简化。软件的概念简单,一方面可让用户很容易理解和操做;另外一方面可以适应世界的变化。再拿以上的音乐软件来讲。如何作成三个列表,再要加一个“听了又听”的歌,又得建立一个列表。而使用一个列表的方法,则只须要处理“听了又听”这个触发条件。原型

 

符合现实的软件必然是简单的。因此,敏捷开发的第一条价值观是:简单。咱们在实施敏捷开发的时候,都是围绕“简单”这一价值观而进行实施的。即,时刻保证软件的简单性。简单性包括两个方面:一是对于用户而言,概念很简单;二是对于开发者而言,开发的技术及代码很简单。开源软件

 

软件的可持续性也取决于软件是否简单。可持续性是指,快速响应现实的变化。一个复杂的软件,要么让用户无所适从,要么让代码没法维护。这都将致使软件没法持续。这会迫使咱们以制造硬件的方式来开发软件。硬件是在无可奈何的状况下才丢掉从新升级(计算机在实在没有办法用的时候,才买新的),要让软件也这样作,软件开发低廉代价的优点就白白浪费掉了。class

反馈

一个软件要符合现实,就须要经过现实的反馈来发展。软件前进的动力是现实的反馈。敏捷开发是欢迎现实,拥抱变化的开发。强调该条价值观,是为了消除开发者容易犯的错误——以本身的想象去决定软件怎么作。软件

于是,在作一个软件以前,首先要找到可以给出反馈的人。若是连可以给出反馈的人都没有,那么这个软件就没有作的必要了。

反馈的重要性,更能够这样说:矛盾推进事物的发展。反馈是指出不足的矛,软件是弥补不足的盾。在矛的不断攻击之下,盾才能不断完善。矛之不存,盾何以壮。

在方法论上面,敏捷开发强调快速发布版本,取得现实的反馈而不是开发者大脑中本身想像的反馈。若是开发者正好也是使用者,那么软件作成的概率就要大不少。开源软件大多数都是开发者本身要解决问题而产生的。

 

沟通

沟通是开发者取得反馈的手段。一个优秀的开发者,是善于沟通的。沟通包含口语、写文档等各类方式。优秀的开发者应该可以清晰而有条理地表达本身的想法。

现实世界中,人们广泛认为:软件开发者由于跟机器打交道,从而是内向的,不善于沟通的。实际上,这样的开发者不能算是优秀的。他们所作的事情,更多地是把需求转化为计算机语言的工做,即翻译员。而如今都出来谷歌翻译了,人类语言翻译成计算机语言只是时间问题了。

沟通的目的是进行思想碰撞。在沟通当中了解别人的思惟方式,表达本身的思惟方式,进一步扬弃为更加优秀的思惟方式。在优秀的思惟方式之下才能保持让本身与现实相符合。优秀的开发者是不会放弃获取优秀的思惟方式的机会的。

在敏捷开发当中,提出这一价值观,正是要开发者变得优秀。放弃优秀的开发者没法适应敏捷开发。

 

勇气

在现实生活中,缺少勇气比较常见。好比,不敢大大方方地表白,不敢尝试新的事物……在软件开发领域,缺少勇气更是常见:技术更新好几代了,公司还不敢使用新技术;公司不敢尝试新的开发模式(敏捷开发)……

勇气,本质上来说,是对现状的否认。人们每每一厢情愿地相信永恒;一旦肯定,就不肯意改变。这正是勇气的用武之地。勇气令人去否认永恒,拥抱改变。勇气是创造的源泉。人没有勇气,人就永远是他如今的这样了,正是勇气才迫使他去改变。

在开发的时候,咱们可能花了不少时间写了不少代码,但要决定放弃已经写过的全部代码,这是很是须要勇气的。而若是可以作到这一点,在软件开发上就占据了很是有利的位置。好比,咱们可能会花大量时间去写页面原型,以但愿可以获得用户反馈。在肯定获得用户反馈以后,咱们能够彻底放弃原型代码,进而能够获得更加符合现实(也更加简单)的代码。

敏捷开发强调勇气这一价值观,正是要开发者去拥抱现实的变化,让开发者及软件朝着符合现实的路线走。

 

迭代开发

讲完四个价值观以后,接下来我把四个价值观联系起来,获得一个方法论——迭代开发。

如图所示,简单是软件开发的起点,也是软件开发的终点。

说它是起点,是由于,若是开发的东西仍是复杂的,那就有必要把概念弄得简单一些。这包含两个方面的行动:1、把复杂的系统砍掉一半的功能(广度上);2、尽量对各个功能进行抽象(深度上,参考前面音乐软件的例子)。

接下来,咱们拿着简单的软件(或者软件原型)进入沟通环节。咱们能够在两个方面进行沟通:1、与用户沟通软件的逻辑是否知足要求;2、与开发者沟通软件是否在技术上代价很高,如何权衡。

沟通以后,咱们能够获得现实的反馈,在现实的反馈之下,咱们才有勇气进行改变,使用咱们的软件继续维持其简单性。这就完成了软件的一个迭代。

 

结束语

敏捷开发不只是一种开发方法,更是训练本身心智的手段。敏捷开发所训练的是:让人作符合现实的事情。在作这样的事情的时候,人更尊重的是活生生的现实而非权威(你尊重现实),人获得的是对现实敏锐的反应能力(现实回敬你礼物)。