Instructional design of a programming course: a learning theoretic approach