Patterns of programming