Abstract
This paper discusses the basis, order, and motives for creating correct abstract representations in software engineering. The problem of using poor quality (ill-conceived, undefined, harmful) abstractions significantly affects the life cycle of software, narrows the range of thoughtful solutions, and reduces the reliability of a software product. To improve the quality of abstraction, a number of possible directions for finding and implementing abstract representations have been considered. Relying on a thorough literature analysis as well as on the author's own introspective experience, a strategy for finding the correct abstraction through the coherence of a concrete compact formulation and its abstract expression is proposed. Within the framework of the proposed strategy, two fundamental principles of producing a correct abstraction are found: integrity and purposefulness. The first will allow one to see the whole picture without omitting details. Purposefulness will resolve the alignment of the abstraction with both the means to the end and the end itself. Strategic coherence is provided by individual creativity, self-assessment, motivation, and accountability for the result.