Rather than solve the problem of defining the semantics of languages that developers find useful, they work on the definition of languages whose semantics are easier to define. Although this work is interesting and potentially useful, it has resulted in a growing gap between theory and practice. We have become dangerously dependent on large software systems whose behavior is not well understood and which often fail in unpredicted ways. Otherwise, we'd be out of the upgrade business. Sometimes, people ask me what I will do when the compiler is done.
All repairs tend to destroy the structure, to increase the entropy and disorder of the system.
As time passes, the system becomes less and less well-ordered. Sooner or later the fixing ceases to gain any ground. The change process continues until it is judged more cost-effective to replace the system with a recreated version. As a large program is continuously changed, its complexity, which reflects deteriorating structure, increases unless work is done to maintain or reduce it. For a software resue technique to be effective, it must reduce the cognitive distance between the initial concept of a system and its final executable implementation.