Below is a short list of books that focus attention on the need to rethink the processes that we use to develop software. They are not about code or the construction process. They are about planning, architecting, and designing solutions. The answers to most of the deficiencies in projects are not in the programming syntax. The problems are created by faulty approaches to applying the code, that is, bad design.
Probably the saddest aspect of this topic is that the problems are so common that they have become patterns.
Quoting the authors of
Anti Patterns: Antipatterns clearly define software mistakes that most of us make frequently. In fact, most of us could achieve ISO 9001 with our consistency
- AntiPatterns, by William J. Brown, Raphael C. Malveau, Hays W., "Skip" McCormick III, and Thomas J. Mowbray (Wiley Computer Publishing, 1998)
- Analysis Patterns: Reusable Object Models, by Martin Fowler (Addison-Wesley, 1997)
- Design Patterns: Elements of Reusable Object-Oriented Software, by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (Addison-Wesley, 1994)
gofpatterns.com
- Pattern-Oriented Software Architecture: A System of Patterns, by Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, and Michael Stal (John Wiley & Sons, 1996)
The most notable aspect of GofPattern.com is the manner in which the coverage of design patterns is interwoven with the remainder of the material. For example,
- Swing containers and components motivate the COMPOSITE pattern.
- Swing scroll bars motivate the DECORATOR pattern, and Swing borders are examined as a missed opportunity for that pattern.
- Java streams give a second example of the DECORATOR pattern. Seeing the pattern used in two superficially different ways greatly clarifies the pattern concept.
Without memorable examples, design patterns are just words. In order to visualize design patterns, this book uses examples from graphical user interface programming. Students will remember how a component is decorated by scroll bars, and how layout managers carry out different strategies. (A small and carefully selected subset of Swing is used for this purpose.)