I often have difficulty distinguishing between forces and context. Part of the reason for this is that I try to use
forces and context together to index into the space of patterns that might apply to a given problem. The choice of pattern depends on both forces and context.
I currently use the following question to help me decide:
Is this thing something that choosing this pattern can affect (a force), or is this thing fixed regardless of the choice of pattern (a context)?
But when I use this question, I find that the forces at one level of abstraction (sometimes!) become the contexts of the next lower level of abstraction. For example, contention is a crucial force that must be considered when designing parallel algorithms. But contention becomes a context when you are selecting locking primitives with which to implement this algorithm, since the primitives cannot significantly control the level of contention; they can only react to whatever level is present in the design.
But note the word ``significantly'' in the previous paragraph. Locking primitives can sometimes change the level of contention enough to matter.
Is this one of those situations where we tell simplifying white lies to beginners, so that knowledge of these special situations are hard-won badges of courage for experts?
Or is there a continuum between forces and contexts? Things like contention that are sometimes forces, other times contexts, and yet other times somewhere in between?
, once again...
This was keeping me up last night, so I reviewed some correspondence with StevePeterson
and reread parts of TheTimelessWayOfBuilding
seems to have forces be internal emotions within one person or social interactions among members of the group at hand (e.g., the family that is to occupy the house being timelessly built).
He has context be external social, cultural, and climatic norms within which the person or group must live.
My problem seems to be that the patterns I write are far from the people using the system. They are similar to those patterns that would be used to design the wiring, plumbing, heating, or air conditioning for a house -- topics that Alexander is for the most part silent on (no surprise, Alexander is an architect, not a building contractor).
One option is to personify my algorithms, machines, and data. This might be a fun approach, but I would nevertheless have to think through the underlying analogy before I could pull this off in any but a seat-of-the-pants manner. I am currently entertaining the internal/external analogy: Forces are those things that this pattern can change, contexts are those things that this pattern cannot change, and the pattern itself embodies the wisdom to know which is which.