E.W.Dijkstra Archive: Interview (1985)
cs.utexas.edu
cs.utexas.edu
(before the submission was renamed, its title was "Coding is not allowed to start before seventy percent of the scheduled time has elapsed")
---
van Vlissingen: In practice it often appears that pressures of production reward clever programming over good programming: how are we progressing in making the case that good programming is also cost effective?
Dijkstra: Well, it has been said over and over again that the tremendous cost of programming is caused by the fact that it is done by cheap labor, which makes it very expensive, and secondly that people rush into coding. One of the things people learn in colleges nowadays is to think first; that makes the development more cost effective. I know of at least one software house in France, and there may be more because this story is already a number of years old, where it is a firm rule of the house, that for whatever software they are committed to deliver, coding is not allowed to start before seventy percent of the scheduled time has elapsed. So if after nine months a project team reports to their boss that they want to start coding, he will ask: "Are you sure there is nothing else to do?" If they say yes, they will be told that the product will ship in three months. That company is highly successful.
---
...I feel that the effort to use machines to try to mimic human reasoning is both foolish and dangerous. It is foolish because if you look at human reasoning as is, it is pretty lousy; even the most trained mathematicians are amateur thinkers. Instead of trying to imitate what we are good at, I think it is much more fascinating to investigate what we are poor at. It is foolish to use machines to imitate human beings, while machines are very good at being machines, and that is precisely something that human beings are very poor at. Any successful AI project by its very nature would castrate the machine.
UPDATE: Can't help myself. This Lisp quote is too good=).
---
Lisp was great at the time of its inception if only for a radically new way of using machines. It has suffered the fate of having been elevated to a status of de facto standard with all its defects. Despite its conceptual novelty a lot of the design of Lisp is terribly amateurish even by the standards of the time. When I read the first manual, the Lisp 1.5 manual, published in 1961, I could not believe my eyes. It was an extremely poor language. Now it has become the defacto standard of the AI community, which now suffers from Lisp, the way the rest of the world suffered from Fortran.
"My overall impression is that it does not matter what mistakes the USA makes, because they will be faithfully copied in Europe only 20 years later. Europe can learn an immense amount from the United States. By studying what is happening and then not copying it. In some aspects we might even try to copy it."
Unfortunately, still true, of so much beyond software 'design'.
I think it's important to take this in context. EWD was a proponent of Computer Science as mathematical proof, and as such pushed hard for structured programming methods. This was the mid 80s.
In hindsight, we have learned that there are too many unknowables in true software engineering, so we need to be more Agile. Try something, fix it, and try again.
One of his big points in that paragraph is something that we should take to heart. Programming by cheap labor is very dangerous. We do need to think as well as test and do.
What I see among many plumbers is the notion that the world of algorithmic programming does not exist ("I dont give a $#@! about big Oh, algorithms are entirely unnecessary, I dont even know what quicksort is and I dont care LOL"). Similarly the other camp trivializes the act of plumbing. Neither do our craft any favors.
I mean, structured programming was much better than unstructured, goto-riddled, ball-of-mud programming, but... mathematical proof? Not with that foundation.
You can actually do formal mathematical proofs of functional programming (at least in the small). You can do it for structured programming, too, but in the much smaller.
Also, we don't have hardware that is functional all the way down (no pun intended, but it is somewhat unavoidable), so even a purely functional world must be built on something else. That better not be a ball-of-mud.
Taken of course to mean, that you will do tons of coding in the first 70%, just knowing it's ALL THROW AWAY CODE.
This changes nothing, it's what already happens, you just are doing it wrong if you keep the code you write in the first 70%.
Couldn't agree more.
Programmer: "@%*#! We didn't think of that, the design will have to change."
Is this not exactly what is happening today?
Because computing is now supposed to cure all the ills of the world and more... The current boom in computing is an immediate reflection of absolutely unrealistic hopes.
Are we not repeating history exactly? E.g. medicine-quackery, chemistry-alchemy, astronomy-astrology
Regarding AI: Can you research something that is not science? I feel that the effort to use machines to try to mimic human reasoning is both foolish and dangerous.
Amen
> That is a very sad comment, but the moral of the story is that if industrial practice suffers it is largely due to the conservatism, technical incompetence, of the managers of those projects. If however the internal organization and hierarchy of industrial programming organizations can be changed, there is room for great progress. And I think it will change, because the pressure from below becomes stronger and stronger.
So much for code being its own documentation (which I suspect is an ideology promoted by arrogance).
Waterfall works well when requirements never change and priorities don't shift.
Agile works well when you have full control of the requirements and full control of releasing.
Your mileage may vary. My 2 cents.
For non life threatening stuff the crap people deliver now is ok-ish as no-one seems to want to pay (or ask) for anything better. I'm just wondering how you validate something is non life threatening; a bug in some financial handling code could be life threatening if someone loses all because of it and kills himself?
As I reached the ripe old age of almost 40, I get requests to review code quite a lot and it makes me want to take up gardening instead. It pays a lot less but at least I can kick my alprazolam habit.