Abstract Space - Draft
Abstract space is a 3-dimensional space that exists within our minds and the minds of others. It is a shared conceptual reality where abstract activities - such as Software Engineering - take place.
Image graciously licensed with permission of James Sypniewski
Software Engineering is the coming together of human minds to build incredibly complex artifacts. These edifices of complexity are mostly invisible. We can see the output of a system, we see the source code and sometimes the metrics, but we cannot see the bits flowing through nor the invisible structures created by the minds of our fellow engineers. Unlike a building, we cannot instantly conceive the design by using our eyes.
We first must be submerged in the source code, to build up the structure in our minds.
This is abstract space - the realm of the Software Engineer. It is what separates engineer from a programmer. In this realm, there is no wind, no heat. It is devoid of external senses; it is our inner world: visualization, thought and feelings.
When you construct a structure in abstract space and feel something is wrong, that is your first awareness that some behavior is being violated.
When two people have different images
When two people work on a codebase with unaligned visions of the structure in abstract space, how they interact with the source code will be very different.
To take a construction analogy to represent software:
If one person sees two rooms with a pipe connecting those two rooms:
Whereas the other person sees a single room with a strange pipe in the middle.
The person who sees the single room will think the pipe is pointless and will connect up the room as if it were one.
The other person will see the pipe being removed or going unused and then a criss-cross of connections appearing between the two rooms that shouldn't be there.
"What a mess," they will think - This is other people's code. This is also what most "Software Engineering" looks like today.