software and hardware analogy