Particles and Waves

I'm reading The Quantum Self by Danah Zohar (ISBN 0-00-654426-6). There are lots of passages that remind me of aspects software development. Or rather, aspects of software itself. In particular, during my consultancy travels I notice that a lot of software shops pay too much attention to the individual bits of software and not enough attention to the way the bits are connected together. The connections are everything. As Fred Brooks said (in The Mythical Man Month):

The essence of a software entity is a construct of interlocking concepts

Anyway, back to The Quantum Self and the snippet that grabbed me:

each sub-system maintains some identity through its particle aspect and merges with a new and larger identity through its wave aspect.

The particle aspect reminds me of the individual bits and the wave aspect reminds me of the interlocking. Neither is more important. A quality design needs both. Poor designs are typically wave-aspect-poor. Same for books. A lot of books on, for example, C++ focus on the particle aspect of C++. They give you lots of small code fragment and detail on syntax but almost nothing on the bigger picture; on how to design the stuff to fit together and how to use C++ idiomatically to reflect the design.

I'm also reading Chaos by James Gleick (ISBN 0-349-10525-1). There's a bit in it that reminded me of something Kevlin Henney said in one of his presentations. He (Kevlin) was discussing Patterns (in the Chrisopher Alexander-Richard Gabriel sense rather than the Gang of Four sense) and in particular the idea of forces. Gleick (quoting D'Arcy Thompson) asks:

whether all the patterns might be reduced to a single system of generating forces.

In my copy of Chaos I've scribbed "form follows forces". I mean this as a replacement to the idea of "form follows function" (which is a sound-byte I've never agreed with). Forces are important. In my mind they relate to the particle-wave duality I mention above. The forces come from the wave aspect. From how the parts interconnect. From the design. To quote Eliel Saarinen

Always design a thing by considering it in its next larger context.

This is one reason testing is so important. Testing forces you to use things. Using something forces you into the next larger context. This won't (despite what some say) magically make designs appears all by themselves but it does put you in a good place to think design thoughts.