Engineers have always imagined a perfect world. A wheel might be
specified as 28cm in diameter, a shaft half a meter long, to go
into a machine that will spin them at 75RPM. The engineer will
know, as would anyone with the faintest mechanical experience, that
none of these specifications will actually be truely right when
realised physically. Regardless of whether the parts are made in a
backyard workshop with a tape measure and some worn-out tools, or
they are precisely constructed with precision engineering equipment
callibrated to the best specifications available, the fact is that
the wheel will nexer be _exactly_ 28cm, nor the shaft dead on half
a meter, and there's no way that the last of 75 revolutions will
complete at precisely 60 second intervals. The engineer will know
this, and should the design rely on anything practically
approaching the perfection of the original specifications, great
care should be taken to bring the physical parts as close as
possible to the original specified measurements. However no
workable design could rely on perfection in the physical world, and
short of perhaps a few overunity nuts, no engineer with any
practical experience would try.
But today we have a machine that can create a perfect world, a
world where certainty of every specification in a design can be
realised, without assuming for the possibility of any error at all.
This machine is the digital computer.
It is a facinating concept that by relying only on an action to
fall within a certain range of behaviour, generally certain
voltages in an electronic circuit, operations can be abstracted
into resulting in just one of two states - on or off. By creating
devices that can react to these states, ignoring the true
inaccuracies of our world and behaving only according to these two
defined states, they create their own perfect world. A world where
a 28 can never become a 28.00013, where the meer possibility of
this would in fact prevent any purpose of the machine being
realised. Every on and every off, every 1 and 0, is held within it
is an exact representation of the design, as perfect as the
specification of 28cm diameter written on a piece of paper. But no
longer just concepts, here these perfect states can be put to work
within the computer's perfect world.
So in this perfect world we build new machines, made purely of ones
and zeros, operating precisely on the laws that our computers were
built to obey. Without the limits inevitably imposed in the
physical world, where slight errors add up with every process, the
traditional limits to design and complexity are redefined entirely.
Impossible designs combined from the work of thousands of people
can be realised, and run precisely and reliably. This is the magic
of software, billions of ones and zeros arranged in the exact
pattern to complete all the actions which you can perform on your
own PC, and put there by an army of programmers whose work can be
copied and adapted endlessly without a single error.
Of course there are errors seen by us users. Errors not in the
computer and the perfect world that it creates, but in the design
of the software machines that work within that world. For these
designs are themselves a product of our world, and within it our
own imprecise and imperfect minds. The exact processes of the
computer's perfect world, even though to our own design, are ty can
only go so far towards truely oo foreign to our thinking. We can
create ways to relate to that world. Programming languages allow
programmers to express ideas more intuitively than in raw assembly
instructions that make the rules of the computer's world. User
interfaces are built of hardware and software so that we can
interact with computers from the perspective of our world, so far
detacted from the individual suffling of electronic states between
billions of transistors. But the truth is that we can never match
the perfection of that world, we will always build machines that
fail within it, as well as those which fail to adequately interact
with their human users. The true power of our perfection machine
can not be realised because we ourselves are not perfect.
Yet it is this imperfection that enables us to exist within out
world, where nothing is truely certain, indeed rarely even
measured. By always adapting, taking our experience and using that
to bias our imprecise thinking towards new solutions. This is is
how we can design in the first place, while computers are slaves to
the the precise rules that they follow.
A computer that programs itself is quite possible though, it need
only run software designed to add this degree of uncertainty,
introduced into its world as random information which it can use to
vary its normally certain actions. This is the basis for neural
networks, the current and most successful method for implementing
"artificial intelligence". Once the random variations have lead to
a usable process for performing the desired task, the random
influence can be stopped, and the software generated to perform the
process can be repeated perfectly from then on. Software designed
by a computer using random variation, to now be used within its own
world of perfection.
So it is really the combination, that of our imperfect world and
the perfect one of the computer, which together allow for the
greatest thinking machine. But what is the ideal balance between
them? Should random imperfections only be used to find perfect
solutions to be run identically thereafter, or should they continue
to constinuously interract with the software machine, ever shaping
it to adapt to the imperfect world outside its silicon chip as our
own minds do for us? Should the intelligent computer be able to
adapt to running its software perfectly only when that perfection
is appropriate to the task, akin to how we use the perfection of
computers now to supplement the abilities of our own imperfect
minds? Should it ever really stop learning from the infinite
combinations of possibilities that it can find in our imperfect
world?