On Dijkstra on software's radical novelties

NOTE HXA7241 2011-07-10T08:53Z

In ‘On the cruelty of really teaching computing science’ EWD1036, Dijkstra captures some deep truths of software – but seems to give them a somewhat gloomy cast. Software has radical novelties, but we should not see them in a negative way.

Range of scales (radical novelty 1)

From a bit to a few hundred megabytes, from a microsecond to a half an hour of computing confronts us with completely baffling ratio of 10^9! The programmer is in the unique position that his is the only discipline and profession in which such a gigantic ratio, which totally baffles our imagination, has to be bridged by a single technology.

the automatic computer confronts us with a radically new intellectual challenge that has no precedent in our history

Does software not also give us the very medium and power with which to meet that challenge? That range of scales is not an externally imposed obstacle, it is an expression of software's capability. Software brings with it the very means to produce and control that range in simple ways.

It seems like saying a telescope presents the eye with gigantic distance which baffles its capabilities – but really, the telescope offers not a new problem, but a new power. Perhaps it adds a few unfamiliarities – but it does something that otherwise is not possible at all.

Consider an octree space-partitioning data structure. You could make one to contain just the things on your desk. But it is just as easy, essentially, to make one that will contain everything from your phone all the way up to the sun. You can do it in less than 100 lines of code; one must think that a power.

Sensitivity and discontinuity (radical novelty 2)

The second radical novelty is that the automatic computer is our first large-scale digital device.

Like all digitally encoded information, it has unavoidably the uncomfortable property that the smallest possible perturbations – i.e. changes of a single bit – can have the most drastic consequences.

Does this quality not also give software its exceptional fine-grainedness and adaptability? That abnormal sensitivity and discontinuity is what enables its seemingly arbitrary expression of abstraction, of systematic intention.

Software is not more fragile, error-prone, and faulty than other products and materials. More like the opposite. It does exactly what we tell it. Software will perfectly hold whatever structure it is given, with a fidelity and fluidity that is unmatched. It is a more ideal medium of imagination than any other available.

It is easy to get things wrong, but the expanse of things that software can express, and get right, far outweighs that.


There are two kinds of challenge here: the intrinsic one, and the contingent one. The real, intrinsic challenge is the novelty – the different kind of thing software is. But the particular range and detail/complexity addressed in a particular problem is contingent, it is optional – we choose our problems, and we can take on as much or as little as we can be comfortable with.

Software brings a radical novelty. But let us see it optimistically. It presents not so much a challenge, as the very means by which the challenge is overcome. It is less a radically new problem than a radically new power.



why do we persist here in answering the telephone with the most unhelpful ‘hello’ instead of our name?

Ah, there is a good reason: it helps us to calibrate our hearing to a particular voice. We know that the unfamiliar sound is the word ‘hello’ and so from that know what those vowel-sounds are going to sound like in the following conversation. It is just a networking handshake for human vocal communication.