Last changed 13 Jan 2019 ............... Length about 900 words (6,000 bytes).
(Document started on 27 Dec 2018.) This is a WWW document maintained by Steve Draper, installed at You may copy it. How to refer to it.

Web site logical path: [] [~steve] [best] [triad3] [this page]

Bug-fixing: Beyond triad3

By Steve Draper,   Department of Psychology,   University of Glasgow.

A general educational principle that seems worth considering in all disciplines is that all learning seems to need all three of these activities, and that one cannot replace any of them without losing something: reading, discussing, writing. However perhaps there is a fourth, which I will provisionally call "bug-fixing"; most obviously important in Computer Science.

This is about how to handle pragmatically problems (proto-typically software errors) that arise unexpectedly, and which you do not understand in advance; and typically, never understand in any detail even after you have fixed them.

There are these main kinds of argument in favour of this being a generally important kind of knowledge, learning, and teaching to address:

  1. You cannot know everything. We have to deal successfully with things we don't understand from the moment we are born. Knowledge sometimes helps, but it can NOT be a general pre-requisite for successful action.
    This is the nature of life, and of science, to succeed without full (or even any) understanding.
  2. This is also a connection to the graduate attribute of "problem-solving"; which in general includes not just finding the solution, but detecting that there is a problem, and analysing what it consists of so as to transform it into one for which a solution is known. Each discipline tends to focus on only the one of these three components of problem-solving that it is interested in, rather than the need in practice to deal with all three.
  3. Particularly in computer science, or rather computer programming: there is reading, discussion, and writing (by hand) of code in a computer language and doing this by hand.
    But also there is:
    1. Fixing software which you wrote yourself.
    2. Fixing or modifying software which others wrote: by far the biggest part of having a job as a programmer == "software engineer".
    3. Fixing software you do NOT understand and don't want to; but need to use.
    4. Explaining to students why the exams require writing code on paper not in a programming environment that helps correct it. This is about being clear what understanding and exact knowledge are and are not good for in compSci. The Leguin quote: "you haven't found out what I'm teaching".

      Ursula Leguin in ch.2 of "A wizard of Earthsea" (first book in her Earthsea trilogy) has her protagonist Ged be apprenticed to Ogion. After a day or two Ged asks:
      -- "When will my apprenticeship begin, Sir?"
      -- "It has begun"
      -- "But I haven't learned anything yet!"
      -- "Because you haven't found out what I am teaching"

      This raises the issue of the importance of learners understanding the learning goal. But it also says something general about the relationship of pure and applied knowledge. Ged came to attention because he saved his village and the life of everyone he had ever known because his untutored skill at wizardry drove off an attack by Vikings: an example of extreme need for practical, usable knowledge. But his master feels he needs balance by learning what is least directly related to more action, more public success, by learning theory and especially about the dangers involved in such power. An important theme in the whole book is the playing out of this issue, where both showing off and curiosity lead to problems, and the more the power, the greater the destructive power lurking in unintended consequences.

    5. N.B. perhaps CompSci labs have somewhat the same defect as Sci labs do: that Ts and Ls collude in thinking that the goal is to get the equipment to do what is expected -- not to learn from empirical data which is in fact and in theory the whole point of science; yet hardly ever taught or demonstrated in any way whatever in undergraduate degrees.

      The comparable thing in CompProgging is: you know from the tests, that your/the software produced the right output to 5 test inputs. But why should we believe it will do that for 1,000 more cases?

  4. Pure and applied academic knowledge. This should probably be at least a part of all disciplines, because it allows students to understand, in their discipline, when knowledge does and doesn't help (or isn't available). This should perhaps be part of every degree. (E.g. Medics in the Ebola outbreak; fixing cars without understanding what was wrong with them.)

Section on bug-fixing in software

Web site logical path: [] [~steve] [best] [this page]
[Top of this page]