Software
267
Horizontal abstraction is the simpler of the two to understand,
and the more common. Computer systems are built ‘on the shoulders of
giants’. That is to say we no longer need to place individual pixels onto
the computer screen. We can assume a computer will draw a square if we
specify the dimension and coordinates of the center. That’s abstraction.
Today’s computers are even more helpful. We can ask them to draw a
rotating cube lit from a certain angle and the computer will do the whole
job for us. But, there are always practical limitations to this.
I want my cubes to move around the screen naturally but I am not
sure what physics model has been implemented. What will happen when
they bump into each other? If the abstraction is not thoroughly thought
through they pass through each other in a very odd way, breaking up
and showing me they are really made of triangles, the illusion of three
dimensions is lost. Whenever we work at an abstract level, we risk being
exposed to its inner guts at some point. Joel Spolsky, a computer scientist
who worked on Microsoft Excel, proposed the Law of Leaky Abstractions
to explain this. An example of his law in action is the TCP/IP protocol
stack that transports data over the Internet. The stack is hugely reliable,
yet I have to debug one of these stacks at least four times a year!
The problem is that the TCP (Transmission Control Protocol) is
designed to provide reliable delivery of information: internet pages,
my bank account and the like. But, the internet protocol ‘IP’ on which
it relies is only designed for best-efforts. When a link loses a packet of
information, the TCP has to retransmit it. This takes additional time. TCP
provides an abstraction of a reliable connection, but the implementation
is not as robust as it may seem, and the details leak through as variable
latency and throughput. This explains why your web pages sometimes
do not completely render. You are told it is reliable, but often it is not!
Experience is so valuable to a programmer because they know which of
these specifications to take with a pinch of salt and when they are likely
to leak. They are battle scarred by previous naivety.
I think Spolsky’s Law follows from Rice’s Theorem and ultimately
from Turing’s no halting proof. If leak-less abstraction was possible you
could, in principle, write a recursive partial halting solution. By layering
abstraction on top of abstraction you would be able to solve some very
complex problems, eventually including the Halting Problem. We know
this is impossible, so non-leaky abstraction cannot exist.
The other method of splitting software is vertically. This is often
done following the natural boundaries of an organization: functional or
geographic. Again there will be leakage between the systems; the data
you get from the finance department might not be detailed enough for
HOUSE_OVERSIGHT_015957
Discussion 0
No comments yet
Be the first to share your thoughts on this epstein document