Buy new:
$74.25
Delivery Friday, September 27
Ships from: Amazon
Sold by: QCompany
$74.25
FREE International Returns
No Import Fees Deposit & $11.60 Shipping to Germany Details

Shipping & Fee Details

Price $74.25
AmazonGlobal Shipping $11.60
Estimated Import Fees Deposit $0.00
Total $85.85

Delivery Friday, September 27. Order within 20 hrs 52 mins
Or fastest delivery Monday, September 23
Only 1 left in stock - order soon.
$$74.25 () Includes selected options. Includes initial monthly payment and selected options. Details
Price
Subtotal
$$74.25
Subtotal
Initial payment breakdown
Shipping cost, delivery date, and order total (including tax) shown at checkout.
Ships from
Amazon
Ships from
Amazon
Sold by
Sold by
Returns
30-day refund/replacement
30-day refund/replacement
This item can be returned in its original condition for a full refund or replacement within 30 days of receipt.
Returns
30-day refund/replacement
This item can be returned in its original condition for a full refund or replacement within 30 days of receipt.
Payment
Secure transaction
Your transaction is secure
We work hard to protect your security and privacy. Our payment security system encrypts your information during transmission. We don’t share your credit card details with third-party sellers, and we don’t sell your information to others. Learn more
Payment
Secure transaction
We work hard to protect your security and privacy. Our payment security system encrypts your information during transmission. We don’t share your credit card details with third-party sellers, and we don’t sell your information to others. Learn more
$13.39
FREE International Returns
All pages and the cover are intact, but shrink wrap, dust covers, or boxed set case may be missing. Pages may include limited notes, highlighting, or minor water damage but the text is readable. Item may be missing bundled media. All pages and the cover are intact, but shrink wrap, dust covers, or boxed set case may be missing. Pages may include limited notes, highlighting, or minor water damage but the text is readable. Item may be missing bundled media. See less
Delivery Monday, September 30. Order within 14 hrs 37 mins
Or fastest delivery Monday, September 23
Only 1 left in stock - order soon.
$$74.25 () Includes selected options. Includes initial monthly payment and selected options. Details
Price
Subtotal
$$74.25
Subtotal
Initial payment breakdown
Shipping cost, delivery date, and order total (including tax) shown at checkout.
Access codes and supplements are not guaranteed with used items.
Ships from
Amazon
Ships from
Amazon
Sold by
Sold by
Condition
Used - Acceptable
Condition
Used - Acceptable
Returns
30-day refund/replacement
30-day refund/replacement
This item can be returned in its original condition for a full refund or replacement within 30 days of receipt.
Returns
30-day refund/replacement
This item can be returned in its original condition for a full refund or replacement within 30 days of receipt.
Payment
Secure transaction
Your transaction is secure
We work hard to protect your security and privacy. Our payment security system encrypts your information during transmission. We don’t share your credit card details with third-party sellers, and we don’t sell your information to others. Learn more
Payment
Secure transaction
We work hard to protect your security and privacy. Our payment security system encrypts your information during transmission. We don’t share your credit card details with third-party sellers, and we don’t sell your information to others. Learn more
Added to

Sorry, there was a problem.

There was an error retrieving your Wish Lists. Please try again.

Sorry, there was a problem.

List unavailable.
Other sellers on Amazon
Kindle app logo image

Download the free Kindle app and start reading Kindle books instantly on your smartphone, tablet, or computer - no Kindle device required.

Read instantly on your browser with Kindle for Web.

Using your mobile phone camera - scan the code below and download the Kindle app.

QR code to download the Kindle App

Follow the author

Something went wrong. Please try your request again later.

Emergent Design: The Evolutionary Nature of Professional Software Development 1st Edition

4.1 4.1 out of 5 stars 22 ratings

