敏捷思想就是那四条敏捷宣言和十二条基本原则,很抽象也很乏味。就好像那个著名的“见山还是山,见水还是水” ,没有过这种经历的人是无论如何也不能体会和理解它的含义,而有过这种经历的人则会感叹佛的博大精深。Scrum、XP、FDD等等方法是敏捷实践,他们是一些比较具体,看得见摸得着的东西,但同时也各有侧重,对敏捷的反应比较片面。
那么宣言、原则、实践,他们是什么关系呢?宣言实际上就是核心思想,就说明了敏捷到底是一种什么样的思考方式。但是这个东西真的很抽象,一百个人可以有一百种理解,因此又加上了十二条基本原则,原则指导你做事的方针,当你在做一件事而又不确定哪种方法正确时,就可以参考一下原则,看看是否与原则相违背。但是原则这个东西也很抽象,就算是大家都遵守同样的原则,也可能会有各种各样的方法,这些方法中当然也有效率高的,也有效率低的。那么现在流行的这些敏捷实践方法,其实就是已经被证明是效率比较高的方法,或者叫最佳实践。从这些实践开始,总比自己从头摸索要快要好。
学习敏捷应该从实践开始,但是不能仅限于实践,Scrum之所以这么流行是因为它比较对管理层的胃口。Scrum的特点也是在组织级提供支持,而在开发级则没有什么支持。相反XP比较重视开发方面的实践,TDD、Pair、CI无一不是与开发工作相关的实践。因此可以说敏捷实践各有特色,各有侧重。但是也要看到,虽然龙生九子各有不同,可是他们却都还是龙的后代,因此在骨子里这些实践是遵循十二条基本原则和四条敏捷宣言的,这也是为什么他们可以叫“敏捷”实践。所以说在具体应用敏捷实践时,一定要考虑这十二条基本原则,如果违反了,就是披着敏捷的壳,虚有其表,想不失败都难。
当你慢慢掌握了一些敏捷实践后,就要想办法改进了,世界总是在变化的,昨天行得通的方法今天未必行得通,别人那里行得通的方法,在你这里未必行得通。因此要根据自身情况选择并修改敏捷实践,形成有自己特色的实践方法。那么在建立自己特色的方法时,就需要检查是否遵循了十二条基本原则和敏捷宣言了。
当你逐渐可以根据需要自己定义流程,并不断总结和改进后,你会慢慢忘记十二条原则,因为它太多了太难背了,而你基本上也可以在忘记的情况下同样遵守他们,那么恭喜了,你已经理解了敏捷了,敏捷宣言就可以指导你的行为了,甚至你的思想也已经敏捷了,敏捷宣言也不重要了。
敏捷是目的么?敏捷一定就比不敏捷好么?我为什么要敏捷呢?
敏捷并不是目的,我们的目的是创造优秀的软件。什么是优秀的软件,功能正确、易于维护、易于修改、能给客户带来价值、能为人类文明进步做出贡献等等等等。有句话说得好:不管黑猫白猫,抓到耗子的就是好猫。软件开发也是一样,不管你用什么方法,只要能创造优秀的软件,就行了。
敏捷现在就是那个抓耗子效率比较高的猫,之所以用敏捷就是要提高抓到耗子的概率,迟早有一天会出现更厉害的猫来代替这只猫;而各种敏捷方法就是抓耗子的招数,对于某些耗子这个招数好使,对于某些耗子那个招式好用,因此需要根据具体问题来采用合适的招数应对。
说了这么多敏捷的好,我就一定要用它么,我一定要学它么?不一定,敏捷不是银弹,它不能解决所有的问题,事实上在某些环境下还不如不敏捷。但是如果你不学习它,你又怎么知道何时可以使用它来提高生产率,何时不使用来避免失败的苦果呢?
敏捷也好,.NET也罢,都不是目的,只是手段,或者是一种可选的方法和工具。关注软件的价值,建造优秀的软件,才是最终的目的。
【编辑推荐】