Emergent Design

The Evolutionary Nature of Professional Software Development (paperback)

Paperback Engels 2013 9780321889065
Verwachte levertijd ongeveer 9 werkdagen

Samenvatting

For software to consistently deliver promised results, software development must mature into a true profession. Emergent Design points the way. As software continues to evolve and mature, software development processes become more complicated, relying on a variety of methodologies and approaches. This book illuminates the path to building the next generation of software. Author Scott L. Bain integrates the best of today’s most important development disciplines into a unified, streamlined, realistic, and fully actionable approach to developing software. Drawing on patterns, refactoring, and test-driven development, Bain offers a blueprint for moving efficiently through the entire software lifecycle, smoothly managing change, and consistently delivering systems that are robust, reliable, and cost-effective.

 

Reflecting a deep understanding of the natural flow of system development, Emergent Design helps developers work with the flow, instead of against it. Bain introduces the principles and practices of emergent design one step at a time, showing how to promote the natural evolution of software systems over time, making systems work better and provide greater value. To illuminate his approach, Bain presents code examples wherever necessary and concludes with a complete project case study.

 

This book provides developers, project leads, and testers powerful new ways to collaborate, achieve immediate goals, and build systems that improve in quality with each iteration.

 

Coverage includes  How to design software in a more natural, evolutionary, and professional way How to use the “open-closed” principle to mitigate risks and eliminate waste How and when to test your design throughout the development process How to translate design principles into practices that actually lead to better code How to determine how much design is enough How refactoring can help you reduce over-design and manage change more effectively

The book’s companion Web site, www.netobjectives.com/resources, provides updates, links to related materials, and support for discussions of the book’s content.

Specificaties

ISBN13:9780321889065
Taal:Engels
Bindwijze:Paperback

Lezersrecensies

Wees de eerste die een lezersrecensie schrijft!

Inhoudsopgave

