Multicellular Computing:
Evolving Levels of Abstraction in Computing Systems
The evolution of computing systems is taking a course
similar to that of life, and now the two are merging!
The evolution of computing is much shorter and better
known than the evolution of
life. Even so, the history of computing is
already losing track of many of the stages of development, and the
details of the way each new stage evolved are not fully knowable.
Nonetheless, here is a brief sketch of the stages as I understand them.
I witnessed most of them, still, othersthers may characterize the
development of computing differently.
- Modern computing began during
WWII to facilitate code breaking and computation of artillery
ballistics. At first, these machines were
programmed by hard-wired plug-boards configured by
hand to perform higher-level logic and arithmetic functions.
- Soon, the notion of a machine
instruction
emerged. Machine instructions represent
coordinated hardwired sequences of gate changes with predictable
results (now machine instructions are directed by
microcode rather than hardwired, but that is another story).
Early programs were carefully crafted
sequences of machine instructions that exploited very clever (and today
verboten) kinds of self-modifying code. A program that involved a
thousand machine language instructions was a pretty substantial program
and very difficult to debug!
- As we learned more about programming, we created reusable
sub-routines or functions, i.e., sets of machine instructions with
predictable results that can be treated as a unit.
- The first levels of code abstractions then appeared: assembly
language and compiled COBOL, FORTRAN and soon thereafter, ALGOL.
At that stage a program still ran on the bare metal without
operating systems, I/O drivers, or other abstraction layers.
The computer halted when the program was finished, which was made
obvious when all the blinking lights on the operator’s
panel froze (although, given the unreliability of the early machines,
frozen lights all too often simply signaled a hardware failure or a
program bug). It should also be noted that, at that stage, programs were
crafted for a single machine. Without any layers of
abstraction between the program and the hardware, a program was unique
to that machine.
- Each of the relatively isolated and rare computers attracted a
group of computing people – amateurs of course, it would be years
before computing became a profession – that explored
what the computer could do and freely shared their techniques and code.
- As computers became more alike and people began using computers
for more routine tasks, operating systems emerged as did
outboard I/O processors, databases and other kinds of middleware.
The previously separated communities of
computer people finally had much to share with one another which led to
the formation of ACM (the first issue of
Communications was published in
1958).
- The emergence of minicomputers and then “microcomputers”
(which evolved into PCs), based on the early microelectronic CPU chips,
opened computing up to hobbyists and completely changed the
common notions of what a computer was for. Instead of just being
for record keeping and arithmetic, computers branched into word
processing and eventually into virtually anything that could be made
digital.
- The rapid decrease in price/performance due to Moore’s
Law continued the expansion of computing into new areas and in
unheard-of numbers.
- In
the mean time, in the ‘60s, the early efforts to connect computers
arose. Rather than moving rolls of paper tape, boxes of punch cards,
or reels of magnetic tape from machine to machine, it
would be convenient to send data over a wire.
- This line of evolution eventually led to the ARPAnet in the
early ‘70s, which led to the modern Internet.
- In 1989-1991, Tim Berners-Lee and collaborators proposed and built a
combination of HTTP, HTML, and a crude browser that became the World
Wide Web.
- The Web, in turn, has spawned all sorts of interesting
(multicellular) computing constructs such as search engines,
peer-to-peer networks, wikis, blogs, social networking sites,
folksonomies, Web Services, SOA, mashups, and Web 2.0.
All of these emergent levels, from
individual gates (now based upon miniscule transistors printed on
silicon rather than vacuum tubes or discrete transistors) to
collaborating web services, participate in our everyday experience of
computing.
What is amazing is that the evolution of the “virtual” world
occurred so rapidly. Computing had become so complex by the ‘80s
(a mere four decades after the first general purpose computer) that different
threads of evolution – hardware, software, networking, and
cultural/economic – were operating in parallel, dependent upon
each other and reinforcing each other in completely unexpected ways.
Finally, in the mid 90’s, the Internet/Web
and the dot.com boom supercharged the evolution of computing by driving
it into every nook and cranny of modern culture. We
now see amusing consequences such as adults asking their
middle-school kids to help them with some computer problem or business
executives with expensive laptops that are considerably less powerful
than their kid’s three hundred dollar game box. Many
of us walk around with one or two computers more powerful than a 1960
mainframe in our pockets. And some of them, such as iPhones, Blackberrys, and the
Palm Pre, are connected to the Internet at least
intermittently.
Modern high-tech human societies --
arguably the pinnacle of the evolutionary path that evolved step by
step from atoms -- are begining to be influenced as much by bits as by atoms.
That is, the evolution of life and the evolution of computing
are merging, bringing the complexity of both realms together in
completely unforeseeable ways.
Contact: sburbeck at mindspring.com
Last revised 7/11/2009