Psychology of programming: The role of creativity, empathy and systemizing