zoukankan      html  css  js  c++  java
  • 敏捷开发的推理

    我查阅了一下敏捷开发相关的资料,结合我长期对敏捷开发的实践,我将对敏捷开发的本质进行一次探讨。本文我打算理清敏捷开发的核心,并由核心衍生出它的价值观。我希望能够通过抛出本文这块砖,能够引出高手的玉来。

    符合现实的软件

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

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

    而与此不同的软件,则是另外一种现象了。改变软件的代价是相当低廉的。改变软件,实际上只是改变硬盘上的磁性。改变软件的容易性,带来的结果是: 一、软件开发者容易以自己的想象来决定软件怎么做。 开发出一个无用的软件,比起因为出错而要毁掉待出售的10万张地图,比起因为工艺漏洞而要招回已经出售的计算机来讲,代价太低廉了。 二、软件更加具备符合现实的条件。 开发者让软件与现实相适应,所要付出的代价非常低廉。

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

    简单

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

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

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

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

    反馈

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

    因而,在做一个软件之前,首先要找到能够给出反馈的人。如果连能够给出反馈的人都没有,那么这个软件就没有做的必要了。

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

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

    沟通

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

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

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

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

    勇气

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

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

    在开发的时候,我们可能花了很多时间写了很多代码,但要决定放弃已经写过的所有代码,这是非常需要勇气的。而如果能够做到这一点,在软件开发上就占据了非常有利的位置。比如,我们可能会花大量时间去写页面原型,以希望能够得到用户反馈。在确定得到用户反馈之后,我们可以完全放弃原型代码,进而可以得到更加符合现实(也更加简单)的代码。

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

    迭代开发

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

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

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

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

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

    结束语

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

  • 相关阅读:
    OpenCascade Ray Tracing Rendering
    Create New Commands in Tcl
    OpenCascade Modeling Algorithms Fillets and Chamfers
    OpenCascade Modeling Algorithms Boolean Operations
    Construction of Primitives in Open Cascade
    Open Cascade Data Exchange STL
    Tcl Tk Introduction
    Open Cascade DataExchange IGES
    Netgen mesh library : nglib
    Hello Netgen
  • 原文地址:https://www.cnblogs.com/daichangya/p/12959105.html
Copyright © 2011-2022 走看看