Introduction to Pattern-Driven Software Problem Solving