This text aims to teach program design in a top-down modular way. Readers are not assumed to have prior knowledge of the subject and so the development is gradual. After the initial concepts of sequencing, looping and selection have been mastered, modular design is introduced. The modular approach is exploited in order to study abstract data types and their design. The text concludes with an introduction to object-oriented design. Special features the use of simple, easily understood, design language; several hundred design problems all with structured solutions; and a structured modular approach. "An Introduction to Program Design" is aimed at first course computer science students or those people who need to undertake design as part of a conventional software package.