It may be difficult to say why the old method fails, but that it does fail, anyone can see. When is software delivered on time? Experienced programmers know that no matter how carefully you plan a program, when you write it the plans will turn out to be imperfect in some way. Sometimes the plans will be hopelessly wrong. Yet few of the victims of the plan-and-implement method question its basic soundness. Instead they blame human failings: if only the plans had been made with more foresight, all this trouble could have been avoided. Since even the very best programmers run into problems when they turn to implementation, perhaps it’s too much to hope that people will ever have that much foresight. Perhaps the plan-and-implement method could be replaced with another approach which better suits our limitations.1
The passage above is from Paul Graham’s wonderful book on advanced Lisp programming, On Lisp, but very few changes would be required to transform it into a passage you might find in one of Friedrich Hayek’s books on command-and-control economies. Hayek’s views on economics and Graham’s views on programming both give central place to their realization that we humans are simply not smart enough to grasp all of the details of the complex systems we are called upon to build. Most of the complex systems that function in our world exist because it was possible for trial-and-error work to produce them evolutionarily over time. As far as I can see, the level of complexity of a system that we can produce using pure theory is at about the level of complexity of an atomic bomb, which seems far less complex than the task of producing a system of wages and prices that optimally allocates resources in a population of heterogeneous agents.
- Paul Graham : On Lisp : Chapter 1↩