<p style="MARGIN: 0px">Series Foreword xvii</p> <p style="MARGIN: 0px">Preface xxiii</p> <p style="MARGIN: 0px">Acknowledgments xxix</p> <p style="MARGIN: 0px">About the Author xxxi</p> <p style="MARGIN: 0px">&nbsp;</p> <p style="MARGIN: 0px">Chapter 1: Software as a Profession 1</p> <p style="MARGIN: 0px">How Long Have Human Beings Been Making Software? 1</p> <p style="MARGIN: 0px">What Sort of Activity Is Software Development? 2</p> <p style="MARGIN: 0px">What Is Missing? 6</p> <p style="MARGIN: 0px">Who Is Responsible? 8</p> <p style="MARGIN: 0px">Uniqueness 9</p> <p style="MARGIN: 0px">&nbsp;</p> <p style="MARGIN: 0px">Chapter 2: Out of the Closet, Off to the Moon 11</p> <p style="MARGIN: 0px">Patterns and Professionalism in Software Development 11</p> <p style="MARGIN: 0px">Andrea’s Closet 12</p> <p style="MARGIN: 0px">Off to the Moon 18</p> <p style="MARGIN: 0px">The Value of Patterns 26</p> <p style="MARGIN: 0px">Summary 27</p> <p style="MARGIN: 0px; mso-layout-grid-align: none" sonormal="">&nbsp;</p> <p style="MARGIN: 0px">Chapter 3: The Nature of Software Development 29</p> <p style="MARGIN: 0px">We Fail Too Much 30</p> <p style="MARGIN: 0px">Definitions of Success 31</p> <p style="MARGIN: 0px">The Standish Group 32</p> <p style="MARGIN: 0px">Doing the Wrong Things 34</p> <p style="MARGIN: 0px">Doing the Things Wrong 35</p> <p style="MARGIN: 0px">Time Goes By, Things Improve 38</p> <p style="MARGIN: 0px">One Reason: The Civil Engineering Analogy 38</p> <p style="MARGIN: 0px">Giving Up Hope 41</p> <p style="MARGIN: 0px">Ignoring Your Mother 42</p> <p style="MARGIN: 0px">Bridges Are Hard, Software Is Soft 43</p> <p style="MARGIN: 0px">We Swim in an Ocean of Change 43</p> <p style="MARGIN: 0px">Accept Change 44</p> <p style="MARGIN: 0px">Embrace Change 45</p> <p style="MARGIN: 0px">Capitalize on Change 46</p> <p style="MARGIN: 0px">A Better Analogy: Evolving Systems 49</p> <p style="MARGIN: 0px">Summary 52</p> <p style="MARGIN: 0px; mso-layout-grid-align: none" sonormal="">&nbsp;</p> <p style="MARGIN: 0px">Chapter 4: Evolution in Code: Stage 1 55</p> <p style="MARGIN: 0px">Procedural Logic Replaced with Object Structure 56</p> <p style="MARGIN: 0px">The Origins of Object Orientations and Patterns 56</p> <p style="MARGIN: 0px">An Example: Simple Conditionals and the Proxy Pattern 58</p> <p style="MARGIN: 0px">The Next Step: Either This or That 62</p> <p style="MARGIN: 0px">Why Bother? 65</p> <p style="MARGIN: 0px">One Among Many66</p> <p style="MARGIN: 0px">Summary 67</p> <p style="MARGIN: 0px; mso-layout-grid-align: none" sonormal="">&nbsp;</p> <p style="MARGIN: 0px">Chapter 5: Using and Discovering Patterns 69</p> <p style="MARGIN: 0px">Design from Context: More Carpentry from Scott 70</p> <p style="MARGIN: 0px">Patterns Lead to Another Cognitive Perspective 79</p> <p style="MARGIN: 0px">Patterns Help Give Us a Language for Discussing Design 79</p> <p style="MARGIN: 0px">Patterns in This Book 80</p> <p style="MARGIN: 0px">Summary 81</p> <p style="MARGIN: 0px; mso-layout-grid-align: none" sonormal="">&nbsp;</p> <p style="MARGIN: 0px">Chapter 6: Building a Pyramid 83</p> <p style="MARGIN: 0px">Elements of the Profession 83</p> <p style="MARGIN: 0px">A Visual Representation 85</p> <p style="MARGIN: 0px">Summary 86</p> <p style="MARGIN: 0px; mso-layout-grid-align: none" sonormal="">&nbsp;</p> <p style="MARGIN: 0px">Chapter 7: Paying Attention to Qualities and Pathologies 89</p> <p style="MARGIN: 0px">Encapsulation 91</p> <p style="MARGIN: 0px">Cohesion 91</p> <p style="MARGIN: 0px">Coupling 99</p> <p style="MARGIN: 0px">Redundancy 106</p> <p style="MARGIN: 0px">Testability 112</p> <p style="MARGIN: 0px">Readability 114</p> <p style="MARGIN: 0px">Pathologies 114</p> <p style="MARGIN: 0px">Summary 119</p> <p style="MARGIN: 0px">&nbsp;</p> <p style="MARGIN: 0px">Chapter 8: Paying Attention to Principles and Wisdom 121</p> <p style="MARGIN: 0px">Separating Use from Creation 122</p> <p style="MARGIN: 0px">The Open-Closed Principle 129</p> <p style="MARGIN: 0px">The Dependency Inversion Principle 133</p> <p style="MARGIN: 0px">Advice from the Gang of Four 135</p> <p style="MARGIN: 0px">GoF: Consider What Should Be Variable in Your Design and Encapsulate the Concept That Varies 143</p> <p style="MARGIN: 0px">Summary 146</p> <p style="MARGIN: 0px">&nbsp;</p> <p style="MARGIN: 0px">Chapter 9: Paying Attention to Practices 147</p> <p style="MARGIN: 0px">Consistent Coding Style 148</p> <p style="MARGIN: 0px">Programming by Intention 153</p> <p style="MARGIN: 0px">Encapsulating the Constructor 155</p> <p style="MARGIN: 0px">Commonality-Variability Analysis 161</p> <p style="MARGIN: 0px">Practices and Freedom 166</p> <p style="MARGIN: 0px">Summary 167</p> <p style="MARGIN: 0px">&nbsp;</p> <p style="MARGIN: 0px">Chapter 10: Paying Attention to Disciplines: Unit Testing 169</p> <p style="MARGIN: 0px">Economies of Testing 169</p> <p style="MARGIN: 0px">JUnit Framework 175</p> <p style="MARGIN: 0px">Mock Objects 204</p> <p style="MARGIN: 0px">Summary 212</p> <p style="MARGIN: 0px">&nbsp;</p> <p style="MARGIN: 0px">Chapter 11: Paying Attention to Disciplines: Refactoring 213</p> <p style="MARGIN: 0px">Refactoring Bad Code 215</p> <p style="MARGIN: 0px">Refactoring Good Code 216</p> <p style="MARGIN: 0px">Structural Changes Versus Functional Changes 218</p> <p style="MARGIN: 0px">Refactoring Helps You Choose Your Battles 219</p> <p style="MARGIN: 0px">Patterns Can Be Targets of Refactoring 220</p> <p style="MARGIN: 0px">Avoiding Refactoring: Prefactoring 220</p> <p style="MARGIN: 0px">The Mechanics of Refactoring 221</p> <p style="MARGIN: 0px">Refactoring Legacy Code 231</p> <p style="MARGIN: 0px">Summary 233</p> <p style="MARGIN: 0px">&nbsp;</p> <p style="MARGIN: 0px">Chapter 12: Test-Driven Development 235</p> <p style="MARGIN: 0px">What Makes Development Test-Driven? 235</p> <p style="MARGIN: 0px">Testing and Quality 238</p> <p style="MARGIN: 0px">Test-Driven Development and Patterns 241</p> <p style="MARGIN: 0px">Mock Objects 244</p> <p style="MARGIN: 0px">Mock Turtles 248</p> <p style="MARGIN: 0px">Testing the Decorator Pattern 248</p> <p style="MARGIN: 0px">Summary 253</p> <p style="MARGIN: 0px">&nbsp;</p> <p style="MARGIN: 0px">Chapter 13: Patterns and Forces 255</p> <p style="MARGIN: 0px">Making Decisions in an Evolving Design 255</p> <p style="MARGIN: 0px">Christopher Alexander and Forces 256</p> <p style="MARGIN: 0px">More Choices, More Forces 266</p> <p style="MARGIN: 0px">Summary 271</p> <p style="MARGIN: 0px">&nbsp;</p> <p style="MARGIN: 0px">Chapter 14: Emergent Design: A Case Study 273</p> <p style="MARGIN: 0px">The Problem Domain: The MWave Corporation 273</p> <p style="MARGIN: 0px">The Teams 275</p> <p style="MARGIN: 0px">The Simplest Thing That Could Possibly Work 277</p> <p style="MARGIN: 0px">A New Requirement: Complex Machines 281</p> <p style="MARGIN: 0px">Oh, By the Way 283</p> <p style="MARGIN: 0px">More Good News 285</p> <p style="MARGIN: 0px">Summary: What a Long, Strange Trip It Has Been 287</p> <p style="MARGIN: 0px">&nbsp;</p> <p style="MARGIN: 0px">Chapter 15: A Conclusion: 2020 289</p> <p style="MARGIN: 0px">&nbsp;</p> <p style="MARGIN: 0px">Appendix A: Evolutionary Paths 291</p> <p style="MARGIN: 0px">&nbsp;</p> <p style="MARGIN: 0px">Appendix B: Overview of Patterns Used in the Examples 301</p> <p style="MARGIN: 0px">&nbsp;</p> <p style="MARGIN: 0px">Appendix C: The Principle of the Useful Illusion 385</p> <p style="MARGIN: 0px">&nbsp;</p> <p style="MARGIN: 0px">Bibliography 393</p> <p style="MARGIN: 0px">Index 395</p>

Managementboek Top 100

Rubrieken

    Personen

      Trefwoorden

        Emergent Design