A Problem Based Approach to Teaching Programming | AMiner