Intuition from practical computing
Everyday experience with computers and programming leads to observations like the following:
• General-purpose computers and general-purpose programming languages can be built.
• Different programs for doing all sorts of different things can be set up.
• Any given program can be implemented in many ways.
• Programs can behave in complicated and seemingly random ways—particularly when they are not working properly.
• Debugging a program can be difficult.
• It is often difficult to foresee what a program can do by reading its code.
• The lower the level of representation of the code for a program the more difficult it tends to be to understand.
• Some computational problems are easy to state but hard to solve.
• Programs that simulate natural systems are among the most computationally expensive.
• It is possible for people to create large programs—at least in pieces.
• It is almost always possible to optimize a program more, but the optimized version may be more difficult to understand.
• Shorter programs are sometimes more efficient, but optimizations often require many cases to be treated separately, making programs longer.
• If programs are patched too much, they typically stop working at all.