Psychology is of interest to programmers when designing GUIs, etc., and of use to educationalists when designing programming courses. Here I'm more concerned with identifying the psychology traits that are more common (or useful) in programmers. When Gerald M. Weinberg wrote "The Psychology of Computer Programming" (1971) he said "What traits, then, would give an indication of potential failure in a programmer? We can speak on this subject only from anecdotal material, for there have as yet been no formal studies of this question". Since then more studies have been done, but I've had trouble finding material. Here I'll provisionally assemble information about aptitude tests, anecdotal material and academic findings.
A programmer is often part of a team, so individuals can afford to have a narrow range of skills. A lone programmer may need to have the skills of a team, so the literature about teamwork is relevant too.
If you can employ several people your team might well comprise: Project Manager, Product Manager, Architect, User-interface designer, End-user liaison, Developer, QA/Testers, Toolsmith, Build Coordinator, Risk Officer, End-user documentation specialist (Survival Guide p.105). These don't always get on with each other. If they're all one person, beware! It's unlikely that one person will be strong in all phases of development.
The material at Kent University Careers is typical. It says that the non-programming tests deal with "logical reasoning, numerical problem solving, pattern recognition, ability to follow complex procedures and attention to detail".
They suggest some other attributes that are also required by programmers and other computing professionals
- Time management
- Clear, concise documentation
- Ability to quickly learn new skills and update existing ones by teaching yourself.
- a receptivity to new ideas:
- reasonably quick coders, although accuracy is more important than speed
Many of the above skills have been clumped into the concept of Computational Thinking. According to its advocators, Computational Thinking "involves a set of problem-solving skills and techniques that software engineers use to write programs ... However, computational thinking is applicable to nearly any subject. ... Specific computational thinking techniques include: problem decomposition, pattern recognition, pattern generalization to define abstractions or models, algorithm design, and data analysis and visualization".
According to Psychology of programming: Looking into Programmers' heads by Jorma Sajaniemi (2008) "Psychology of programming (PoP) is an interdisciplinary area that covers research into computer programmers’ cognition; tools and methods for programming related activities; and programming education. ... During the past two decades, two important workshop series have been fully devoted to PoP: the Workshop on Empirical Studies of Programmers (ESP), based primarily in the USA, and the Psychology of Programming Interest Group Workshop (PPIG), having a European character".
The paper lists work that has looked at correlations between programming success and some other property - "field dependence (e.g., Mancy & Reid, 2004), inclination to systematic behavior (e.g., Dehnadi, 2006), or self-efficacy (e.g., Wiedenbeck, LaBelle, & Kain, 2004). Jones and Burnett study spatial ability and find a positive correlation between mental rotation ability and programming success in their paper “Spatial Ability and Learning to Program.”"
In Five Big Personality Traits of a Programmer. Do They Matter? it's suggested that "Some traits are more beneficial for the software development: Explorer [high Openness], Focused [high Conscientiousness], Extravert. Other could also nicely compliment each other like Focused Preserver or Open-Minded Challenger. Some traits could be dangerous for the project and team like Nervous Preserver or Agressive Challenger."
According to Renata McGee, "Computer programmers are very detailed thinkers and are able to excel in their positions due to the various traits and skills they possess. Professionals with ISTJ (Introverted, Sensing, Thinking, Judging) personality types have natural skills that are beneficial to this line of work, according to the Myers-Briggs Type Indicators (MBTI) assessment personality test."
According to the more recent "What makes a computer wiz? Linking personality traits and programming aptitude" by Timo Gnambs" in the Journal of Research in Personality, Volume 58, (October 2015) programming ability is positively correlated with introversion, though it's more strongly correlated with "openness to experience". It's not correlated with agreeableness or neuroticism.
- Adam Sinicki thinks that
- "The seasoned coder is someone who looks for shortcut ways to achieve tasks and who is resourceful enough to find unconventional solutions to problems. This requires you to first learn the system or the context you’re working in and then to find exploits within it. Sometimes this is referred to as ‘systems thinking’.
- We use our working memory to store information, so when you’re imaging what a line of code does, you have to store the variables and the ideas you’re testing out, there. So when you’re thinking of a sequence of events, you need to keep the line of logical reasoning held in your working memory – which is where the similarity to math comes in. This is crucial for ‘abstraction’.
- the brain areas involved with abstract thought are actually the same as those associated with verbal semantic processing
- So the coder’s brain is good at abstraction, language and short term memory – at least in theory. It should be creative at problem solving and resourceful. How about attention? Actually, this is something I have very little problem with when programming and I’d say that most coders I’ve met feel the same way. Concentrating on coding isn’t the problem: it’s stopping that’s hard.
- Paul Graham in "Hackers and Painters"(O'Reilly, 2004) writes that
- Hacking and painting have a lot in common. In fact, of all the different types of people I've known, hackers and painters are among the most alike (p.18)
- Because hackers are makers rather than scientists, the right place to look for metaphors is not in the sciences, but among other kinds of makers (p.25)
- Computer science is a grab bag of tenuously related areas thrown together by an accident of history, like Yugoslavia ... It's as if mathematicians, physicists, and architects all had to be in the same department (p.18)
- LarryWall in "Programming Perl" (1st edition), O'Reilly and Associates writes
- "We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris."
- Rob Walling on Personality traits of the best software developers writes
- "the more I looked at what makes [phenomenal developers] so good, the more I realized they all share a handful of personality traits ... Pessimistic ... Angered By Sloppy Code ... Long Term Life Planners ... Attention to Detail"
- Me -
- I think programmers can go up and down layers of complexity quickly, collapsing and expanding concepts as they go.
- They don't need 1-1 modelling - i.e. can cope with distance between the target and the representation (Recipes vs meals; Music scores vs performance).
- I think they're likely to be chess players (Matt Sadler is a particular example).
- I'd imagine that they tend to be field-independent, and can assess their own work in a more egoless fashion than others often manage.
Selection by psychological traits
In New Scientist it was reported that SAP were selecting autistic people. Their move was sparked by successful results from employing a small group of people with autism in India as software testers. It is now expanding its autistic workforce in Ireland, Germany and the US.
- "Software Project Survival Guide" by Steve McConnell, Microsoft.
- "Understanding the Psychology of Programming at Devx" by Bryan Dollery.
- "The Psychology of Computer Programming" by Gerald M. Weinberg
- Empirical Studies of Programmers
- Psychology of Programming Interest Group
- PPIG conference proceedings, 2015
- Five Big Personality Traits of a Programmer. Do They Matter?
- Laziness, Impatience, Hubris: Personality Traits of a Great Programmer (John E. Bentley)
- Computer Programming - Skills And Traits Programmers Possess (Renata McGee)