If the TheSourceCodeIsTheDesign, then what is normally called "the Design" really is one level more removed from the actual product than the design of a physical product. No wonder software design tends to be so abstract!
Shouldn't this shift in perspective have implications for our thinking about software design? Any thoughts?
Instead of TheSourceCodeIsTheDesign, we should say, "Designs should be executable". -- DaveHarris
I have always described a "Pattern" as the DesignOfTheDesign.
My reasoning is that a "Design" is the model that the source-code renders. Certain combinations of classes and methods appear so frequently that we begin to give them names, and think of them as entities -- I'm thinking of things like "Stack", "Queue", "RingBuffer?", and so on.
I call the collection of these things the "Design" of the code.
Certain combinations of these design elements appear so frequently that we begin to give *them* names, and think of *them* as entities -- I'm thinking of things like "Strategy", "Visitor", "Factory", and so on.
I call this DesignOfTheDesign the "pattern", in an Alexandrian sense. For me, this relationship seems to hold everything together and helps me keep the abtraction levels in order. Please recall that I assume that everything is expressable in a common reflective language, so all three elements can be described and manipulated within the same environment.
-- TomStambaugh