{"desktop_buybox_group_1":[{"displayPrice":"$74.25","priceAmount":74.25,"currencySymbol":"$","integerValue":"74","decimalSeparator":".","fractionalValue":"25","symbolPosition":"left","hasSpace":false,"showFractionalPartIfEmpty":true,"offerListingId":"8556rx4R3SpmEz2Gbcfdactzp9GMTf4GSoWTjpYpJk0nolPWOWIfLM242R%2FfDwIhvPYu4GzV%2BfWQWao7zrkuHHoARVKBFVLDjKMswejLHEslZ0Cs391KM%2BO8s8tCxwNVyjh6FNyZ%2FMFu8a8%2FZ2C1Gw3Aj6rDMjjSsxZDchbKhpUuglet1ip9Zl199EpCHmw5","locale":"en-US","buyingOptionType":"NEW","aapiBuyingOptionIndex":0}, {"displayPrice":"$13.39","priceAmount":13.39,"currencySymbol":"$","integerValue":"13","decimalSeparator":".","fractionalValue":"39","symbolPosition":"left","hasSpace":false,"showFractionalPartIfEmpty":true,"offerListingId":"8556rx4R3SpmEz2Gbcfdactzp9GMTf4G%2BfY1OuOSHnGk6fJdXRtYYPGv7q0VJ6%2B1%2FDWhcOnquiw%2FqOY8meJ7ChPc6jC7WpTBDNjnc6nm%2B5W3%2FSd1rlj2VlyI0PVlt%2BYFua1HJXNdrnjmDX%2FsVpF%2B8Pta8D8LPEiP2h8ct18U39oMnN%2Bh4zmpaA%3D%3D","locale":"en-US","buyingOptionType":"USED","aapiBuyingOptionIndex":1}]}

Purchase options and add-ons

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 Designhelps 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.

Editorial Reviews

About the Author

Scott L. Bain is a thirty-year veteran in computer technology, with a background in development, engineering, and design. He has also designed, delivered, and managed training programs for certification and end-user skills, both in traditional classrooms and via distance learning. For the past eight years, Scott has been working for Net Objectives in Puget Sound, teaching courses and consulting on design patterns, refactoring, unit testing, and test-driven development. Along with Net Objectives CEO Alan Shalloway, he has contributed significantly to the integration of design patterns in Agile environments. Scott is a frequent speaker at developer conferences such as JavaOne and SDWest.

Excerpt. © Reprinted by permission. All rights reserved.

Designing and creating software is hard.

I like that it’s hard. I like a challenge. I like solving puzzles. That’s probably what attracted me to computers and programming in the first place.

It’s just that it’s a little bit too hard. I don’t want it to be easy; I’m not asking for that. I just want it to be a little easier, a little more predictable, and a little less chaotic.

I’d like to be able to tell someone, at the beginning of a project, what my software will generally be able to do when it’s done, and feel confident that I’m right in what I’m saying. I’d like to be able to tell how long it will take to get the project done, and how much, generally, it will cost. And, I would like to be successful in these predictions and estimates—at least most of the time.

I’d like to feel like I know what I’m doing. Really know.

Anyone who has developed any complex software has surely had this experience: at about month 9 of a 12-month project, we’re fine; we’re on-track. At month 10, we’re 4 months behind. How is that possible? Obviously, we were not fine at month 9—we just thought we were. Why didn’t we know?

Or, perhaps we have a working system, one that seems just fine, and then the end users want some new function or capability. It is a reasonable request. Things change; we know that. The pace and scope of change in our world is on the rise.

But when we try to make the change the customer wants, things seem to fall apart in unpredictable ways. It makes us hesitant, knowing this can happen. It makes us resistant, even hostile at the prospect of accommodating such changes. The longer a person has been in development, the more likely he is to feel such resistance.

This is not our fault.

Software development has not been around for very long, in the grand scheme of things. Other, similarly complex endeavors (medicine, the law, architecture, and so on) have been around for hundreds, even thousands, of years, and in that time a whole set of standards, practices, and general wisdom has been captured and handed down from generation to generation. This has helped to increase the rate of predictable success for each new batch of doctors, lawyers, and builders, and in each case has led to the formation of an organism we call the profession.

