Geek Logbook

Tech sea log book

Dijkstra: The Humble programmer

Dijistra wrote some interesting things about the activity of programmer. In this opportunity I’m going to make some quotations and notes about the article: The humble programmer

Rules “discovered” for the creation of software

A number of rules have been discovered, violation of which will either seriously impair or totally destroy the intellectual manageability of the program. These rules are of two kinds. Those of the first kind are easily imposed mechanically, viz. by a suitably chosen programming language. Examples are the exclusion of goto-statements and of procedures with more than one output parameter. For those of the second kind I at least (…) see no way of imposing them mechanically, as it seems to need some sort of automatic theorem prover for which I have no existence proof. Therefore, for the time being and perhaps forever, the rules of the second kind present themselves as elements of discipline required from the programmer. Some of the rules I have in mind are so clear that they can be taught and that there never needs to be an argument as to whether a given program violates them or not. Examples are the requirements that no loop should be written down without providing a proof for termination nor without stating the relation whose invariance will not be destroyed by the execution of the repeatable statement.

Dijkstra – The humble programmer

Two Kind of rules:

  • Related to the languages: Choose the good features about the languages
  • Related to the discipline: Need to understand what you are doing

If we can find this rules we can design and implement manageable programs.

Our business is not to make programs

We must not forget that it is not our business to make programs, it is our business to design classes of computations that will display a desired behavior. 

Dijkstra – The humble programmer

Arguments in favor of choosing “intellectual manageable programs”

1- The programmer is choosing between much easier to cope

2- We reduce the space to be considered

3 – We have a constructive approach to the problem of program correctness. Because The only effective way to raise the confidence level is to give a convincing proof of it correctness

 Today a usual technique is to make a program and then to test it. But: program testing can be a very effective way to show the presence of bugs, but is hopelessly inadequate for showing their absence

Dijkstra – The humble programmer

4 – The amount of intellectual effort needed to design a program depends on the program length.

We all know that the only mental tool by means of which a very finite piece of reasoning can cover a 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. In this connection it might be worth-while to point out that the purpose of abstracting is not to be vague, but to create a new semantic level in which one can be absolutely precise

Dijkstra – The humble programmer

5 – The influence of the tool we are trying to use upon our thinking habits

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.

Dijkstra – The humble programmer

6 – hierarchy is a key concept for all systems embodying a nicely factored solution.

Learning and teaching for the business

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.

Dijkstra – The humble programmer
Previous Article

Leave a Reply

Your email address will not be published. Required fields are marked *.

You may use these <abbr title="HyperText Markup Language">HTML</abbr> tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>