Problem and program.
Methods and tools for specification.
Program description tools and methods.
Significance and levels of abstraction.
Abstract data types.
Programming theorems and their application.
Design patterns of object-oriented programming; creational, structural and behavioural patterns.
Brian W. Kernighan, The Practice of Programming, Pearson (1999);
Weinberg, Gerald M., The Psychology of Computer Programming, New York: Van Nostrand Reinhold.