Professions have their own lives, their own existence. For example, the profession of carpentry has been around for thousands of years, though no carpenter is that old. Professions provide a sort of safety net for those individuals in their practice.

The purpose of this book is to examine what we need, as software developers (or programmers, if you like), to get that kind of value from what we do, from each other, and from the practice itself. I’d like to take a step back, look at the nature of what we’re doing, and derive a set of best practices, general wisdom, and specific patterns of activity that will elevate our business into a true profession, or something akin to that, with all the benefits that such a thing provides.

However, it’s not my intention to stay purely theoretical, as interesting as that might be. I want to talk about real things, about the aspects of software development that are too hard, that are too limiting, and to suggest better ways of going about this job. I want to focus on things that are truly valuable.

My contract with you is this: Everything I will investigate, suggest, present, demonstrate, and so on, will have as its core intent the goal of improving our lot as creators of software. No matter how interesting or compelling a thing might be, if there’s nothing “in it for us,” then I’m going to leave it out.

One thesis I’m going to start off with right now is this: Software development, by its very nature, is a process of evolution. We do not analyze, design, and build; we create something that works, is of high quality, and is valuable as it stands, and then we evolve it in stages toward the product that the world needs. I’ve got a long way to go to demonstrate this, and in order to get there I’m going to need a set of supportive concepts and techniques.

Here are the things I’ll start off examining.

Qualities

How do we know when software is good? Because it works? We all know plenty of software that works but is not good. When presented with two or three ways of doing something, how do we determine which one is best? What does best mean? Following the general tenet of this book, best should have something to do with value to the developer, and a resulting increase in success, which yields value to the customer. The qualities we will focus on provide this kind of in-the-moment guidance that can help us make better decisions, more reliably: coupling, cohesion, eliminating redundancy, making things testable, and the granddaddy of them all: encapsulation. Included in this discussion will be those negative indicators (pathologies) that can help us to see when one or more of these qualities is not being adhered to.

Principles

What are the fundamental theories that define good software? In other words, what are the points of view we can take on a system that give us a better chance at achieving the qualities, after we know what those are? Principles say “this is better than that” or “this is more important than that.” Principles promise better results in terms of the qualities we will emphasize, given that software needs to be able to change in order to meet the needs of a changing world.

Practices

Practices are things that you can do as part of your day-to-day coding activities, which will help you in significant ways. The practices I am most interested in are those that help you in multiple ways, and yet are not a burden. Lots of bang, little bucks. Also, since practices are truly valuable when they are shared and promoted to all the developers on a team (or in an organization or even, perhaps, to the profession), they should be things that are easy to teach others to do.

Disciplines

Similar to practices, disciplines are things you should do, but they are larger scale, take longer to learn, and are not without cost. However, the value they offer is so fundamental and profound as to make them worth the effort and time they require. Unit testing and refactoring are examples of disciplines, as is the notion of test-driven development. I’ll cover them all.

Patterns

Patterns represent what we’ve done before that has worked. But I don’t mean just a cookbook or a set of templates; software is more complicated than that. By a pattern I mean the set of interrelated points of wisdom that reflect what we, as a group, know about certain situations, those that we find ourselves in again and again. We’ve been there as a profession, even if some of us have not as individuals. Patterns are a way of sharing the wealth of experience, as a community of colleagues, and supporting one another toward greater success. Patterns are different from principles in that they are contextual. Principles apply generally; patterns apply differently in different situations. We’ll examine these concepts in terms of each pattern’s forces, and see how this view of patterns makes them much more useful to us than simply canned designs would be. There are lots of patterns, and lots of patterns books, so I provide an appendix that contains an overview of the patterns I use in the book to illustrate their role in an emergent design.

Processes

In general, how does software development work? How do we find out what we need to build? How do we know when we’re done? How do we know when we’re on track? And more importantly, how do we know when we’re not on track? When we are off track, what do we do? I’ve tipped my hand already a bit in suggesting that creating software is an evolutionary process, but that’s obviously just the seed of the idea.

