Programming principles and patterns