Re:E.W. Dijkstra Archive: The Humble Programmer
by majewsky on Sunday June 19, 2016 @10:35AM
(#11933096)
Favorite quotes:
> I pray daily that more of my fellow-programmers may find the means of freeing themselves from the curse of compatibility.
> Society is getting dissatisfied with the performance of programmers and of their products.
> [Program] testing can be a very effective way to show the presence of bugs, but is hopelessly inadequate for showing their absence.
> The purpose of abstracting is not to be vague, but to create a new semantic level in which one can be absolutely precise.
> The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague.
It's fascinating to see what he expected to be the biggest problems in programming. His discussion of more efficient programming techniques focuses on theorem provers, automated checking of loop invariants and the like, whereas today, the biggest problems typically occur during integration of software components with each other.
But maybe he actually did foresee that:
> I now suggest that we confine ourselves to the design and implementation of intellectually manageable programs.
Regarding provably correct programs: I'm torn here. On the one hand, if we required all programs to carry proofs of their correctness, that would exclude a huge number of current programmers who lack the formal education etc. to carry out these proofs. On the other hand, if all programs that we need would have proofs of their correctness (and thus carry a bunch of helpful invariants and formal specifications), it might be easier to combine all these programs, hence obliterating the need for most programming tasks that are just concerned with integrating multiple programs with each other.
I'll close with the most insightful paragraph from this whole piece:
> There may also be political impediments. Even if we know how to educate tomorrow’s professional programmer, it is not certain that the society we are living in will allow us to do so. The first effect of teaching a methodology —rather than disseminating knowledge— is that of enhancing the capacities of the already capable, thus magnifying the difference in intelligence. 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.
This is fascinating because right now, a lot of people lament that our students are only being stuffed with facts, but not equipped with the methodological knowledge required for their professions.
> I pray daily that more of my fellow-programmers may find the means of freeing themselves from the curse of compatibility.
> Society is getting dissatisfied with the performance of programmers and of their products.
> [Program] testing can be a very effective way to show the presence of bugs, but is hopelessly inadequate for showing their absence.
> The purpose of abstracting is not to be vague, but to create a new semantic level in which one can be absolutely precise.
> The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague.
It's fascinating to see what he expected to be the biggest problems in programming. His discussion of more efficient programming techniques focuses on theorem provers, automated checking of loop invariants and the like, whereas today, the biggest problems typically occur during integration of software components with each other.
But maybe he actually did foresee that:
> I now suggest that we confine ourselves to the design and implementation of intellectually manageable programs.
Regarding provably correct programs: I'm torn here. On the one hand, if we required all programs to carry proofs of their correctness, that would exclude a huge number of current programmers who lack the formal education etc. to carry out these proofs. On the other hand, if all programs that we need would have proofs of their correctness (and thus carry a bunch of helpful invariants and formal specifications), it might be easier to combine all these programs, hence obliterating the need for most programming tasks that are just concerned with integrating multiple programs with each other.
I'll close with the most insightful paragraph from this whole piece:
> There may also be political impediments. Even if we know how to educate tomorrow’s professional programmer, it is not certain that the society we are living in will allow us to do so. The first effect of teaching a methodology —rather than disseminating knowledge— is that of enhancing the capacities of the already capable, thus magnifying the difference in intelligence. 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.
This is fascinating because right now, a lot of people lament that our students are only being stuffed with facts, but not equipped with the methodological knowledge required for their professions.