The business of software development is solving problems. Following Polya, we can increase our ability to solve problems by focusing directly on problems themselves, on their parts and structures, and on the relationship between problem and solution method. This leads to an emphasis on describing the world outside the computer, and reasoning about it explicitly; to an approach to problem complexity and decomposition; and to a particular view of the proper role of object-orientation in software development. 1 Problems and Solutions Software development projects, in my view, are concerned to solve engineering problems. Software developers make machines that are to be installed in the world, and are to make a difference in the world by interacting with it. For example, a word-processing system is a machine installed in an office, just like a typewriter, but much more powerful and versatile. As software developers we don't construct the physical fabric of the machine; we only describ...