I. Introduction
Teaching programming to novices is a challenging task. Bennedsen and Casper [1] found that only two in three students enrolled in a computer programming course successfully completes the course, a finding that Watson and Li [2] corroborated in 2014. Learning how to program can be a complex task [3, 4]. Novice programmers need to simultaneously consider several interacting elements such as the purpose of the program, how the computer works, the programming language syntax and semantics, and algorithm design [3]. When students have not developed the appropriate schemata that enable them to solve problems from scratch on their own, these interacting elements may overwhelm students, often resulting in a cognitive overload [5].