I’m not alone in this pursuit, of course. In this book, I definitely draw upon the work of others including Alan Shalloway, Martin Fowler, Ward Cunningham, Kent Beck, Ron Jeffries, and Robert Martin, just to name a few. I’ve learned a great deal from these people and others like them, and I acknowledge their efforts in the Bibliography and point you to the resources they have provided our profession.

I’ve been accused of being developer-centric, as have some of the colleagues I just mentioned. In my case, this is true. I focus on the developer not just because I am one myself, but also because I believe if we want better software, we need to do a better job supporting development. To me this means a focus on the developer (e.g., an important part of quality health care is making good doctors). It does not mean that I value software if it does not get used: Unused software is worthless, in my opinion. Therefore, while I certainly focus on those things that help developers succeed, the goal is better software and the right software, which certainly will benefit all concerned.

There is other work to be done, certainly. I do not pretend to have solved the problem by bringing valuable ideas and practices to my fellow developers; but this is my part along the way.

I believe strongly that software development is on the brink of becoming a profession—in the true sense of the word—and that going that last mile, filling in the missing pieces, is one of the most important activities of our current era. In years to come, I think we will look back at this time and realize that this was the era when software development matured to the degree that it could reliably meet the needs of the modern world, and I’m very excited to be a part of it.

So, let’s begin.

Product details

  • Publisher ‏ : ‎ Addison-Wesley Professional; 1st edition (January 1, 2008)
  • Language ‏ : ‎ English
  • Hardcover ‏ : ‎ 411 pages
  • ISBN-10 ‏ : ‎ 0321509366
  • ISBN-13 ‏ : ‎ 978-0321509369
  • Item Weight ‏ : ‎ 1.84 pounds
  • Dimensions ‏ : ‎ 7.25 x 1 x 9.5 inches
  • Customer Reviews:
    4.1 4.1 out of 5 stars 22 ratings

About the author

Follow authors to get new release updates, plus improved recommendations.
Scott L. Bain
Brief content visible, double tap to read full content.
Full content visible, double tap to read brief content.

Discover more of the author’s books, see similar authors, read author blogs and more


Customer reviews

4.1 out of 5 stars
22 global ratings

Top reviews from the United States

Reviewed in the United States on July 30, 2008
I think of this book as answering three questions:
* what do developers need to know to work as professionals?
* how does quality coding and design play into unfolding designs?
* what is the proper way to integrate refactoring, test-driven development and design patterns in the real world?

All too long this industry has allowed individuals to do what they like instead of what their teams and businesses need. Programming is not just about individual people's opinion of approach and quality, but about real issues that have been long identified.

This book weaves the tale of what is known and how to use it in a real environment. I didn't react to this book the way Mr. Vodde did as an advertisement for Net Objectives. I like the anecdotal story telling of how this knowledge is conveyed to realy people in real situations.

Developers often talk about their problems in getting others convinced of better approaches. What better way than to hear how Mr. Bain has done this himself - something good to learn.

While this book is probably thought of as being for agile developers (those who write code in iterations) it'd be highly useful for anyone. Everybody's code needs to morph over time - even if the first release is done in a classic waterfall.
Reviewed in the United States on April 21, 2015
Hands down, this is the bible of design patterns.
Reviewed in the United States on March 16, 2013
For those who've complained about the title being misleading, what did you expect? As the author clarifies in the chapter on refactoring, emergent design is all about continuously changing code to improve it, to make it easier to add new features and to make it easier to find bugs. The author appropriately makes a reference to Kerievsky's Refactoring to Patterns book, considering that Bain's book also makes extensive use of patterns and Java design idioms to improve code.

My favorite part of this book is actually at the end where the author provides brief overviews of the patterns used in the book. Most helpful are the non-software examples that the author uses to drive home the goal of the pattern.

