Psychology of programming

The psychology of programming (PoP) is the field of research that deals with the psychological aspects of writing programs (often computer programs). The field has also been called the empirical studies of programming (ESP). It covers research into computer programmers' cognition, tools and methods for programming-related activities, and programming education.

Psychologically, computer programming is a human activity which involves cognitions such as reading and writing computer language, learning, problem solving, and reasoning.

History
The history of psychology of programming dates back to late 1970s and early 1980s, when researchers realized that computational power should not be the only thing to be evaluated in programming tools and technologies, but also the usability from the users. In the first Workshop on Empirical Studies of Programmers, Ben Shneiderman listed several important destinations for researchers. These destinations include refining the use of current languages, improving present and future languages, developing special purpose languages, and improving tools and methods. Two important workshop series have been devoted to psychology of programming in the last two decades: the Workshop on Empirical Studies of Programmers (ESP), based primarily in the US, and the Psychology of Programming Interest Group Workshop (PPIG), having a European character. ESP has a broader scope than pure psychology in programming, and on the other hand, PPIG is more focused in the field of PoP. However, PPIG workshops and the organization PPIG itself is informal in nature, It is group of people who are interested in PoP that comes together and publish their discussions.

Goals and purposes
It is desirable to achieve a programming performance such that creating a program meets its specifications, is on schedule, is adaptable for the future and runs efficiently. Being able to satisfy all these goals at a low cost is a difficult and common problem in software engineering and project management. By understanding the psychological aspects of computer programming, we can better understand how to achieve a higher programming performance, and to assist programmers to produce better software with less error.

Research methods
Some methods which one can use to study the psychological aspects of computer programming include introspection, observation, experiment, and qualitative research.

Cognitive biases
Cognitive biases are systematic differences from an optimal way of reasoning about something. Research has suggested there are a number of biases involved in programming. Anchoring bias have been identified for estimation and the reuse of ideas. There is an optimism bias applies to work being carried out. Availability bias can cause programmers to use incorrect keywords when searching documentation and not find relevant information and prevent programmers from applying lessons learned from previous projects in an organization.

Confirmation bias can apply to testing leading developers to write test cases that will work for the code rather than those that are likely to fail. It can also apply to searching documentation only for a programmers current hypothesis. Training in logical reasoning and hypothesis testing reduced this confirmation bias.