Did you know that writing software is fundamentally easier than other branches of engineering? Richard Stallman once explained this quite eloquently:
[I]f we put an
ifstatement inside of a
whilestatement, we don’t have to worry about whether the
ifstatement can get enough power to run at the speed it’s going to run…. We don’t have to worry about whether it will loop at a speed that causes a resonance and eventually the
ifstatement will vibrate against the
whilestatement and one of them will crack. We don’t have to worry that chemicals in the environment will get into the boundary between the
ifstatement and the
whilestatement and corrode them, and cause a bad connection…. We don’t have to worry about whether the heat can be dissipated from this
ifstatement through the surrounding
Writing software is also fundamentally easier than logistics. We don’t need to worry about whether the
if statement will be lost because we won’t know inside which of our
while statements it’s going to be. We don’t need to worry about how much delay there will be when we transfer it from a
while statement to a
for statement under heavy traffic conditions.
If writing software is easy, why are good programmers hard to find and expensive to hire? Stallman explained this better than I could:
If we assume that the intelligence of programmers is the same as the intelligence of mechanical engineers, and electrical engineers and chemical engineers and so on, what’s going to happen? Those of us with the easiest field, fundamentally, are going to push it further. We make bigger and bigger things and eventually it becomes hard again. That’s why we can develop much bigger systems than the people in the other fields.
So there you have it: 1) At a fundamental level, writing software is easy; 2) Software systems are much more complicated than the systems of other fields.
The other day I was talking with a logistics professional who expressed his frustration at the difficulty the domain experts (i.e. the logistics professionals) have to transfer their business knowledge to the IT guys. This is a big issue and I think it has a lot to do with this fundamentally-easy-thus-extremely-complex peculiarity of software. I’m going to write more about it in the next few days.