Devlin has defined mathematics as “the science of patterns” [De97]. The tools of that science are abstract notation, and the means of verifying the discoveries of that science are proofs based on logic.
When we follow the way of the mathematician, we use an analogy between developing a proof of a mathematical proposition and developing a diagnosis of a software defect in a program. In the past several centuries, mathematicians have developed numerous methods for constructing proofs. These methods, however, have only recently been organized and taught in a way that the average student can learn and apply as effectively as the mathematically gifted. This opens up a rich tradition of problem-solving methods that mathematicians have developed.