Four stars rather than five, though, because five stars ought to be reserved for seminal works like the GOF book or books from Martin Fowler's Signature Series, which I relish. Also, the book does venture into at least one contentious area. Bain's colleague, Shalloway, has suggested in his book that a Proxy can also be used to encapsulate a special function or pre-processing required to be carried out prior to calling the underlying object. Bain takes it one step further, suggesting that Proxy is like a Decorator that adds a single responsibility to the underlying class and often graduates to Decorator if multiple additional responsibilities need to dynamically be added to the base class. However, GOF and POSA clarify that although the Proxy implementation resembles that of Decorator, the two have distinctly different purposes.
Reviewed in the United States on June 15, 2008
As the cover implies, this book is the basis of a revolution. It is a tour of everything required to become a professional software developer. I believe this book to be distinguished from other technical books in the way that great works of fiction are different from genre books. It defines a category rather than just being a part of one.

It is a call to arms for all of us who consider ourselves professionals to band together into a true profession. Simultaneously, it is a tour of all those things that we as a proto-profession have identified as important and valuable. Practices, patterns, principles, disciplines, tools... Bain shows how all of these things work together. He goes one step further, though: he shows how they can coalesce into the basis for our occupation's transcendence into a profession.

If you have not been introduced to these concepts - if you work in a heavily waterfall environment with brittle code and death-marches at the end of long release cycles - this book is your way out. Read it. The most you will have lost is the time it takes you to read a three hundred page book and you have everything to gain. Emergent Design will show you that there is a better way. A way to make software that gets easier to maintain over time, not the other way around.

If you are familiar with these concepts, as I believed myself to be, then you will enjoy seeing everything come together in one book. You will probably gain some valuable insights along the way. I certainly did. You will also find that it is powerful recommended reading for those around you. Scott Bain's writing is clear, concise, friendly, funny... oh yeah: and very persuasive. Having read this book will give you and those whom you coach, teach, or work-with a common frame of reference; even more-so than Design Patterns.

I truly believe that this book is going to be at the center of a series of discussions, debates, and decisions which will ultimately lead to the formalization of software development as a real profession. It would be easy to characterize your choice as "buy it or don't buy it" but that would not be accurate. The real choice before you is this one:

You can either be an informed participant in the formation of our profession or you can just be governed by it.

I trust you to do the math from there.
One person found this helpful
Report
Reviewed in the United States on October 17, 2016
Anyone interested in this topic probably already knows most of the concepts that are discussed.
Reviewed in the United States on December 29, 2008
This is a very good book specially for those that are interested in learning about design patterns and applying them in your own codes.
Reviewed in the United States on May 3, 2013
… but not very insightful for someone who is looking to go deeper into the topics covered. I was a little disappointed because I've listened to some very insightful podcasts by this same author.

Top reviews from other countries

Translate all reviews to English
Sohnee
4.0 out of 5 stars Well worth reading.
Reviewed in the United Kingdom on June 20, 2014
This is one of those books that adds a new perspective to software design. Whether or not you agree with everything in here - you will still enjoy reading this book.
Dr. Gernot Starke
1.0 out of 5 stars Nutzloses Buch - hilft meiner Meinung nach niemandem!
Reviewed in Germany on April 25, 2009
Das Buch wurde in der Jolt-Award-Liste unter den "Technical Books" hoch gelobt. Meiner Meinung nach völlig zu Unrecht: Weder originell noch inhaltsreich, die Lektüre macht weder Spaß noch konnte ich irgendwelche Tipps oder praxistaugliche Hinweise daraus ziehen.

Scott Bain erwähnt gefühlte Hundert Mal, er sei ja "teacher" und habe
immer wieder tolle Erlebnisse in seinen Kursen gehabt - das interessiert
aber nicht. Mir wäre lieber, er hätte aus praktischen Projekten mal fundierte Hinweise über Design und Architektur gegeben.

Aus meiner Sicht eines der schlechtesten Fachbücher der letzten Monate.