There are two components to our computing: hardware and software. With one instructive exception, which I’ll mention below, it was decided, many years ago, that the hardware should remain fixed and the software should change to reflect the particular problem being solved. Indeed, changing the hardware under a particular piece of software has often caused problems: word size changes, endianness issues, etc.
So, I’ve been pondering whether this asymmetry is essential or just convenient. Assume that I have a system consisting of some standard PC architecture hardware and a program I wrote in Python to calculate a fast Fourier transform. Could I keep the software the same and change the hardware to make it calculate my Canadian income tax for 2006? Even with the recent advances in FPGA technology, this remains (for digital computers at least) a theoretical rather than a practical question, but perhaps an interesting one.
My instinctive stab at the answer is “yes” and this leads to the possibility of replacing the “universal computer + program” with “computer + universal program”.
Many years ago, when I was starting out in computing, the general belief was that programmers were a dying breed, an unfortunate temporary measure needed until the computer languages became accessible to everyone. COBOL was finally to kill programming as a separate activity as it was “just English” and “reads like a novel”: readable and writable by anyone. I don’t seem to remember all programmers disappearing and a few years later a program generation program was released called The Last One. This was so named because it was the last program that would need to be written. In looking for a link for “The Last One”, I see that my memory is better than Google’s.
But, given my assumption about the symmetry of hardware and software, we could really write The Last One. The interesting thing, of course, would be that that our last one could be any program. Indeed it could be a program of just one statement. Or, possibly, none at all. So we arrive at the point that any system that can be produced by a combination of hardware and software can be produced by hardware alone. And there is the basic asymmetry: software needs hardware but hardware doesn’t need software.
I mentioned one exception. It is an idée fixe of mine that digital computers are a temporary aberation (perhaps a topic for a later blog). Almost all development of analogue computers stopped dead in the 1960s and it is interesting to speculate where they would now be had they had a fraction of the attention given to their digital cousins. I say “almost all” because Analogue Field Computing is still there and possibly growing in popularity. This is an under-explored area wherein the hardware can be thought of as changing under the software.