Teaching Introductory Programming With The Inverted Curriculum Approach