Article Preview
TopIntroduction
There is still no pedagogy to teach programming that stands out significantly from others and no consensus on what is the best way for learning programming. There is still a need to develop new teaching methods for learning in introductory programming courses. Researches have constantly addressed this issue (Quinson & Oster, 2015; Valerie & Guzdial, 2015; Dasgupta & Resnick, 2014; Kalelioglu & Gulbahar, 2014; Flannery et al., 2013).
Even though creativity is demanded in programming, the number of pedagogical methods addressing creative aspects of programming is low in computer science research. Despite students should be motivated to improve their creative abilities, computer science education researchers and teachers does not address creative aspects very often.
According to Donald E. Knuth, computer programming can be compared to an art form like the creation of music or poetry. This analogy has the intention to make a point of the intrinsic creative aspects of programming. Indeed, computer science experts and apprentices should improve their creativity. This is due to the fact that creativity is very evident and relevant in programming processes. Thus, the development of creativity is an important issue in teaching and learning programming.
Novice programming students show many bottlenecks when programming, such as issues related to the lack of ability of abstraction and lack of the creative ability to deal with problem-solving necessary to create computational solutions.
The two main challenges for students are learning a new programming language and learning how to create a solution for a given computational problem (Soloway, 1986). Considering the first issue, learning the syntax and semantics of a programming language is complex for novice learners. Nevertheless, problem interpretation, solving problems algorithmically and coding an algorithm into a programming language is also challenging for beginner programmers.
Experienced programmers can readily solve a problem, identifying what data types involved, which statements to use, as well as different ways to solve the same problem using distinct strategies. Previous research addressing programming experiences of students during learning programming (Johnson & Soloway, 1985) discuss that experienced programmers are able to solve new problems using prior experience, adapting previous solutions to solve them.
Some studies (Robins et al., 2003; Muller et al., 2004; Soloway & Ehrlich, 1984) show that programming expertise is greatly represented by a knowledge base of pattern-like chunks. Programming patterns are simple design patterns that can help programming novices, because they are solutions to basic recurring algorithmic problems and form the building blocks for the construction of new programs.
Programming patterns are solutions that commonly appear in computational problem solving. Programming patterns reflect programming strategies designed by experts. So, students take advantage of good programming practices by means of the application of programming patterns.
Alexander Christopher (1977) was the first researcher to approach design patterns. He originally defined design patterns as reusable solutions to approach frequently recurring problems in architectural design.
Design patterns have been adopted in various computer science fields such as software engineering, computer science education, human-computer interaction, and e-learning (Kolfschoten et al., 2010).
When students apply programming patterns they can “stand on the shoulders of giants”. By means of programming patterns, students can use a repertory of building blocks to exercise their creativity combining and recombining these blocks in an unlimited way. Besides, they know many pieces of solutions becoming able to concentrate more attention in problem solving process.