Edsger Wybe Dijkstra (1930-2000) was a Dutch computer scientist. He received the 1972 Turing Award for fundamental contributions in the area of programming languages.
He was known for his low opinion of the GOTO-statement in computer programming culminating in the 1968 article “A Case against the GOTO Statement” (EWD215), regarded as a major step towards the widespread deprecation of the GOTO statement and its effective replacement by structured control constructs such as the DO-WHILE-LOOP. This methodology was also called Structured Programming.
Dijkstra uses three constructs Repetition, Choice and Assignment.
These constructs can be found in real life. We assign somebody or ourselves to an activity. If we accept the assignment we are committed. When there are many possibilities we have to make a choice.
Many processes are repeating. We don’t like them. If we find something that is repeating we create a tool to do the “dirty” work. Almost all the tools that are now created are based on software. A tool is a helper. Why is software not seen as a helper? The main reason is that most of the software is controlling people. It is not collaborating. People do’nt like to be controlled. They want freedom to act, to make a personal choice.
Our body is a highly repeating structure. Many processes work without being aware of. If the processes in our body are repeating and are working well we feel harmony. We do’nt mind that our body is making many choices for us. We feel stress if processes stop to function. So the structure of a loop is not the problem. It even looks like everything is a loop. What we don’t like are loops that break down.
They break down because in reality they are not loops but sequences. They stop at the end and bounce against another sequence. A breakdown is a frontal collision of two sequences like trains that are on the same track. Dijkstra invented something to avoid this collision of trains called the semaphore. The semaphore gives a train the signal to stop and wait until the other train has passed. It helpes to share resources but in programming we do’nt look at this issue. Sharing resources needs communication and collaboration.
In IT loops are forbidden and therefore they are not modeled in IT.
Now look at our reality and look for loops. They are everywhere. Loops are called Cycles and Cycles are seen on every level. We could say our reality is a Cycle in a Cycle in a Cycle.
This brings me back to another forbidden construct in Software, the self-reference. Many problems in real life are beautifully modeled by a self-referencing software-program.
Why are self-referencing software-programs forbidden?
I just don’t know. When I moved from my first programming job (Operations Research, making mathematical models) to the IT-department of ABN the only thing I heard was that it was a standard (Rule) not to do so.
Personally I think it had to do with the programming language (COBOL). In my first job I used a very strange language called APL. In this language everything was possible. The difference between my old department and the new department was education. I was the first mathematician to enter the IT-department and it took a long time before the next one came.
My feeling is that many problems are solved in IT (and life) if we embrace the notion of a self-referencing cycle as a basic construct.
I want to close this blog with another famous statement of Dijkstra: “Programming is one of the most difficult branches of applied mathematics; the poorer mathematicians had better remain pure mathematicians”.
Do you want to read more of these statements? Dijkstra made a speech on the 18th of June 1975 called “How do we tell truths that might hurt? http://www.cs.virginia.edu/~evans/cs655/readings/ewd498.html
Do you want to read more about Cycles read the theory behind cycles: