considered harmful: adj. [very common] Edsger W. Dijkstra's note in the March 1968 "Communications of the ACM," "Goto Statement Considered Harmful," fired the first salvo in the structured programming wars ... use of such titles has remained as a persistent minor in-joke (the 'considered silly' found at various places in this lexicon is related).
That entry in Eric Raymond's edition of the Hacker's Dictionary was my first encounter with pioneering computer scientist Edsger Wybe Dijkstra, but thanks to the dedicated work of volunteers at the University of Texas at Austin, it was very far from my last. These volunteers maintain the massive and growing EWD archive. It's a tremendous and erudite proto-blog, the extraordinary record of an exemplary life, and it's one of my favorite places on the Web. A year after his death, a computer scientist who devoted himself to teaching people how to think is still on the podium, delivering gem after gem of insight.
Born in the Netherlands in 1930, Dijkstra was a witty and thoroughly engaging writer in his nonnative English ("I have learned to be very suspicious of ideas I cannot express well in both Dutch and English," he noted, late in life. "As nice as it is to have the union at one's disposal, it is wise to confine oneself to the intersection.")
Over a 40-year period that began in the early 1960s, Dijkstra wrote prolifically on timely and compelling topics: from his experience of the evolution of universities on both sides of the Atlantic from the post-WWII era to the beginning of the 21st century; to meditations on the science and art of teaching; to incredibly rich and detailed accounts of his own intellectual methods (don't miss EWD 666: "A problem solved in my head," which contains the endearing aperçu: "Goldbach's Conjecture -- I had never thought that I would ever use that!")
Like entries in a modern weblog, many of the informal pieces collected in the EWD archive were never published in any traditional sense. Instead they were copied (and later photocopied), numbered sequentially from EWD 0 (sadly lost to history) to EWD 1317 ("From van IJzeren's correspondence to my aunt & uncle," written a few months before his death in August 2002) and circulated from the greedy hands of one computer scientist to another like Eastern European samizdat or fourth-generation copies of the Lions books.
For years I have been dipping into this priceless archive (or at least its English language subset; is there a great Dutch-English translator out there who would do the world the incalculable favor of translating the rest?) and I have yet to scratch the surface of its treasures. But I continue to follow the trail; the archive is redolent of the spoor of Dijkstra's intellectual evolution, the physical evidence of a great mind thinking aloud. A fine, clear light shines through it all, the light of intelligence unmarred by any particular arrogance or egotism -- the set of personal qualities I tend to think of as integrity.
Dijkstra is at his iconoclastic best on, for example, academic hypocrisy:
"Today's mathematical culture suffers from a style of publication, in which the results and the reasoning justifying them are published quite explicitly but in which all the pondering is rigorously suppressed, as if the need to ponder were a vulgar infirmity about which we don't talk in civilized company."
Or the relationship between programming and mathematics:
"Programming is one of the most difficult branches of applied mathematics; the poorer mathematicians had better remain pure mathematicians."
Or the truth itself, however unpalatable:
"French science is poisoned by politics."
One particularly apposite piece (EWD 696) is titled "Written in anger." What's illuminating about it is what rouses Dijkstra's ire: those who try to simplify or abstract away the innate difficulty of solving problems. The particular occasion of his anger is a 1978 Ph.D. thesis recommending the use of "easily managed graphic display systems" for designing computer programs. Dijkstra calls the suggestion "the most severe disservice to program design that I can imagine." He explains:
"Most people, including mathematicians, are amateur thinkers in the sense that they have not been taught how to think effectively. They have not been told to throw the crutch away and as a result, have never learned how to run."
The crutch in this context is the use of visual imagery. Dijkstra makes various good arguments against the use of images in thinking about geometry and mathematics and programming (diagrams are invariably overspecific, for example, and in set theory may be actively misleading.) He concludes:
"A major component of learning how to throw the crutch away is the 'unlearning' of the use of pictures. (And 'unlearning' is very difficult, as your past remains your past: the only thing you can do is superimpose a new past on top of the old one, and pray that the more recent past will be dominant.)"
This is a remarkable argument, not least from a European who came of age in the aftermath of 1945. What Dijkstra rejects is oversimplification. What he demands in its place is something like direct confrontation with the problem, as nearly as it can be defined. He's perfectly willing to acknowledge how extremely difficult it is -- both at a professional and at a personal level -- to grapple with the world's complexity so profoundly; and yet he is not prepared to settle for less, either in his students or in himself.
Reading Dijkstra's account of a January 1974 meeting in Albuquerque, N.M., at which he turned out to be the main and only attraction -- a prospect that frankly terrified him -- made me envy the participants.
"I was very afraid ... people come with such utterly unrealistic expectations that one is bound to disappoint them ... In order to save the situation I used the first half of the morning to display all my misgivings, all my feelings of uncertainty ... I felt that honesty alone could save me."
As an eight-year veteran of computing and programming conferences, academic and otherwise, I can only imagine how charming and beguiling such a humble confession must have been -- all the more for coming, as it did, from a man already world famous for his contributions to computer science. Not surprisingly, then:
"What happened during that one-man show of five days is unbelievable and exceeded my wildest hopes ... once they picked up the rules of the game they inspired me to an extent that I have not experienced since a long time and I am perfectly willing to believe the many participants that told me on the last day that this week had been a unique experience."
The rules of what game? What was it that Dijkstra was trying to teach? As these excerpts suggest, it was only nominally the teaching of programming. Indeed, many self-styled "educators" in today's world of "information technology" would scarcely recognize it as teaching programming at all.
In a pivotal essay, EWD 473, written in 1975, Dijkstra explicitly rejects the acquisition of laundry lists of programming languages (in his day, FORTRAN, ALGOL 60, COBOL; today's equivalents might be Java, Perl, C++). He calls such courses "driving lessons" and snipes that "no one tells [the student] that all those bells and whistles -- those so-called 'powerful features' -- belong more to the problem set than the solution set."
How disconcerting is that? Take away pictorial aids, take away the very programming languages, and what on earth is left to teach? Dijkstra's reply is more disconcerting still.
"I shall confine my attention to the difficulties of solving intrinsically hard problems."
Dijkstra tried to teach his students how to think. Characteristically, he immediately acknowledges the difficulties involved, defines his terms, and narrows the scope of his inquiry. He's not talking about neuroscience. He's not talking about writing poetry. He's talking specifically about reasoning -- a term he uses to describe formal manipulations: think of arithmetic in primary school, algebra in secondary school, and symbolic logic in college. This kind of reasoning, he admits, is very demanding, and so he calls for a preliminary step aimed at reducing the amount of reasoning required.
This preliminary step is what he calls "pondering." It's so unfashionable even to talk about it, he laments, that many mathematicians can't describe how they do it -- which means, in practice, that they don't even understand how they do it. The notion that the ability to ponder is not innate, that it could be known and taught, is laughed off or worse: "experienced as a threat upon their ego."
What is a poor computer scientist to do?
"Suppose you stop teaching results and solutions, but start to solve problems in the lecture room and that you try to be as explicit as possible about your own pondering. What will happen?"
Well, most likely, all hell will break loose. But if you're lucky:
"The need to get some sort of verbal grip on your own pondering will by sheer necessity present your ponderings as something in which, as time progresses, patterns will become distinguishable. Once you have established a language in which to do your own pondering, in which to plan and to supervise your reasoning, you have presented a tool that your students could use as well, for the planning and supervision of their reasoning."
Geek that I am, I find this passage incredibly touching. It's the combination of Dijkstra's searing integrity and his humility and willingness to make a complete ass of himself, by actually standing up and pondering aloud in front of his students, for their sake, that gets me every time. I wonder if the success of the scientific method does not depend on exactly this combination of integrity and humility? Dijkstra doesn't just advocate it. He models it.
It took me a while to realize it, but thanks to the EWD archive volunteers, my envy for the participants at the 1974 conference in Albuquerque is redundant. Reading the archive offers the same experience. Brilliant as the content is, the performance is better still. In my master's steps I trod, where the snow lay dinted; heat was in the very sod which the saint had printed. "Ah," you begin to think, "so that's how he did it!" or even, as a tiny spark ignites somewhere inside you: "Maybe that's how I could do it..." Dijkstra's great gift, it would seem, was to inspire (tempt?) others, not to replicate his own feats of mind but to attempt their own.
Chronologically, the EWD archive may qualify as a proto-blog; qualitatively, it's what the very finest blogs aspire to be.
The EWD archive is a priceless cultural artifact of the computer age. To its maintainers I say, wholeheartedly: Thank you. To anyone who has ever cared about programming or teaching or simply thinking hard and well about difficult problems I say, ardently: GOTO.