[Auer]
Auer, Ken. “Reusability through Self-Encapsulation.” In Pattern Languages of Program Design 1, edited by J.O. Coplien and D.C. Schmidt. Reading, Mass.: Addison-Wesley, 1995.
Patterns paper on the concept of self-encapsulation.
[Bäumer and Riehle]
Bäumer, Dirk, and Dirk Riehle. “Product Trader.” In Pattern Languages of Program Design 3, edited by R. Martin, F. Buschmann, and D. Riehle. Reading, Mass.: Addison-Wesley, 1998.
A pattern for flexibly creating objects without knowing in what class they should be.
[Beck]
Beck, Kent. Smalltalk Best Practice Patterns. Upper Saddle River, N.J.: Prentice Hall, 1997a.
An essential book for any Smalltalker, and a damn useful book for any object-oriented developer. Rumors of a Java version abound.
[Beck, hanoi]
Beck, Kent. “Make it Run, Make it Right: Design Through Refactoring.” The Smalltalk Report, 6: (1997b): 19–24.
The first published writing that really gets the sense of how the process of refactoring works. The source of many ideas for Chapter 1.
Beck, Kent. eXtreme Programming eXplained: Embrace Change. Reading, Mass.: Addison-Wesley, to be published in 1999.
[Fowler, UML]
Fowler, M., with K. Scott. UML Distilled: Applying the Standard Object Modeling Language. Reading, Mass.: Addison-Wesley, 1997.
A concise guide to the Unified Modeling Language used for various diagrams in this book.
[Fowler, AP]
Fowler, M. Analysis Patterns: Reusable Object Models. Reading, Mass.: Addison-Wesley, 1997.
A book of domain model patterns. Includes a discussion of the range pattern.
[Gang of Four]
Gamma, E., R. Helm, R. Johnson, and J. Vlissides. Design Patterns: Elements of Reusable Object Oriented Software. Reading, Mass.: Addison-Wesley, 1995.
Probably the single most valuable book on object-oriented design. It’s now impossible to look as if you know anything about objects if you can’t talk intelligently about strategy, singleton, and chain of responsibility.
[Jackson, 1993]
Jackson, Michael. Michael Jackson’s Beer Guide, Mitchell Beazley, 1993.
A useful guide to a subject that rewards considerable practical study.
[Java Spec]
Gosling, James, Bill Joy, and Guy Steele. The Java Language Specification. Reading, Mass.: Addison-Wesley, 1996.
The authoritative answer to Java questions, although an update would be welcome.
[JUnit]
Beck, Kent, and Erich Gamma. JUnit Open-Source Testing Framework. Available on the Web via the author’s home page (http://ourworld.compuserve.com.homepages/Martin_Fowler).
Essential tool for working in Java. A simple framework that helps you write, organize, and run unit tests. Similar frameworks are available for Smalltalk and C++.
Lea, Doug. Concurrent Programming in Java: Design Principles and Patterns, Reading, Mass.: Addison-Wesley, 1997.
The compiler should stop anyone implementing Runnable
who hasn’t read this book.
[McConnell]
McConnell, Steve. Code Complete: A Practical Handbook of Software Construction. Redmond, Wash.: Microsoft Press, 1993.
An excellent guide to programming style and software construction. Written before Java, but almost all of its advice applies.
[Meyer]
Meyer, Bertrand. Object Oriented Software Construction. 2 ed. Upper Saddle River, N.J.: Prentice Hall, 1997.
A very good, if very large, book on object-oriented design. Includes a thorough discussion of design by contract.
[Opdyke]
Opdyke, William F. “Refactoring Object-Oriented Frameworks.” Ph.D. diss., University of Illinois at Urbana-Champaign, 1992.
See ftp://st.cs.uiuc.edu/pub/papers/refactoring/opdyke-thesis.ps.Z. The first decent-length writing on refactoring. Tackles it from a somewhat academic and tools-oriented angle (after all it is a dissertation) but is well worth reading for those who want more on the theory of refactoring.
[Refactoring Browser]
Brant, John, and Don Roberts. Refactoring Browser Tool,
http://st-www.cs.uiuc.edu/~brant/RefactoringBrowser. The future of software development tools.
[Woolf]
Woolf, Bobby. “Null Object.” In Pattern Languages of Program Design 3, edited by R. Martin, F. Buschmann, and D. Riehle. Reading, Mass.: Addison-Wesley, 1998.
A discussion on the null object pattern.