Tech Links

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

Software Process / Improvement

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 Development Process
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.

Software Requirements

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.

Usage-Centered Design

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 Analysis and Design

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.

Design Patterns

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.

The Hillside 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.

Java Programming

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.