Before software, expressions were dead. Once made, they would not change or develop, just like a boulder does not change. Nowadays, expressions are living, vibrant things, and if you examine the various ways in which they are alive and vibrant, you'll find that modern expressions shatter the old framework, just as the framework we use to deal with boulders shatters if we try to apply it to elephants.
Example: If a boulder is in the road, we know it will not move by itself, so we need to obtain equipment to move it somewhere where it won't bother anyone, like down into the gully. We fully expect it will not crawl by itself back up into the road, so much so that if we do find the rock back in the road the next day, we do not even think of the possibility of it having moved itself; we immediately ask ourselves what human moved the rock back up. If an elephant is in the same road, it doesn't make much sense to spend hours to get a crane, lift the elephant up, and drop it down the gully. By the time you've gotten the crane, the elephant has likely moved; if it's still there, it might attack you, and that's even more likely if you try to lift it with the crane. Elephants require another conceptual framework to handle the problem; I'd recommend one that accounts for elephants' tendency to gore people to death. This is not something the boulder framework needs. It may seem strange when you first think of it, but upon reflection you should see that very little of your understanding about dead things carries over to understanding living things.