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!
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.
After reading The Psychology of Computer Programming, whilst perusing the shelves of my university library several years later I stumbled across:
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:
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:
Associations between models of computer programming and cognitive psychology was firmly established with this discovery. This lead me towards the fantastic:
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:
and a sister paper:
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:
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:
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:
This lead me onwards to discover further work about mini-languages and a discipline called 'psycholinguistics' through:
Another paper I found through the Davies paper was:
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:
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!):
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:
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:
Which is related to an earlier paper:
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:
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':
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:
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:
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:
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:
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.