In recent years, it is generally accepted that teaching and learning of programming is generally characterized by certain “difficulties”, which manifest themselves mainly in the construction of an algorithm or a program.
Some difficulties arise in other cases as well: when, for example, the programmer tries to justify or predict the behaviour of an algorithm or attempts to correct it. Some difficulties seem to be, against in a way, inherent in the programming itself, in the sense that they meet systematically, and are almost independent of the method of teaching the respective subject. Let’s start from the beginning when it comes to learning programming.
The “difficulties” of education programming
Du Boulay (1989) describes five key areas where the difficulty of learning programming is concentrated.
The first area (Orientation) is called “Orientation: What is programming and what is it useful for”. Students often encounter difficulties with different forms of programming. Now more than ever, programming covers a wide range of applications software and is not found exclusively in classical language environments. Many software packages incorporate programming capabilities (usually through macros), such as spreadsheets, word processors, graphics programs, and more. This fact has blurred the boundaries between the application user and the developer.
The second area (Notional Machine) is called “Mental Camera – How the computer works”. The Student is called to “check” for a Virtual Machine. What form does the Virtual Machine take and what kind of commands is it expected to understand? How is the communication, issuing and reading commands? The mental models that students construct is crucial to understanding each new concept into which they are introduced. In addition, having a “poor” mental model can lead students to develop poor learning strategies resulting in lack of motivation, lack of interest, discouragement and frustration (Kessler 1986).
The third area of difficulty (Notation) refers to problems arising from the programming language itself, including syntactic and semantic didactics of Informatics rules. These include designs that easily lead to errors or include difficult procedures.
The fourth area of difficulty (Structures) describes a necessary element of the transition from the novice to the experienced programmer: the learning and actual acquisition of the structures, in such a way that in the future they can easily recalled and incorporated into a solution of a problem.
Examples of such structures are the calculation of a sum using a loop, a search algorithm, a sorting algorithm, a code for value substitution, etc. Experienced programmers have in mind the solution to be used at any time for such structures, having dealt with similar situations in the past. Beginners, due to inexperience, are deprived of such an opportunity, as a result of which their attempt to solve accordingly problems.
The fifth area of difficulty (Pragmatics) is often omitted in the programming lessons, despite its obviously special importance. It has to do with the auxiliary skills that are necessary for programming and related to
Ability to customize and control a computer environment that will be used to write code, compile, and debug a program. Students sometimes have difficulty acclimatizing to the program development environment and learning to use the tools available before they even start examining the programming language itself.
The research of psychology programming today and resolutions
Two major series of workshops have been devoted to the psychology of programming over the past two decades: the US-based Laboratory for Empirical Programming Studies (ESP) and the European Psychology Laboratory of Interest (PPIG).
Empirical Studies of Programmers research makes fundamental contributions to the field of Human-Computer Interaction (HCI). Although “programmers” per se comprise but a small percentage of all computer users, research that advances programming practice has a cascading impact on the greater population of computer users. Empirical Studies of Programmers research makes practical contributions to tool design and issues of practice for the whole range of programmers (from professional software engineers to children tinkering with programmable toys) and theoretical contributions to our understanding of cognition in complex environments. Programming and software engineering encompass complex cognitive skills and serve as fertile ground for fundamental investigations of human cognition, contributing to the advancement of HCI in general.
European Psychology Laboratory of Interest (PPIG)
The Psychology of Programming Interest Group (PPIG) was established in 1987 in order to bring together people from diverse communities to explore common interests in the psychological aspects of programming and in the computational aspects of psychology.
‘Programming’, here, is interpreted in the broadest sense to include any aspect of software development.
The group, which at present numbers approximately 300 world-wide, includes cognitive scientists, psychologists, computer scientists, software engineers, software developers, HCI and UX researchers, in both universities and industry.
PPIG aims to provide a forum for the rapid dissemination of results, ideas, and language or paradigm tool development, circumventing the long-time lag of conferences and journals.