The history of Western astronomy shows a series of paradigm
shifts from the geocentric
paradigm with its stationary Earth as the center of the Universe
with its epicycles and
other bizarre explanations of what appeared to be essential
complexities. Astronomy
evolved via the heliocentric to the current distributed paradigm
with its chunks of mass
connected by gravity. What appeared as essential complexity in one
paradigm was easily
resolved in the next.
It is tempting to look for similar paradigm shifts in computing.
Mainstream programming
has based much of its theory and practice on the CPU-centric
paradigm exemplified by
the von Neumann machine. A memory-centric paradigm came in 1960
with the Autokon
CAC/ CAM system and its central database (Reenskaug, 1973). The
solution was
obvious, and there must have been many similar initiatives without
me being aware of
them.
It is time to realize that the first two paradigms do not meet
our current challenges: We
are plagued with immensely large, complex, and insecure systems
that long ago left the
realm of human understanding. A recent example: Customers found
that their bank
charged them twice for the same transaction. Several weeks after
the problem was
discovered, the bank publicly admitted that they still didn't
understand how the problem
could arise: The complexity of their system was clearly beyond
human comprehension.
The bank has a staff of very competent experts, but they need a
better foundation for
modeling and implementing their sophisticated requirements.
Computers can transform, store, and communicate data, (Figure
15). The essence of the
CPU-centric paradigm is that computers are primarily used to
transform data; they
compute. The essence of the memory-centric paradigm is that
computers are used
primarily to store data; they organize applications around a
shared database. The essence
of the communication-centric paradigm is that computers are
primarily used to exchange
messages with other computers to make them collaborate to achieve
a common goal.
The three paradigms of computing
It is time to heed Tony Hoare's plea for simplicity and achieve a
better way of separating
concerns. Mainstream programming should shift to the
communication-centric paradigm
exemplified by the object computer that is the foundation for this
article.
The communication-centric paradigm has been on the horizon for many years. I first met it in Prokon's idea of distributed computers (Reenskaug, 1977), but there must have been many other initiatives. A newer example is Service-Oriented Architectures (SOA) that, in essence, is communication-centric. It didn't meet with immediate success, possibly because people tried to apply it within the CPU-centric paradigm where it doesn't belong. There are many other examples such as distributed computing. And of course, DCI and the IoT itself are, by definition, communication-centric.
----------- end extract ------------------