A program is a specification of operations to be done in the future. Programming is the process of reasoning about such specifications. Programmers reason about the future. Programmers should be good at this.

It is possible to glimpse the future by running a program in a variety of ways. An artful choice of ways leads to more valuable glimpses than dull ways. Testers should be good at this.

The purchase of a program is an investment in the future. The wise investor seeks the best information available from all sources but recognizes that there is an element of speculation in every choice. Customers should be good at this.