News

Loading...

Tuesday, July 31, 2012

Hardware Is Like the Brain, and Software Is Like Our Thoughts, Right?

One sees variations on this idea all the time, but it is a seriously misleading analogy. Because humans write code in human-friendly languages that appear to give the computer "instructions," it is understandable how this happens. But someone writing code is not telling an existing machine what to do. He is building a new machine.

Every program actually winds up turning into a temporary machine when it is run. The big idea that enabled the creation of general purpose computers is that, rather than building specialized circuitry for each thing one wanted a computing machine to do, one could create a machine that could be "re-wired" on the fly, by loading a new configuration into its memory.

Anything done in software could be put in hardware instead. You can understand this perhaps by considering graphics processors and floating point processors: they replace graphics software and floating point software that do the exact same things, only more slowly. There is no reason we could not build Microsoft Word entirely into the hardware, in fact, create a machine which simply was a hardware version of Word, except that it is uneconomical. Not only is hardware more expensive than software to manufacture the first time, it is much more expensive to fix bugs in hardware, since that involves swapping out components instead of just posting a new version on a web site.

But that's it: there is no fundamental distinction in computer science between logical hardware capabilities and logical software capabilities. We just stick the stuff that needs to be really fast, or is really basic*, in hardware, and leave the rest in software because it makes economic sense. So anyone who talks as if this distinction is fundamental, and can tell us something interesting about human mentation, needs a thorough debugging.

* -- For instance, obviously, the circuitry that loads programs into memory must be hardware based, since otherwise how would it get loaded? (And yes, I understand that hardware may contain only a very primitive loader that only has the job of loading a more sophisticated software-based loader, but the point stands: you need something in hardware to start loading software at all.)

1 comment:

  1. Time to bust out a breadboard and some NAND gates...

    ReplyDelete