The Humble Programmer -- ACM Turing Lecture 1972 - Edsger Dijkstra.
Note:This lecture was given before many of us were even born.
Few points about this lecture given by Dijkstra in 1972.
- This lecture can be considered a classic since many of the points mentioned are still relevant today, 35 years later.
- This lecture started the enquiry into how much computer programming depends on the programmer’s mental abilities.
- Dijkstra has stressed the message that the essential taste of programming is mastering the enormous complexity of computer science.
- Dijkstra argues that programming is the only activity in which humans have to master nine orders of magnitude of difference between the lowest level of detail and the highest. This point is also mentioned in the book “The Mythical Man Month” where brooks talks about the difference between writing a program and creating a software system.
- Dijkstra asks whether it is possible for a programmer to write a system that is bug free.
- Dijkstra says that the only mental tool by means of which a very finite piece of reasoning can cover myriad cases is called “abstraction”; as a result the effective exploitation of his powers of abstraction must be regarded as one of the most vital activities of a competent programmer.
- This is probably the first paper to discuss the limitations of testing.
- This paper would be interesting reading solely for its historical value as it also conveys a good sense of what it was like to be a programmer in the early days of computer science.
I have given a few quotes from the lecture.
“It is generally recognized that the design of any large sophisticated system is going to be very difficult job, and whenever one meets people responsible for such undertakings, one finds them very much concerned about the reliability issue, and rightly so.”
"Program testing can be a very effective way to show the presence of bugs, but it is hopelessly inadequate to show their absence".
“Those who identify the difficulty of the programming task with the struggle against the inadequacies of our current tools, because they might conclude that, once our tools will be much more adequate, programming will no longer be a problem. Programming will remain very difficult, because once we have freed ourselves from the circumstantial cumbersomeness, we will find ourselves free to tackle the problems that are now well beyond our programming capacity. “