Bibliographies: Models of Programming

By Chris Douce

This column presents a 'snapshot' of my journey through some psychology of programming (and other!) literature. At the same time that this journey was unfolding, there were others occurring simultaneously. If you so feel inclined, please tell us yours!

Models of Programming

Introduction

The topic of program comprehension became an interest of mine ever since I had my first 'proper' programming position - a temporary summer vacation job carrying out maintenance of a simple inventory system.

In that same year I stumbled across Weinberg's The psychology of Computer Programming which piqued my interest and subsequently my reading. This bibliography is a 'meandering' around the topic of 'models of programming'.

Studying this element of program comprehension took me into the realm of software engineering where I was presented with their metrics and methodologies, and outwards towards fascinating area of cognitive psychology. When I discovered that cognitive psychology was discipline of its own, my thoughts were, 'why didn't I know of this earlier?'

It's a shame that I don't have more time these days to read as many papers as I used to now that I am a programming practitioner. I have to say that my interest in the programmer and the activity of programming has not diminished with 'practice'. It has increased.

I hope you enjoy this as much as I enjoyed putting it together. It is also my hope that others may make create different connections between the papers than I have made. If one of these papers reminds me of another relevant paper or book that you think is related (or even one that isn't!), I would like to hear from you.

A Bibliographic Journey

After reading The Psychology of Computer Programming, whilst perusing the shelves of my university library several years later I stumbled across:

  • Shneiderman, B. (1980). Software psychology: human factors in computer and information systems. Cambridge, MA., Winthrop.

carefully tucked away next to Jean Sammets' masterwork on programming languages. After some questioning at the university library, Software Psychology lead me towards a paper that described a simple model of programmers memory. It was a model that I could immediately understand and appreciate:

  • Shneiderman, B. and R. E. Mayer (1979). Syntactic/semantic interactions in programmer behaviour: a model and experimental results. International Journal of Computer and Information Sciences 8: 219-238.

This was especially interesting, since his co-author, Richard Mayer, was an author of a set text that I had to use whilst studying a problem solving and 'intelligence' class at university:

  • Mayer, R. E. (1991). Thinking, problem solving and cognition, W.H.Freeman and Company.

Associations between models of computer programming and cognitive psychology was firmly established with this discovery. This lead me towards the fantastic:

  • Eysenck, M. W. and M. T. Keane (1996). Cognitive psychology: a students handbook. Hove, Psychology Press.

Whilst wading through sections of this weighty tome, memory and computer programming appeared to be of interest to the authors, since the activity of programming was used to study the notion of 'expertise'.

Inspired by this purchase, I decided to leaf through the politically incorrectly named International Journal of Man-Machine Studies, only to stumble upon:

  • Brooks, R. (1977). Towards a theory of the cognitive processes in computer programming. International Journal of Man-Machine Studies 9: 737.

and a sister paper:

  • Brooks, R. (1983). Towards a theory of the comprehension of computer programs. International Journal of Man-Machine Studies 18: 543-554.

This was, in my eyes, a significant find. It illustrated clearly that the term 'model' was not as straight forward as I had thought. These papers introduced the concept that a production system could be used as a model, and the 'direction' of comprehension - the mysterious word called 'strategy' - and the concept of a 'programming beacon'.

Continuing my perusal of IJMMS, I made a further discovery:

  • Davies, S. P. (1993). Models and theories of programming strategy. International Journal of Man-Machine Studies 39: 237-267

This paper discussed my previous discoveries, and more. In a way, I felt a little cheated. Someone appeared to be making my discoveries for me. Also, this was reassuring since someone else was contemplating the same issues I was examining.

There were many papers that were new to me. One of them being:

  • Pennington, N. (1987). Comprehension strategies in programming. Empirical Studies of programmers : second workshop. G. M. Olson, S. Sheppard and E. Soloway. Norwood, New Jersey, Ablex: 100-113.

I believe this was my first knowledge of an organisation called Empirical Studies of Programmers. I liked Pennington's work a lot, especially her use of 'knowledge' categories. I also admired her methodology. Soon afterwards, through Davies's references, I then discovered this kind gentleman:

  • Green, T. R. G. (1980). Programming as a cognitive activity. Human Interaction with Computers. H. T. Smith and T. R. G. Green. London, Academic Press: 271-320.

This lead me onwards to discover further work about mini-languages and a discipline called 'psycholinguistics' through:

  • Green, T. R. G. (1989). Cognitive dimensions of notations. People and Computers V. Sutcliffe and Macaulay. Cambridge, Cambridge University Press.

Another paper I found through the Davies paper was:

  • Rist, R. S. (1986). Plans in programming: definition, demonstration and development. Empirical Studies of Programmers. E. Soloway and S. Iyengar. Norwood, New Jersey, Ablex: 28-47.

which presented a more rigorous treatment of the concept of a 'plan'. I was becoming awfully confused. I was faced with general cognitive theories, production systems, discourses regarding memory from the somewhat different (and also intrinsically related) fields of experimental psychology and cognitive science.

Of course, let's not forget to mention micro-languages about 'hungry hares'.

At this point, after a little more discovery into models of general cognition (directed by Eysneck and Keyne), I learnt of:

  • Anderson, J. R. (1983). The architecture of cognition. Cambridge, MA, Harvard University Press.

and:

  • Newell, A. (1990). Unified theories of cognition. Cambridge, MA, Harvard University Press.

It was at this point I decided to take a holiday.

It became clear that I was making a round trip, since I also discovered that Dr Anderson had a particular liking for LISP (and possibly its use of bracketing? See paper regarding notations!):

  • Kessler, C. M. and J. R. Anderson (1986). A model of novice debugging in LISP. Empirical Studies of Programmers, Norwood, New Jersey, Ablex: 198-212.

Through his earlier work, I had learnt that he had an interest in modelling the programmer through the use of production systems. It also appeared that he also had an interest in the use and failings of memory:

  • Anderson, J. R. and R. Jeffries (1985). Novice LISP errors: undetected losses of information from working memory. Human-Computer Interaction 1: 107-131.

All these strands were slowly beginning to merge together. I was simultaneously following leads on papers discussing object-oriented programming, notations, cognitive models, expertise and memory. Much to my disapproval (and delight!), I made another Davies discovery:

  • Davies, S. P., D. J. Gilmore, et al. (1995). Are object that important? Effects of expertise and familiarity on classification of object-oriented code. Human-Computer Interaction 10: 227-248.

Which is related to an earlier paper:

  • McKeithen, K. B., J. S. Reitman, et al. (1981). Knowledge organisation and skill differences in computer programmers. Cognitive Psychology 13: 307-325.

During my reading, I acquired a fondness for the psychology section of the library. I found it much more peaceful than the hustle and bustle of the computer science area with all its journals advocating data mining algorithms, shading techniques and recent web breakthroughs.

Sometimes these journals would yield interesting results, showing that psychology of programming is truly inter-disciplinary:

  • von Mayrhauser, A. and A. M. Vans (1996). Identification of dynamic comprehension processes during large scale maintenance. IEEE Transactions on Software Engineering SE-22(6): 424-437.

Whilst returning to hide amongst the psychology journals to contemplate the complexities of object-oriented programming in peace, I could not help but begin to wander down a rather interesting path of 'categorisation':

  • Rosch, E. (1975). Cognitive representations of semantic categories. Journal of Experimental Psychology 104(3): 192-233.

I began to reason that an object is an instance of a class, like a chair is an instance of a piece of furniture.

I concluded that I was in need of a second holiday.

Nothing had prepared me for how much material could be of use to someone trying to understand the often mysterious and challenging activity of programming. I became embroiled in the debates surrounding psychology (and engineering) methodology, issues regarding group working, software metrics and arguments surrounding their validity.

In the end, my interest settled to a certain sub area: memory. The types of memory and how they are used by programmers. Just this week I said, 'I know that I had a concern about this program and I have written it down somewhere in the outline specification'. My memory of 'comprehended' source code had affected the testing of a software product twelve months later.

Within experimental and cognitive psychology, memory research appeared to have a substantial amount of published literature. As a simple computer scientist, I found myself forgetting the titles of some of the paper that I had read, even photocopying some papers twice!

One memory book particularly caught my eye:

  • Cohen, G. (1989). Memory in the real world. Hove, Lawence Erlbaum Associates.

Programming is a task that relies on knowledge existing in the 'world', since software artefacts are so intangible. This was a good start. More recent texts that I particularly admire are:

  • Groeger, J. A. (1997). Memory and remembering : everyday memory in context. Harlow, England, Addison-Wesley Longman.

and:

  • Baddeley, A. D. (1997). Human memory : theory and practice - revised edition. Hove, Psychology Press.

All good text books have to potential to take you on journeys of fascination. Through their text and their references they can show you misty peaks of knowledge sitting powerfully in the distance, outlining a journey that you may consider making in the future. Baddeley was no exception:

  • Baddeley, A. D. (1984). Neuropsychological evidence and the semantic/episodic distinction. Behavioural and Brain Sciences 7: 238-239.

I was stepping into an area that could potentially be called, 'the cognitive-neuropsychology of computer programming'. My journey was becoming weirder.

As I sat on the floor of a university library surrounded by mysterious sounding medical journals, I wondered whether I was reading this paper because of a paper that I had deliberately sought out at the start of my journey:

  • Shneiderman, B. and R. E. Mayer (1979). Syntactic/semantic interactions in programmer behaviour: a model and experimental results. International Journal of Computer and Information Sciences 8: 219-238.

It almost felt as if I had returned to the beginning. I stopped here for a while and wondered where I had been and where I was going to go next.

It struck me that programming is an activity that is, on one hand, something special. But on the other, it is an activity that is not special, since it uses faculties that we all possess.

Real programming - software development to solve real problems can be deliciously challenging and incredibly frustrating. This is what makes programming special. By studying what occurs during the creation of imaginary cathedrals we may be able to learn a little bit more about ourselves, and how our creations could be built that little bit better.