August 02, 2006
Software Design: The Cognitive View
I just finished reading Software Conflict 2.0: The Art and Science of Software Engineering, by Robert L. Glass.
This is a reprint (with few new retrospective additions) of his 1990 book. While the technology mentioned in the book is outdated, many of the author's ideas and views are still valid. The book is a collection of short articles on various subjects, and one of the more interesting articles is about the cognitive side of design.
Glass explains that research done showed that design includes the (obvious) steps of understanding the problem, decomposing it into goals and objects etc. The essence of design, however, are the mental steps taken by designers:
- They construct a mental model of proposed solution
- They mentally execute the model (i.e. simulate the model to see if it solves the problem)
- If the model isn't good enough (e.g., too simple) replay the simulation to find what wrong and remodel
- Repeat 1-3 until the model seems to solve the problem
Glass also said that people tend to start with a model that worked on a similar problem and that good designers perform this process extremely fast. As I was thinking how one can train himself to get better at performing this task, it occurred to me that the practice of Test Driven Design actually mimics this process and makes it explicit.
Thus not only does TDD will help make your design better it actually trains you to design better altogether.
Posted by Arnon Rotem-Gal-Oz at 11:27 AM Permalink
|