Teaching through Problem Solving