And it's not like he was a lone crank railing against the 99% who were moving forward with a well-founded idea of how computing could scale indefinitely by composing incorrect programs. Just like today, 99% of programming, including programming for government programs and vital infrastructure, was done by people who were only hoping to make their own projects succeed well enough for the next six months to three years. I'm sure there were brilliant people who made intelligent arguments against the need for correctness, but their arguments didn't carry the day. Complacency and short-term thinking did.
In that context, Dijkstra's pessimism and his use of harsh, attention-getting language makes a lot of sense. How many people at the time really understood that in 2020 every part of our civilization would depend on code compiled by compilers with bugs, linked with libraries with bugs, in virtual machines with bugs, on operating systems with bugs, on CPUs with bugs in their microcode, and yet it would still all mostly work?
That is clearly wrong if one is willing to take a moment to stop gazing at the wonder of pure mathematics and look at the outside world. There is no notion of "correctness" for the pyramids of Egypt, the dykes of the Netherlands, Milan Cathedral, or the world economy and yet those huge-scale systems all function.
> Dijkstra's pessimism and his use of harsh, attention-getting language makes a lot of sense.
It makes sense in terms of Dijkstra's personality, but it makes no logical sense. If you believe mathematical correctness is such a valuable principle, then you should be able to leverage that same principle in one's own arguments. The fact that Dijkstra couldn't dispassionately prove that correctness was vital and had to resort to emotionally-loaded weasel words undermines his own claim.
Wow, couldn't disagree with this more, at least on your examples of civil engineering (buildings, dikes). There are testable, comprehensive physical principles that govern whether any of these engineered products function in their most fundamentally-intended ways. This is the reason most buildings are resilient and don't collapse under load, or that dams keep water from flowing uncontrolled. You can debate "correctness" in the sense of the purpose the product serves, but there is the principle of correctness of construction which your civil engineering examples (and anything truly engineered) satisfy. Correctness in construction is not subjective.
Perhaps, but it's never certain. So things that are "correct" can still be wrong.
Here's how Einstein expressed his disagreement with what you are saying:
> As far as the laws of mathematics are certain, they do not refer to reality, and as far as they refer to reality, they are not certain.
Nothing in physics (or any other science) is certain. All one can do in science (other than mathematics) is disprove. One cannot prove.
To prove you would have to be all knowing. You would have to have taken into account all relevant aspects of all physical characteristics. For example, all known aspects of quantum mechanics, including the uncertainty principle, AND all relevant unknown aspects of quantum mechanics, which is guaranteed to be hit and miss, and can rationally be expected to contain an unknown number of misses that isn't zero.
It's the human propensity to ignore these fundamentals that leads to things like the Tacoma Bridge collapse.[0]
[0] https://en.wikipedia.org/wiki/Tacoma_Narrows_Bridge_(1940)
These are statistical engineering tests of the probability of failure under certain conditions. That is not at all what Dijkstra would consider to be "correctness". Dijkstra is talking about mathematical proof. In mathematics, one does not say "1 + 2 = 3 plus or minus 0.1 with a safety factor of 2".
It's unclear how this would be any different than mathematically formalizing a distributed system, identifying the properties that constitute correctness of operation of that distributed system, and symbolically proving that subject to certain assumptions, the distributed system model does or does not satisfy those properties. This would presumably be consistent with the Dijkstra view of mathematical correctness.
I think it's impossible to come up with a rational judgment of whether the world economy "functions." I mean, those of us who are alive are alive, but there are a lot of things that have happened that haven't been ideal.
Besides the world economy, nothing you mention has the functional complexity of a large piece of software, and none of it was designed and built with much confidence, other than confidence that came from similarity to previous designs, and from an optimistic outlook that issues encountered during construction could be coped with. This wall is cracking, so we tear it down and rebuild it a little thicker. We have a few centuries, after all. I think you're right that modern software projects are analogous to ancient pyramids and medieval cathedrals. That's pretty much where we are. Yet somehow, working at that low level of sophistication, we've built working software that is orders of magnitude more complex than cathedrals.
I'm not saying I know how to improve on the situation, or even that we can; I'm just pointing out how different it is from, say, contemporary structural engineering where we can analyze the design of a novel structure and have a pretty good idea of whether it will be safe based on its geometry and known characteristics of materials and how they're joined. It's amazing that we've reached the scale we have with nothing comparable.
> If you believe mathematical correctness is such a valuable principle, then you should be able to leverage that same principle in one's own arguments.
The idea that mathematical reasoning is on some spectrum with dispassionate discourse has motivated hundreds of years of attempts to improve natural language by making it more mathematical. Result: some interesting contributions to philosophy but very little change in how people communicate. People are still people.
The issue have nothing to do with mathematical correctness, so you can't apply the same principles. This is not math. But, Dijkstra's it's not being logical in arguments, because he is not of dick and likely this style of arguing was working for him in his life.
Of course there are critical software engineering projects as well, Boeing MAX comes to mind.
The BASIC he is describing had no call stack, nothing that would resemble a function in today's languages. FORTRAN at the time handed masses of state around in global variables and the latest version had just added subroutines and functions. This is after ALGOL 60 had established the model that we all take for granted today.
I think the bulk of practitioners today would absolutely agree with him.
About programming languages I don't think there's any question he was right. Sometimes we agree with him even without realizing it, for example, the original argument of GOTO considered harmful was that GOTO statements decreased "linearity" by having the control flow jump to random places. The recent trend in mainstream PLs to adopt functional-style control structures (JS array methods, Java streams, etc.) is predicated on the exact same rationale.
I'm also in broad agreement on his stance about natural language being just flat out wrong in the context of computing.
But the man made an exorbitant amount of claims, many of which are just provably wrong. The bits about BASIC and COBOL are particularly egregious examples of his at times cavalier attitude. After all, arrogance is measured in nano-Dijkstras.
> gotos and state machines (which are considered best practices) are basically equivalent
WTF? State machines can be implemented in a lot of ways: mutually recursive calls, pattern matching, function pointers... In what sense are they "equivalent" to gotos? Also what does it mean that state machines "are considered best practices"?
> It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.
is at best a hyperbolic joke. I dearly hope he wasn't being serious.
"The second major development on the software scene that I would like to mention is the birth of FORTRAN. At that time this was a project of great temerity and the people responsible for it deserve our great admiration. It would be absolutely unfair to blame them for shortcomings that only became apparent after a decade or so of extensive usage: groups with a successful look-ahead of ten years are quite rare! In retrospect we must rate FORTRAN as a successful coding technique, but with very few effective aids to conception, aids which are now so urgently needed that time has come to consider it out of date. The sooner we can forget that FORTRAN has ever existed, the better, for as a vehicle of thought it is no longer adequate: it wastes our brainpower, is too risky and therefore too expensive to use. FORTRAN’s tragic fate has been its wide acceptance, mentally chaining thousands and thousands of programmers to our past mistakes. I pray daily that more of my fellow-programmers may find the means of freeing themselves from the curse of compatibility."
It's the kind of ranting you do with your colleagues in a pub after-hours, not something you publish in a professional context and frame as "unpleasant truths", as if they've been proven through scientific measurement.
They did not permit recursion (direct or indirect). Almost by design they encouraged spaghetti code (the thing Structured Programming was meant to work against). They encouraged (or required) global state. They discouraged modularity. They were effective languages (in the sense that people got stuff done in them), but they were poor languages when compared to the capabilities of their contemporaries.
To this day if I saw 6502 assembly on a resume I'd be intrigued and if I saw BASIC I'd view it as a yellow flag.
I've read countless anecdotes from perfectly capable programmers who not only learned, but first discovered their interest in the field, via BASIC. No language "mentally mutilates programmers beyond hope of regeneration". And BASIC probably isn't even the worst one for learning purposes.
Remember, Dijkstra was a professor and he was an expert on teaching programming. He would have far more experience with the effect he claims than I do. I hazard to guess that is true with respect to you too.
And yes he’s obviously engaging in rhetorical hyperbole in the text you quote.
EWD's quote is from 1975 which is just barely the start of the microcomputer era (the Altair 8800 came out in '75 and the Apple II in '77), so he's not referring to those. Most people writing programs would have had access to mainframes and therefore had access to multiple language interpreters and compilers I would think.
That isn't to say that he did not have valid reasoning for his dislikes as a language expert and a mathematician but those reasons are not ones the bulk of practitioners would likely agree are valid.