Bruse et al. (2004) have defined learning as widening one’s personal experience of a given phenomenon and teaching as enhancing students’ experience of the given phenomenon through the alignment of critical dimensions in these experiences. According to the theory of constructivism, a teacher may question the student during the teaching process in order to understand what learning models the student possesses, and then attempt to guide them to the correct theories. Constructivism is a theory of learning in which the students construct knowledge rather than merely receiving and storing knowledge shared by the teacher (Mordechai, 1998).
Thompson (2008) has defined learning programming as a process of understanding and applying programming and algorithms knowledge into practice by solving computing problems in an innovative manner. Clear et al. (2009) have classified learning programming according to the level of programming knowledge into the following knowledge levels: