DRAFT - Last updated 2025-12-05
The Wisdom of Edsger W. Dijkstra
Who was Edsger W. Dijkstra? He was a Dutch computer scientist, born in 1930 and passed away in 2002. According to his own words:
As a result of a long sequence of coincidences I entered the programming profession officially on the first spring morning of 1952 and, as far as I have been able to trace, I was the first Dutchman to do so in my country
So, if he is correct, he was the first professional programmer in the Netherlands.
When getting married in 1957 he listed his occupation as “programmer” on the marriage certificate but the municipality officer refused to accept that as a valid occupation and insisted he write “theoretic physicist” instead.
He was one of the most influential figures in the early days of computer science, making significant contributions to algorithms, programming languages, and software engineering.
To those familiar with computer science he is the dude behind Dijkstra’s algorithm for finding the shortest path in a graph.
For programmers less familiar with the history of the field he’s the dude who in his 1968 wrote the letter to the editor of Communications of the ACM titled “Go To Statement Considered Harmful” that eventually led to more structured programming practices and still has people dogmatically avoiding the use of “goto” statements in code.
The fields of computer science and software engineering owe a lot to Dijkstra’s work and philosophy. However sadly lots of professionals of the field generally know very little about the history of their own field. I’m no expert myself either, but I do try to educate myself as I’m not against learning from the past.
Here are some of his most famous quotes by. We’re grouping them by themes for reflection.
Simplicity
Simplicity is a great virtue but it requires hard work to achieve it and
education to appreciate it. And to make matters worse: complexity sells
better.
Simplicity is prerequisite for reliability.
The computing scientist’s main challenge is not to get confused by the
complexities of his own making.
Programming, when stripped of all its circumstantial irrelevancies, boils
down to no more and no less than very effective thinking so as to avoid
unmastered complexity, to very vigorous separation of your many different
concerns.
John von Neumann draws attention to what seemed to him a contrast. He
remarked that for simple mechanisms, it is often easier to describe how
they work than what they do, while for more complicated mechanisms, it is
usually the other way around.
Bugs
Program testing can be a very effective way to show the presence of bugs,
but it is hopelessly inadequate for showing their absence.
If debugging is the process of removing software bugs, then programming must
be the process of putting them in.
Languages
It is not only the violin that shapes the violinist, we are all shaped by
the tools we train ourselves to use, and in this respect programming
languages have a devious influence: they shape our thinking habits.
The purpose of abstracting is not to be vague, but to create a new semantic
level in which one can be absolutely precise.
Lisp has jokingly been called “the most intelligent way to misuse a
computer”. I think that description is a great compliment because it
transmits the full flavor of liberation: it has assisted a number of our
most gifted fellow humans in thinking previously impossible thoughts.
It is practically impossible to teach good programming to students that have
had a prior exposure to BASIC: as potential programmers they are mentally
mutilated beyond hope of regeneration.
The use of COBOL cripples the mind; its teaching should, therefore, be
regarded as a criminal offense.
Growth
Raise your quality standards as high as you can live with, avoid wasting
your time on routine problems, and always try to work as closely as
possible at the boundary of your abilities. Do this, because it is the only
way of discovering how that boundary should be moved forward.
Besides a mathematical inclination, an exceptionally good mastery of one’s
native tongue is the most vital asset of a competent programmer.
Progress is possible only if we train ourselves to think about programs
without thinking of them as pieces of executable code.
Your obligation is that of active participation. You should not act as
knowledge-absorbing sponges, but as whetstones on which we can all sharpen
our wits.
I think it wise, and only honest, to warn you that my goal is immodest. It
is not my purpose to “transfer knowledge” to you that, subsequently, you
can forget again. My purpose is no less than to effectuate in each of you a
noticeable, irreversable change. I want you to see and absorb calculational
arguments so effective that you will never be able to forget that
exposure.
In a society in which the educational system is used as an instrument for
the establishment of a homogenized culture, in which the cream is prevented
from rising to the top, the education of competent programmers could be
politically impalatable.
Legacy
I mean, if 10 years from now, when you are doing something quick and dirty,
you suddenly visualize that I am looking over your shoulders and say to
yourself “Dijkstra would not have liked this”, well, that would be enough
immortality for me.
You can find the complete collection of Dijkstra’s writings at the University of Texas at Austin’s: