Review of Agile Software Development: Principles, Patterns, and Practices
我看过很多有关软件开发方面的书籍,包括过程控制方面的、设计方面的以及最佳实践方面。确实也从其中学到了不少东西。但是,在具体的软件开发实践中,却没有取得期望的效果。经过一段时间的反思,我隐约觉得,应该还有某个存在于过程方法、设计原则以及最佳实践之外的东西来有机地把这三者结合起来,才能发挥这三者的最大效用。这种东西不是可以形式化的条条框框,而是活跃于人的大脑中的某种思维方法。看完了Robert Martin的Agile Software Development之后,我有一种豁然开朗的感觉。本书把这种思维方法阐述的再清晰不过。 本书具有两大特色。第一,很多讲述软件开发的书籍,要么是仅仅涉及过程方法方面的内容,要么是仅仅涉及设计原则方面的内容。这些做法相对于整个软件开发活动来说都是片面的。其实,过程方法、设计原则以及最佳实践是一个不可分割的整体。孤立地去使用任何一部分都无法获得最佳的效果。最有效的方法应该是根据自己开发团队的实际情况,找出一种能够有效地把这三者结合起来并使它们相互支持的方法。比如,大家都知道每周(日)构建是一种得到广泛认可的最佳实践方法,但并不是只要你每周(日)都去构建了,就能得到好的效果,有时,结果可能会更糟。要想使这种方法有效,还需要其他方面的支援。每周(日)构建的前提是软件必须是易于每周(日)构建的。也就是说,你需要对软件中的依赖关系进行管理,使之具有每周(日)构建的基础。而这种依赖关系的管理是需要设计原则来指导和度量的。这只是其中一个例子,本书中到处都体现着作者的这种主导思想和实践。如果读者能够在这个方面好好体会的话,肯定会对软件开发有一个更为全面、深入的理解,从而可以更加有效的去使用这些过程方法、设计原则以及最佳实践。
第二,本书的核心是软件设计,但是它对软件设计的理解以及讲解方式非常的特别。许多有关软件设计的书籍中,要么先讲述一些设计原则、模式,然后再给出几个简单的在理想情况下的应用;要么是拿一个最终的设计结果来剖析,然后告诉你它们是多么的优美。当时,你可能真会那么认为,但是当你试图在自己的实际开发中应用时,总会发现情况是完全不一样的。此时,你要么束手无策,要么会误用设计原则、模式。究其原因,主要是因为,在此类书中所讲述的不是真正的设计,只是设计的部分内容,而忽略了设计中最为重要的方面。设计是人的思维的一种动态活动,是设计者针对自己的问题的思索、权衡、折中、选择的过程。其中会出现很多在理想情况下不会出现的问题,对这些问题的处理水平才是真正的设计水平。同样,本书中到处都是这样的思考过程。针对每个案例,作者都会和你一起思索、一起探讨、一起权衡、一起验证。本书中所展示的是一个个完整的设计活动过程。通过这些案例的学习,相信读者肯定会对设计有一个更深刻的理解。此外,本书中也讲述了很多的设计模式,但是和很多其他讲述模式的书不同的是,它更多的是在告诉你什么时候不要去使用模式,去抵制模式的诱惑,以免带来不必要的复杂性。在对模式狂热吹捧的今天,本书无疑是一剂纠偏良药,可以让你更加合理、有效地使用模式。 其实,这些内容正是软件开发活动中最本质,同时也是最难以琢磨的内容。要把这些内容通过文字表达出来更是非常困难的,这也是这方面的书籍凤毛麟角的原因。然而在本书中,Rober Martin先生能把这些内容编写得如此清晰、如此易于理解,充分展示了作者深厚的技术功底和卓越的表达能力。因此,本书能从众多优秀书籍中脱颖而出获得第13届Jolt大奖,就没有什么出乎意料了。
本书主要包含4部分内容,这些内容对于今天的软件工程师都非常的重要,它们是:
●Agile方法:主要讲述了如何去使用Agile方法,其中有很大一部分内容是告诉你为什么要这样做。
●面向对象设计原则:本书包含了11个面向对象设计原则,涵盖了包的设计和类的设计。这是我所见过的对这方面内容讲解的最清晰、最彻底、最深刻的唯一的一本书。
●设计模式:本书中讲述了23个设计模式,并都有具体的实例。讲解的重点在如何在实际的应用中去使用模式,如何根据当前问题的上下文以及约束力去选择最适合的模式,以及何时避免使用模式。
●UML:本书不是关于UML的,但是为了让读者更好的理解书中的内容,作者使用了一些UML图来展示设计思路。同时,本书中也对如何有效的使用UML做了深入的阐述。本书中有两个附录专门对UML进行了简介。
总之,本书是写给那些一线的软件工程师的。如果你想学习UML,如果你想学习如何去设计软件,如果你想学习设计模式,如果你想学习最好的软件开发实践,那么请阅读本书。
感谢Robert Martin先生为我们写了一本如此优秀的著作,我从本书中学到了很多。我相信本书也不会令您失望。
敏捷软件开发是一种以人为核心,迭代、循序渐进的软件开发方法。它强调团队合作、客户协作,以及对变化的快速响应。敏捷开发方法可以帮助团队更有效地开发软件,更快地交付高质量产品,并更灵活地应对变化。
敏捷开发的原则包括对客户需求的持续关注、欢迎需求的变化,以及频繁交付可工作的软件。敏捷团队倾向于较小的、跨功能的协作团队,这些团队以自组织和自律的方式开展工作。在敏捷开发中,计划和交付的产品随着时间的推移而演进,而不是在项目启动之前一次性定义所有的需求。
在敏捷开发的实践中,过程方法、设计原则和最佳实践之间存在着紧密的联系。软件工程师需要在软件开发中综合运用这些元素,以实现高质量的软件交付。过程方法涉及到如何规划和控制软件开发流程,设计原则关注如何创建良好的软件架构和代码,最佳实践则是指那些在行业内经过验证、被广泛接受并适用于特定情况的有效做法。
敏捷开发中提到的模式,是指在特定情境下经常出现的解决方案的模板。设计模式是一组反复出现的设计问题的通用解决方案,它们可以提供一种有效的方式来组织代码结构,并解决特定问题。然而,并不是所有的设计模式都适合每个项目,软件工程师需要具备判断何时使用模式以及何时避免过度工程化的技巧。
UML(统一建模语言)是一种标准的可视化建模语言,它可以帮助软件工程师通过图表形式表达系统的设计。虽然本书不是专门讲述UML的,但它使用了一些UML图来展示设计思路,这有助于读者更好地理解书中内容。同时,书中对如何有效使用UML进行了深入探讨。
Robert Martin在《敏捷软件开发:原则、模式与实践》这本书中,通过真实案例展示了如何利用敏捷开发和极限编程来设计、测试和重构软件。书中不仅提供了可重用的C++和Java源代码,还重点阐述了如何运用UML和设计模式来解决面向客户系统的问题。
本书的主要内容可以分为以下四个部分:
1. 敏捷方法:这部分讲述了敏捷软件开发的概念、价值观、原则以及实践方法。作者解释了为何采用敏捷方法,并且提供了大量实践建议。
2. 面向对象设计原则:包含了11个面向对象设计原则,这些原则涉及包设计、类设计等方面,是软件开发中构造灵活和可维护系统的基石。
3. 设计模式:讨论了23种设计模式,涵盖了设计软件时的常见问题和解决方案。书中不仅列举了模式的实例,还探讨了如何根据实际情况选择和应用模式,以及在某些情况下避免使用模式的建议。
4. UML:虽然本书不专门讲解UML,但使用了UML图来帮助解释设计思路,并对如何在软件开发中有效利用UML进行了详细讨论。
总结来说,《敏捷软件开发:原则、模式与实践》是一本为软件工程师量身定制的实践指南,旨在帮助他们更好地理解敏捷开发的各个方面,从而在实际工作中更有效地应用这些方法、原则和模式。通过阅读这本书,读者可以获得关于如何使用敏捷方法进行软件开发的深刻见解,同时也能学习到面向对象设计原则和设计模式的使用技巧,以及如何将UML应用于软件开发实践中。这是一本适合一线软件工程师、项目经理、软件项目领导以及任何对敏捷开发和极限编程感兴趣的读者阅读的权威参考书。