Harold Abelson,
co-author of the seminal tome Structure and Interpretation Of
Computer Programs (SICP) said that “programs must be written for
people to read, and only incidentally for machines to execute.”
The importance of
human-to-human communication over human-to-machine is even more true in Software Architectures, where there is typically another layer or two
of resolution before machines can interpret the required
architecture.
Human-to-human communications is always fraught with
potential for miscommunications and the reasons for this run very deep indeed. Dig into this subject and it is easy to be amazed that anything
can be communicated perfectly at all. It is a heady mix of
linguistics, semiotics, epistemology and psychology. I have written
before (for example, in the “What is Law Series -
http://seanmcgrath.blogspot.com/2017/06/what-is-law-part-14.html)
about the first three of these, but here I want to talk about the
fourth – psychology.
I had the good fortune
many years ago to stumble upon the book Inevitable Illusions by
Massimo Piattelli-Palmarini and it opened my mind to the idea that
there are mental concepts we are all prone to develop, that are
objectively incorrect – yet unavoidable. Think of your favorite
optical illusion. At first you were amazed and incredulous. Then you
read/discovered how it works. You proved to your own satisfaction
that your eyes were deceiving you. And yet, every time you look at
the optical illusion, your brain has another go at selling you on the
illusion. You cannot switch it off. No amount of knowing how you are
being deceived by your eyes will get your eyes to change their minds,
so to speak.
I have learned over the
years that some illusions about computing are so strong that it is
often best to incorporate them into architectures rather than try to
remove them. For example, there is the “send illusion”. Most of
the time when there is an arrow between A and B in a software
architecture, there is a send illusion lurking. The reason being, it is
not possible to send digital bits. They don't move through
space. Instead they are replicated. Thus every implied “send” in
an architecture can never be a truly simple send operation and it
involves at the very least, a copy followed by a delete.
Another example is the
idea of a finite limit to the complexity of business rules. This is
the very (very!) appealing idea that with enough refinement, it is
possible to arrive at a full expression of the business rules that
express some desirable computation. This is sometimes true
(especially in text books) which adds to the power of the inevitable
illusion. However, in many cases this is only true if you can freeze
requirements – a tough proposition – and often is impossible even
then. For example in systems where there is a feedback loop between
the business rules and the data creating a sort of “fractal
boundary” that the corpus of business rules can never fully cover.
I do not let these
concerns stop me from using concepts like “send” and “business
rule repository” in my architectures because I know how powerfully
these concepts are locked into all our minds. However, I do try to
conceptualize them as analogies and remain conscious of the tricks my mind plays with them. I then seek to ensure that the
implementation addresses the unavoidable delta between the inevitable illusion in my head and the reality in the machine.
No comments:
Post a Comment