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
below). 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 ------------------