Effective Learning and Teaching in Computing