This subject examines the relative strengths and weaknesses of various programming styles by studying their core features in lambda-calculus and related systems. Special emphasis is placed on program re-use and type safety. Also, the pattern calculus is presented as a unified foundation for all three of the imperative, functional and object-oriented programming styles.