EvilRob.org -> Weblog

Sysadmin Field Notes

Why is hardware so much easier than software?

February 23, 2004

So as I've been designing away little chips and circuits in my Computer Organization class, something has struck me. Modularity is very easy to create. Need an 8 bit adder? No problem, build a 1bit adder and stick 8 of them together. 64 bits? Take eight 8 bit adders. Want those to do that addition within an ALU? Drop it in and you're ready to go. It's all very easy and obvious. From these little parts shuffling around 1's and 0's, incomprehensible complexity is built up.

Now flip to the software side of things. It's rarely that obvious where to divide things. It's hard to build to build modules that will drop into any system, anywhere in the world and still function properly. Generally, most software sucks pretty bad from a user standpoint I think, whereas Intel can crank out millions of incredibly complex pentiums that drop into all kinds of systems by tons of different designers and it almost always works, with very few flaws.

Here are my thoughts (most of them probably not new):



  • Interface: The interfaces internally and externally are all very simple. Here are 8 wires, which will be either 0 volts or +5 volts (roughly), dpending on truth table A. It's simple and easy to understand. Data inputs, control inputs, and outputs, all either zero or one. You can draw the boundaries between modules just about anywhere you want, and they are still compatible. This also means you can much more rigiorously and easily test sub-modules.

  • Math: Because everything is essentially a math or logic operation at its core, there is a big library of techniques that can be used to prove the operation or correctness of various functions, and do simplifications where necessary.

  • Interpertation: What we're pushing around is just voltages; 1's and 0's. Those are our base unti, and there they are so simple it's impossible to misinterpert them. The base primatives (AND/OR/NOT/etc) are very easy to understand. It's up to the software to make human sense out of it; are these 64 bits: a length, a unit of time, my hat size, etc..

I think both of these ideas are very closely related. It all comes down to people. When a hardware spec says to a sub-module "give me 64 bits that are the result of performing function F on these 128 input bits", there isn't really any wiggle room. If the numbers are small enough, you can directly verify that it works or doesn't work, and then include that module elsewhere with a pretty good assurance that it will work. Nobody is ever going to throw anything but a zero or one there. But the people who use software have an amazing capacity to throw unexpected things at the software.

Yes, I'm oversimplifying a bit; I'm sure any hardware designers out there are going to angrily comment. :-) But it sure seems to me that the hardware people are much more "real" engineers. They have small, understandable entities with real physical properties, and combine them within the limits of those properties, using a variety of disciplines. I think trying to apply a lot of the same thinking to software development is where some of the industries problems come from. The complexity in software lies in making all of those bits mean the same thing to different people.

As a lot of others are concluding these days, software to me now seems to be a lot more about understanding the people who use it and what they want to do with it rather than the language it's written in or the computer it runs on.

Posted by rmeyer at 1:50 PM | TrackBack (0)

This is Rob Meyer's weblog, a weblog focused on software development and system administration based on 10 years of experience. Want to explore further? You can find out more me or see the rest of my website.

Wondering if I've written on something in particular? Try searching:

You might want to take a look at some of the more requested postings (as judged by incoming traffic):

Want more? Subscribe to this site or contact me at rob at big dis dot com.

See my writings on:


Powered by Movable Type | Technorati Profile