I am most fortunate to have a wife who has lovingly supported me during the writing of this book. Tracy, you are the greatest. I'm looking forward to spending many more decades together.
Our two daughters, Sasha and Sophia, were born during the time I wrote this book. I thank both of them for their patience while their dad wrote and wrote and wrote.
In the 1970s, Bruce Kerievsky, my father, brought my brother and me to work so we could draw pictures of the enormous computers in the refrigerated rooms. He also brought us huge green and white computer listings with our names printed in giant letters. His work inspired me to get into this great fieldthank you.
Now that I'm past the gushy thanks to my family, I can focus on the technical acknowledgments. And there are many.
John Brant made the largest contribution to this book. He and his colleague Don Roberts are two of the world's most knowledgeable refactoring people. John, who reviewed four versions of the evolving manuscript, contributed many great ideas and encouraged me to remove many not-so-great ideas. His insights pervade the mechanics for nearly every refactoring in the catalog. Don, who was busy on other projects, could not contribute as much, yet he reviewed John's feedback, and I thank him for that. I also thank both of them for writing this book's Afterword.
Martin Fowler helped with numerous reviews and suggestions, including how to simplify sketches and clarify technical discussions. He helped fix some of my broken UML diagrams and update them to reflect UML 2.0. I'm honored that Martin chose this book for his signature series and grateful for the Foreword he wrote for the book.
Sven Gorts downloaded many versions of the evolving manuscript and sent me a flood of thoughtful feedback. He contributed many useful ideas that have improved this book's writings, diagrams, and code.
Somik Raha helped a great deal in improving the content of this book. His open source htmlparser project, which he started before he had thoroughly learned patterns, turned out to be a gold mine of code that needed refactorings to patterns. Somik and I paired on many of these refactorings, and I can't thank him enough for his support, encouragement, and suggestions.
Eric Evans, the author of Domain-Driven Design, provided feedback on early versions of this book. While each of us was writing our books, we would meet at coffee shops in and around San Francisco. Then we would write, exchange laptops, and comment on each other's writings. Thanks for the feedback and companionship, Eric.
Chris Lopez, who is a member of the Silicon Valley Patterns Group (SVPG), provided a great deal of highly detailed and useful feedback on my writings, diagrams, and code. While other members of the SVPG also deserve thanks, Chris went above and beyond the call of duty in his reviews of this book.
Russ Rufer, Tracy Bialik, and the rest of the programmers in the SVPG (including Ted Young, Phil Goodwin, Alan Harriman, Charlie Toland, Bob Evans, John Brewer, Jeff Miller, David Vydra, David W. Smith, Patrick Manion, John Wu, Debbie Utley, Carol Thistlethwaite, Ken Scott-Hlebek, Summer Misherghi, and Siqing Zhang) spent numerous sessions reviewing early and more mature versions of this book. They contributed a good deal of wisdom, which helped me realize what needed to be clarified, extended, or removed. Particular thanks goes to Russ for scheduling so many meetings on the book and to Jeff for recording the group's thoughts.
Ralph Johnson and his Patterns Reading Group at the University of Illinois at Urbana-Champaign provided incredibly useful feedback on the early version of the manuscript. This group sent me feedback on MP3 files. I spent lots of time listening to their recordings and acting on their advice. I'm particularly thankful to Ralph, Brian Foote, Joseph Yoder, and Brian Marick for their thoughts and suggestions. I know there are others in the groupyet I don't have your names; I apologize and offer my thanks. Thanks also to Ralph for writing a Foreword to this book.
John Vlissides provided extremely useful feedback on several occasions, including many detailed notes on the first draft of the manuscript. He was enormously encouraging of my work, which helped a great deal.
Erich Gamma made some excellent suggestions for the introductory material in this book, as well as the refactorings.
Kent Beck reviewed several refactorings in this book and contributed a sidebar for Inline Singleton (114). I thank him for pair-programming with me on the State pattern refactoring during the XP2002 conference in Alghero, Italy.
Ward Cunningham contributed a sidebar for Inline Singleton (114) and provided some helpful, last-minute advice on where to locate a chapter in the introductory material.
Dirk Baumer, the lead programmer for producing automated refactorings in Eclipse, and Dmitry Lomov, the lead programmer for producing automated refactorings in IntelliJ, both contributed valuable insights and suggestions for many of the refactorings in this book.
Kyle Brown reviewed an early first draft of the manuscript and provided some excellent insights.
Ken Shirriff and John Tangney provided extensive, thoughtful feedback on versions of the manuscript.
Ken Thomases pointed out a critical error in an older version of the mechanics for Replace Type Code with Class (286).
Robert Hirshfeld helped clarify mechanics in a very early version of Move Embellishment to Decorator (144).
Ron Jeffries helped me articulate this book's message by engaging in countless arguments on firstname.lastname@example.org. He also helped me refactor my language in a tricky section of the introductory material for this book.
Dmitri Kerievsky helped me clarify the language in this Preface.
The following folks also provided useful feedback along the way: Gunjan Doshi, Jeff Grigg, Kaoru Hosokawa, Don Hinton, Andrew Swan, Erik Meade, Craig Demyanovich, Dave Hoover, Rob Mee, and Alex Chaffee.
I'm also grateful to the feedback of folks who discussed refactorings in this book on the email@example.com list.
I'd like to thank the students of Industrial Logic's classes, The Design Patterns Workshop and The Testing & Refactoring Workshop, who provided feedback on the refactorings in this book. Many of you helped me learn what needed to be clarified or added to this book.
A special thanks goes to my editor, Paul Petralia, and his team (Lisa Iarkowski, Faye Gemmellaro, John Fuller, Kim Arney Mulcahy, Chrysta Meadowbrooke, Rebecca Rider, and Richard Evans). When other publishers were competing to publish this book, Paul fought hard to make sure Addison-Wesley won the publishing rights. I'm very grateful that happened. I've spent years reading great Addison-Wesley books, and it's now an honor to be part of the family. Paul has become a friend over the course of writing this book. When he wasn't haranguing me to hurry up and finish the book, we talked about our kids, hit tennis balls, had a few laughs and some drinks. Thanks, PaulI'm fortunate to have you as my editor.