Thoughts on software and hardware

There is no essential difference between software and hardware except the economic difference. The people who put forth metaphors such as "hardware is like the brain and software is like our thoughts" apparently have no understanding of how computers work.

Everything that is done in software can be done in hardware. In fact, the way software works is by reconfiguring the hardware. The introduction of the programmable computer was the invention of a machine that could be endlessly reconfigured without having to actually take tools to it and physically adjust its parts. And various features of computers have at various times moved from hardware to software or the reverse: The original Macintoshes could get by with so little RAM because a lot of the operating system was actually put into the hardware. The real difference between software and hardware is that it is cheap to reconfigure software and expensive to reconfigure hardware.

So software is simply a way to cheaply and continually reconfigure an electronic machine into new states. Those states by themselves have no meaning: any state could represent an attempt to solve a differential equation, a position in a chess game, or a line of music, depending upon what its users intend it to mean. The "analysis" of a chess game by a computer could be hooked up to a synthesizer and treated as a musical composition instead.


  1. Gene, if the same piece of software exists on different pieces of hardware, doesn't that suggest that software is a pattern, as opposed to a concrete object?

    1. Keshav, it is only the existence of a higher level languages that allow us to consider the "same" software on different pieces of hardware the "same" program. The compiler for that platform must always render the code as something platform specific.

      Of course, these higher level languages exist in order to let us express our ideas about what should be done in a form abstracted from the particular machine in question. In that sense, you are correct: The source code representation of a program in, say, Java, is an expression of an idea. But in order to run on any actual computer, that expression must be transformed into a concrete machine using that hardware.

  2. Could this be a symptom of the Cartesian paradigm?


Post a Comment

Popular posts from this blog

Central Planning Works!