posted 12 years ago
You and I both work at the same software company. We need to buy third party software for controlling a robotic arm. We are competing for a huge bonus.
The third party I use provides an interface. They give me a list of methods their class will implement. I write me code to call those methods. I don't know, or care, how they work internally, I just know the method signature. So I write my code to call 'raiseArm(3)' or 'turnXAxis(15)'.
The day before my presentation to the board, my 3rd party vendor has a brand new release that is 10 times more efficient. Since their new code uses the same interface, I don't have to touch my code - I just drop in their new compiled classes.
Your third party gives you a list of methods. You write your code calling these explicit methods. They day before your presentation to the board, your vendor releases a new version that is 10 times more efficient. But all their method names changed from something like 'raiseArm()' to something like 'raiseArm2()'. For hundreds of methods.
Do you a) go in front of your board of directors and say "We're using the old version of the vendor software that is slow", or b) Spend all night re-writing your code to call the new methods, re-testing and validating every line?
Notice that since my code didn't change, I don't have to re-test it. You do. And in six months, when both vendors come out with their version 3.0 software, I can be sipping a cocktail on a beach spending my bonus money, while you have to work ANOTHER all-nighter to get your code working again.
There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors