Teaching Through Problem Solving