The Agile Way

作者:博文视点策划编辑李雨来

敏捷中国大会在周六结束了,但是思考仍旧萦绕在参会者脑海中。ThoughtWorks带来了一些成功的演讲,这让我们认识到:原来软件还可以这么开发。

在学校,我们所学到的软件工程无非是瀑布、CMMI等传统的软件开发模式和思想,它讲究文档、一个独立的设计时间等等。但是Agile给了我们一些不同的概念,几乎是颠覆性的。要想把从学校或者培训机构学来的东西融入到一个Agile的团队中,确实需要一些思想准备。

也许应该思考一下为什么会产生Agile思想,这也就如同为什么英国会发生工业革命一样。或许在敏捷宣言发布之前,这些敏捷的先驱们觉得现行的体制给了程序员很大的束缚,而且我们的生产效率在下降。他们发现了传统软件过程中一些过于注重的方面,于是他们发表了敏捷宣言:

人和交互 重于 过程和工具

可以工作的软件 重于 面面俱到的文档

客户合作 重于 合同谈判

随时应对变化 重于 遵循计划

其实回想一下我们在一些营销的书籍中获得的一些概念,我们就不难发现,产品应该为客户提供价值和客户满意。当然,程序员是一个比较特殊的团体,他们更像一群艺术家,时刻打造自己的代码,让它看起来更酷一些。但是,软件不是科学研究,也不是艺术作品,它是商品,为客户带来价值的!所以我们应该放弃一些偏执,回归到市场中来。

那么Agile如何为客户带来价值和满意呢?我们来看看传统的软件开发过程吧:

初期的谈判,收集需求,设计,编码,测试,部署,交付

这也许足够好了,但是在实践的过程当中我们会发现结果可能跑偏。开发了很长时间的系统可能并不是客户想要的东西。

那我们引入Agile,客户会有什么新的体验呢?

初期的谈判;这个是必然的,要不谁会给我们一个项目呢?

客户圈定第一个Sprint要实现的Story;一般一个Sprint2个星期,一个Story就是一个需求点,它应该足够小,并且可以很快速的完成。

一个Sprint结束之后,我们发布一个Release;这时,客户就可以看到这个Sprint过后的结果。很快客户就能了解到这个项目的进展情况,而且客户还能在整个系统完成之前指出一些跑偏的地方让开发者进行更正。

作为客户,你会看到什么?每两周基本上就能看到一些进展,这些及时的沟通减少了最终交付时的偏差。而且我们会认为所有的事情基本上在掌控当中,就算出现什么延期至少可以在每个Sprint之后就有所察觉。

对于客户来说,他很满意,对于程序员来说,事情就没那么的简单了。需要一些Agile的实践来使每个Sprint可以顺利完成。比如结对编程、TDD、重构、持续集成等等。当然,这些实践都可以从教科书中获得,但是,Agile一个持续改进的过程,所以我们不应该上来就把所有的实践都用上,毕竟每个团队都是独特的,他们会在这些实践上加入一些自己的东西,或者有些实践并不适合这个团队。

其实实施Agile并不是一个照本宣科的过程,现在我们面临的可能是一些对敏捷的误解。使用TDD、重构、持续集成,我们就Agile了吗?其实不然。回想一下敏捷宣言中的几句话吧,你会从中得到一些启发。

还有一点需要我们了解的就是AgileToyota的渊源,这很重要,可以让我们深入的了解Agile的一些思想精髓。众所周知,Toyota有着自己的一套Toyota Product SystemTPS),而TPSToyota在汽车行业竞争如此激烈的情况下立于不败之地的法宝。这是管理学上的内容,但是怎么就和Agile扯上关系了呢?我们往下看。

TPS是基于精益(Lean)思想的,Lean的核心就是与浪费做斗争,持续改进,精益求精。当然,与此思想交相呼应的还有6Sigma。如果对6Sigma有所了解的人都会知道如何使用SPC统计图对生产过程进行控制和改进。

当我们深入Agile思想之后,我们会发现它与TPS在“精神”上如此的相似!如果加以对比,我们会更加信服:

与浪费做斗争:文档在Agile中被认定为在某种情况下是一种浪费!它只能说明你写的代码不易阅读,非常复杂。相比人类的文字,程序的代码在思维的表述方面更为精确!除非代码需要非常复杂,否则就不要写文档。当然,这个前提是要求我们写的代码要跟文档一样好读。

想想看,把写文档的时间放在写代码上,你会多写多少行代码?或者多完成多少个Story

持续改进:想想看我们的重构,不单单是为了让代码结构更加合理,更是让代码更加容易看懂。当然,整个团队在向Agile进发的路上也是一种持续改进。

精益求精:虽然Agile的目标是可以工作的软件,但是这并不是简简单单的“糊弄”。重构不仅仅是为了持续改进,而且也为了精益求精。

Agile说了这么多,基本上都是一些正面的描述,但是,在软件开发领域银弹,Agile不是万能的。实施Agile就像练功,如果仅仅修炼招式,那么总有一天这些招式会被破掉,重要的是修心。掌握Agile的核心思想——持续改进,这样,我们就可以得到一些意想不到的东西。

反思:我们出版行业的Agile在哪里?

博文视点新书推荐

==============================

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...