...These are a few of my favorite things...
|Software Process / Improvement||Object-Oriented Analysis and Design|
|Software Requirements||Design Patterns|
|Usage-Centered Design||Java Programming|
Agile Software Development, by Alistair Cockburn
Highly recommended. Provides practical recommendations regarding customized, lightweight, project-oriented software development methodologies. Alistair describes software development as a cooperative game of invention and communication. Recognition of this has dramatic implications for software development project success.
Business Engineering with Object Technology, by David Taylor
Highest recommendation! If you only read one of these books, make it this one. It clearly explains Convergent Engineering, a mature process for engineering businesses and their information systems in a holistic manner - i.e., considering and integrating all facets of the enterprise. You can read this book in 2-3 hours, but it will reshape how you think about enterprise information systems and business modeling.
CMM Implementation Guide: Choreographing Software Process Improvement, by Kim Caputo
Highly recommended. Provides step-by-step advice on software process improvement. Considers and addresses the many obstacles to process adoption and improvement. Dance serves as an excellent metaphor for creating movement in organizations that exhibit inertia.
SCRUM Hyperproductive Software Development Method, by Jeff Sutherland
Recommended. SCRUM is a process for empirically managing product development and improving team productivity.
Extreme Programming, by Kent Beck, Ken Auer, Ward Cunningham, Martin Fowler
Recommended. Extreme programming (XP) is another hyperproductive software process. The latest thinking in rapid application development involves building testing methods as part of developing every class in the software system, a great augmentation of the SCRUM development process. XP is successful because it stresses customer satisfaction. The methodology is designed to deliver the software your customer needs when it is needed. XP empowers your developers to confidently respond to changing customer requirements, even late in the life cycle.
Problem Frames: Analyzing and Structuring Software Development Problems, by Michael Jackson
Highly recommended. Provides an excellent introduction to the concept of problem frames and a detailed examination of the primary kinds of frames and how to describe problems in terms of frames.
Mastering the Requirements Process, by Suzanne Robertson, James Robertson
Highly recommended. Provides an excellent overall description of the requirements collection and management processes. Also, provides a good template for requirements documents (the Volare template).
Writing Effective Use Cases, by Alistair Cockburn
Highly recommended. Provides a framework for understanding and writing use cases, but also focuses them on the goals that they must satisfy (success criteria). The focus on goals helps establish and prioritize the business value of the requirements and functions to be implemented.
Using Natural Language in Software Development, by Nik Boyd
Shameless Self-Promotion. This paper presents a new approach to conceptual modeling based on natural language analysis. It also serves as a manifesto for requirements management, extending the object-oriented approach into the arena of requirements collection and analysis.
A Conceptual Model for Software Requirements, by Nik Boyd
This paper offers a framework for understanding the relationships between the technical and political aspects of software development, and the relationships between the stakeholders involved in software development and the knowledge they bring to the table.
Software for Use: A Practical Guide to the Models and Methods of UsageCentered Design, by Larry Constantine, Lucy Lockwood
Highly recommended. Describes a systematic approach to human interface design that focuses on usability. Usability can be designed into software from the very beginning.
The Design of Everyday Things, by Donald Norman
Highly recommended. Serves as a great treatise on general design principles for broad application to product usability.
Object-Oriented Development: The Fusion Method, by Derek Coleman, et. al.
Recommended, especially for object-oriented software developers. The HP Fusion process clearly delineates what constitutes analysis from design. Fusion provides a complete, model-driven, object-oriented development methodology. The original Fusion notation has been superceded by the Unified Modeling Language (UML).
Object-Oriented Modeling and Design, by James Rumbaugh, et. al.
Recommended. A great introduction to object-oriented analysis and modeling. However, the OMT notation has been superceded by the Unified Modeling Language (UML).
Designing Object-Oriented Software, by Rebecca Wirfs-Brock, Brian Wilkerson, Lauren Weiner
Recommended. Describes how to design object systems using Responsibility-Driven Design (RDD) and Class, Responsibility, Collaborator (CRC) cards with plenty of examples. A great introduction to object-oriented design.
Object-Oriented Design Measurement, by Scott Whitmire
Highly recommended. While the title of this book indicates a focus on object-oriented designs, it also provides metrics applicable to software designs in general. It provides an excellent introduction to the elements of measurement theory, enough to generate a wide range of measurements tailored to specific needs.
Refactoring: Improving the Design of Existing Code, by Martin Fowler
Highly recommended. This book provides a useful catalog of over 70 kinds of refactoring, with detailed instructions regarding how to identify code that warrants them and how apply them. Fowler's web site also provides a supplement to the book. I've developed a study guide for those who want to use the book in the context of a study group.
Patterns of Enterprise Application Architecture by Martin Fowler, et. al.
Highest recommendation! This book offers well-balanced solutions to a wide variety of problems, including sets of coherent and interlocking design patterns for each of the significant layers typcially found in enterprise applications.
Smalltalk Best Practice Patterns, by Kent Beck
Highly recommended. Every software developer should read this book! Kent describes a standard of practice for low-level software design and coding, as well as why these practices make sense. While Kent substantiates his recommendations with Smalltalk code examples, these practices are readily generalized to other OO programming languages, e.g., Java.
Design Patterns: Elements of Reusable Object-Oriented Software, by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Recommended. Provides a basic vocabulary of solutions to recurring object-oriented software design problems.
Design Patterns for Object-Oriented Software Development, by Wolfgang Pree
Recommended. Reveals the essential elements of object-oriented software design patterns. Combinations of these elements can be found in all extant object-oriented design patterns. An understanding of these essential elements can be used to generate new design patterns.
Patterns Repository, maintained by the Hillside Group
The Portland Patterns Repository, maintained by Cunningham & Cunningham, Inc.
Recommended. Provides links to papers, books, catalogs, etc. regarding software design patterns.
A Pattern Language : Towns, Buildings, Construction, by
Christopher Alexander, Sara Ishikawa, Murray Silverstein
Recommended, but it's pricey. Alexander's original work with architectural design patterns is still a great source of inspiration for software designers. It demonstrates how pattern languages should be constructed and structured.
Alexander's Pattern Language Web Site and more Design Patterns
Software Metaphors, by Nik Boyd
This paper provides an extensive examination of the metaphors used by software developers, including a survey of software elements, components, standard equipment, design patterns, and architectural styles.
Mastering Java 2, by John Zukowski
Recommended. Provides an excellent general introduction to the Java programming language and class libraries, with lots of examples.
Concurrent Programming in Java: Design Principles and Patterns, by Doug Lea
Recommended. Perhaps the foremost treatise on multi-threaded programming in Java. A must read for all developers with responsibility for server-side programming (e.g., servlets, EJB, etc.). I've developed a study guide for those who want to use the book in the context of a study group.