The Axioms of Programming

  1. There's no fundamental difference between programming and designing.
  2. Super-linearity: Programming is super-linear by nature.
  3. Instability: The external behavior of a component will need to change over time.
  4. Discontinuity: Small changes yield non-proportional results. (Gives rise to the Butterfly Effect: A human cannot predict the full effect of a change in the program. Automatic tools are pretty bad at it as well).
  5. Entropy: The total entropy of the code will naturally increase. One needs to invest external energy (time) in order to decrease entropy (Writing ugly code takes less time than writing clean code)
  6. The Uncertainty Principle: The more detailed the specification the more error-prone it is.
  7. Unpredictability: An accurate estimation of development time requires time that is proportional to the estimate itself.