On the Nature of Programmer Expertise

Many experts in fields such as mathematics, medicine, and chess display intellectual marvels undiminished with age. However, software engineers, much like athletes, seem to have a limited lifetime for applying their expertise. Compared to other areas of expertise, the elements of which programming expertise is built upon is unstable, short-lived, and often non-transferable. In this position paper, we derive insights from psychology, cognitive neuroscience, and decades of software engineering research on expertise. Using these insights, we strive to understand what representations, strategies, and cognitive processes and mechanisms experts use when performing exceptional programming feats. In particular, we want to understand how expertise shapes an expert’s mind, and understand the intricate patterns and strategies that expert programmers hone over the years. To answer these questions, we propose to use several brain-imaging techniques to study expert software engineers. Finally, based on these results, we wish to derive guidelines in order to help companies and teachers in identifying and training programmers to quickly adapt to changes in terms of languages, projects, teams, and techniques.

[1]  David J. Gilmore,et al.  Expert Programming Knowledge: A Strategic Approach , 1990 .

[2]  Ruven E. Brooks,et al.  Towards a Theory of the Comprehension of Computer Programs , 1983, Int. J. Man Mach. Stud..

[3]  Steven J Durning,et al.  Neural basis of nonanalytical reasoning expertise during clinical evaluation , 2015, Brain and behavior.

[4]  D. Schacter,et al.  The Brain's Default Network , 2008, Annals of the New York Academy of Sciences.

[5]  Ben Shneiderman,et al.  Exploratory experiments in programmer behavior , 1976, International Journal of Computer & Information Sciences.

[6]  Thomas Leich,et al.  Understanding understanding source code with functional magnetic resonance imaging , 2014, ICSE.

[7]  Elliot Soloway,et al.  Empirical Studies of Programmers: Second Workshop , 1991 .

[8]  David J. Gilmore,et al.  Programming Plans and Programming Expertise , 1988 .

[9]  Iris Vessey,et al.  Research Report - The Relevance of Application Domain Knowledge: The Case of Computer Program Comprehension , 1995, Inf. Syst. Res..

[10]  Igor Crk,et al.  Toward using alpha and theta brain waves to quantify programmer expertise , 2014, 2014 36th Annual International Conference of the IEEE Engineering in Medicine and Biology Society.

[11]  James Shanteau,et al.  Why study expert decision making? Some historical perspectives and comments. , 1992 .

[12]  Steve McConnell What Does 10x Mean? Measuring Variations in Programmer Productivity , 2011, Making Software.

[13]  Sven Apel,et al.  Measuring and modeling programming experience , 2013, Empirical Software Engineering.

[14]  John B. Black,et al.  Scripts in memory for text , 1979, Cognitive Psychology.

[15]  Elliot Soloway,et al.  Mental models and software maintenance , 1986, J. Syst. Softw..

[16]  Jon M Fincham,et al.  Hidden Stages of Cognition Revealed in Patterns of Brain Activation , 2016, Psychological science.

[17]  T.C. Lethbridge,et al.  Presenting micro-theories of program comprehension in pattern form , 2005, 13th International Workshop on Program Comprehension (IWPC'05).

[18]  Dennis H. Holding,et al.  Theories of chess skill , 1992 .

[19]  Sho K. Sugawara,et al.  Larger Right Posterior Parietal Volume in Action Video Game Experts: A Behavioral and Voxel-Based Morphometry (VBM) Study , 2013, PLoS ONE.

[20]  Wendy K. Adams,et al.  Development and Validation of Instruments to Measure Learning of Expert‐Like Thinking , 2011 .

[21]  Iris Vessey,et al.  On Matching Programmers' Chunks with Program Structures: An Empirical Investigation , 1987, Int. J. Man Mach. Stud..

[22]  W. Grodd,et al.  Many Faces of Expertise: Fusiform Face Area in Chess Experts and Novices , 2011, The Journal of Neuroscience.

[23]  I. Gauthier,et al.  Expertise for cars and birds recruits brain areas involved in face recognition , 2000, Nature Neuroscience.

[24]  B. Adelson Problem solving and the development of abstract categories in programming languages , 1981, Memory & cognition.

[25]  H. Simon,et al.  Invariants of human behavior. , 1990, Annual review of psychology.

[26]  Emily Hill,et al.  Is an Athletic Approach the Future of Software Engineering Education? , 2016, IEEE Software.

[27]  Ruven E. Brooks,et al.  Using a behavioral theory of program comprehension in software engineering , 1978, ICSE '78.

[28]  Stephen A. Engel,et al.  Engagement of Fusiform Cortex and Disengagement of Lateral Occipital Cortex in the Acquisition of Radiological Expertise , 2009, Cerebral cortex.

[29]  E. E. Grant,et al.  Exploratory experimental studies comparing online and offline programming performance , 1968, CACM.

[30]  Charles Rich Inspection methods in programming , 1980 .

[31]  Steven L. Small,et al.  The mind of expert motor performance is cool and focused , 2007, NeuroImage.

[32]  Kate Ehrlich,et al.  Empirical Studies of Programming Knowledge , 1984, IEEE Transactions on Software Engineering.

[33]  Tore Dybå,et al.  Construction and Validation of an Instrument for Measuring Programming Skill , 2014, IEEE Transactions on Software Engineering.

[34]  Harlan D. Mills,et al.  Structured programming - theory and practice , 1979, The systems programming series.

[35]  K. A. Ericsson,et al.  Expert and exceptional performance: evidence of maximal adaptation to task constraints. , 1996, Annual review of psychology.

[36]  Arthur S. Elstein,et al.  Medical Problem Solving , 1990 .

[37]  N. Pennington Stimulus structures and mental representations in expert comprehension of computer programs , 1987, Cognitive Psychology.

[38]  A. D. D. Groot Thought and Choice in Chess , 1978 .

[39]  Kate Ehrlich,et al.  Tapping into tacit programming knowledge , 1982, CHI '82.

[40]  Ben Shneiderman,et al.  Syntactic/semantic interactions in programmer behavior: A model and experimental results , 1979, International Journal of Computer & Information Sciences.

[41]  A. von Mayrhauser,et al.  From code understanding needs to reverse engineering tool capabilities , 1993, Proceedings of 6th International Workshop on Computer-Aided Software Engineering.