5/1/2026 at 3:29:15 PM
APL is the only language I've ever dreamt about writing (as in: I could see the characters); I'd dreamt about programming in the past, but those dreams were usually what I would categorized as a nightmare—desperately trying to fix a bug that I couldn't figure out.Due to my affinity for the language, and my wish to have worked in its heyday (would love to have an APL gig someday), I have been exposed to various writings and recordings of Ken Iverson. I've also been exposed to a few of Dijkstra's thoughts on APL.
I have to say that Iverson generally comes across as a very generous and curious individual while Dijkstra seems to have been a miserable ass. Maybe, given the lens, I've not given Dijkstra a proper chance to demonstrate a more positive attitude, so I'm open to any suggestions of writings where he doesn't seem like such a grump.
by adregan
5/1/2026 at 3:43:14 PM
> Maybe, given the lens, I've not given Dijkstra a proper chance to demonstrate a more positive attitude, so I'm open to any suggestions of writings where he doesn't seem like such a grump.Kinda hard to find where Dijkstra praised something (except Algol 60).
One funny example: he called FORTRAN "an infantile disorder", though he said this about the team behind it: "At that time this was a project of great temerity and the people responsible for it deserve our great admiration.".
On LISP: "LISP has jokingly been described as 'the most intelligent way to misuse a computer'. I think that description is a great compliment because it transmits the full flavor of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts."
Alan Kay on Dijkstra: "Arrogance in computer science is measured in nano-dijkstras."
by mlajtos
5/1/2026 at 9:56:40 PM
Alan Kay elaborating on that quote: https://news.ycombinator.com/item?id=11796557#11799963“This quote keeps on showing up out of context. […]”
by layer8
5/1/2026 at 4:52:46 PM
"Kinda hard to find where Dijkstra praised something (except Algol 60)."Hamilton Richards, who was one of Dijkstra's colleagues at the University of Texas, told me in an email that Dijkstra was impressed by the work of Richard Bird on functional programming.
by tristramb
5/1/2026 at 8:46:52 PM
Interesting. Bird-Meertens formalism? That was directly influenced by APL. In the broader scope — algebra of programs — Dijkstra heavily disliked Backus’ FP.by mlajtos
5/2/2026 at 1:26:39 PM
He liked to make fun of emerging CS, it was his thing, and he did it pretty well. He wasn't "miserable ass", he was a man of different culture. "Positive attitude" as you used it is a late americanism FWIW. In many parts of the world we often bring our criticisms in similar caustic manner, and we enjoy it while being resilient and optimistic.It doesn't mean that he was always right, of course.
by broken-kebab
5/2/2026 at 1:42:07 PM
I suppose the thing that stuck in my craw is what I perceived as a personal slight:> Your writings made me wonder in which discipline you got your doctor’s degree.
It’s ambiguous, so I can give the benefit of the doubt. However, if intended as an insult, I believe that goes beyond speaking frankly about one’s feelings about a programming language in a manner consistent with one’s culture.
by adregan
5/2/2026 at 2:41:20 PM
I see what you mean, and in fact I'm sure it is an insult. However, sensitivity to it is still a matter of particular culture-time. Some cultures tend to consider such things to be an attack against someone's social status no matter what context. Others may take them as banter, or emotional coloring if you like.Another example: Americans seemingly normalized public swearing using what was originally sex-related slang, while in many other cultures it is a very-very dangerous minefield. And let's not forget that the whole field at that time was orders of magnitude smaller, which implies less formal spectrum of accepted styles of communication.
by broken-kebab
5/2/2026 at 5:25:12 AM
Your comments on Dijkstra are blasphemous ;-)I often see a lot of folks here on HN who are too eager to pass judgement on Dijkstra without having read and understood his writings nor giving much thought to the context and times which shaped his thinking. All of his opinions should be thought over and appropriately adapted for use in our context. He was a wide-ranging polymath philosopher (technical and non-technical) with a laser-like focus on exactitude using Mathematics. Radical approaches must be pushed, particularly when they are hard/difficult to learn and understand. If his language was biting, then it was so much the better for promulgating his cause viz. "correctness over easy", "mathematical reasoning underpinning everything", "structure in aid of the previous", "proper language syntax/design in aid of the previous" etc.
As an example; read EWD 1036: On the cruelty of really teaching computing science (https://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD103...) in entirety and carefully. The thesis is that computing is "radically novel" from other forms of human endeavour and hence it cannot be taught by simplifying to known analogues and adhoc procedural operations. You need the rigor and exactitude of Mathematical Logic to build a "Scientific" basis.
Excerpts:
... What is a program? ... I prefer to describe it the other way round: the program is an abstract symbol manipulator, which can be turned into a concrete one by supplying a computer to it. After all, it is no longer the purpose of programs to instruct our machines; these days, it is the purpose of machines to execute our programs.
So, we have to design abstract symbol manipulators. We all know what they look like: they look like programs or —to use somewhat more general terminology— usually rather elaborate formulae from some formal system. It really helps to view a program as a formula. Firstly, it puts the programmer's task in the proper perspective: he has to derive that formula. Secondly, it explains why the world of mathematics all but ignored the programming challenge: programs were so much longer formulae than it was used to that it did not even recognize them as such. Now back to the programmer's job: he has to derive that formula, he has to derive that program. We know of only one reliable way of doing that, viz. by means of symbol manipulation. And now the circle is closed: we construct our mechanical symbol manipulators by means of human symbol manipulation.
...The point to get across is that if we have to demonstrate something about all the elements of a large set, it is hopelessly inefficient to deal with all the elements of the set individually: the efficient argument does not refer to individual elements at all and is carried out in terms of the set's definition.
...
Back to programming. The statement that a given program meets a certain specification amounts to a statement about all computations that could take place under control of that given program. And since this set of computations is defined by the given program, our recent moral says: deal with all computations possible under control of a given program by ignoring them and working with the program. We must learn to work with program texts while (temporarily) ignoring that they admit the interpretation of executable code.
Another way of saying the same thing is the following one. A programming language, with its formal syntax and with the proof rules that define its semantics, is a formal system for which program execution provides only a model. It is well-known that formal systems should be dealt with in their own right, and not in terms of a specific model. And, again, the corollary is that we should reason about programs without even mentioning their possible "behaviours".
... a program is no more than half a conjecture. The other half of the conjecture is the functional specification the program is supposed to satisfy. The programmer's task is to present such complete conjectures as proven theorems.
He then goes on to describe the importance of teaching Predicate Calculus via a simple imperative language where its semantics are given by proof rules. This language is described in EWD 472: Guarded commands, non-determinacy and formal derivation of programs - https://www.cs.utexas.edu/~EWD/transcriptions/EWD04xx/EWD472... There is no compiler for this language and so the student is forced to implement the program and its proof by hand. However this radical approach is not being accepted by educationists/industry.
He concludes;
Teaching to unsuspecting youngsters the effective use of formal methods is one of the joys of life because it is so extremely rewarding. Within a few months, they find their way in a new world with a justified degree of confidence that is radically novel for them; within a few months, their concept of intellectual culture has acquired a radically novel dimension. To my taste and style, that is what education is about. Universities should not be afraid of teaching radical novelties; on the contrary, it is their calling to welcome the opportunity to do so. Their willingness to do so is our main safeguard against dictatorships, be they of the proletariat, of the scientific establishment, or of the corporate elite.
by rramadass
5/2/2026 at 4:37:16 PM
That's a whole lot of text that does absolutely nothing to justify the stuff the parent comment is talking about. Let's be honest here: he was really smart and got away with being kinda an asshole a lot because of that (probably because at least some of the time his arrogance wasn't pointed at anyone and instead was genuinely funny, like his comments about not being able to lie about being "the world's greatest computer scientist" because he was under oath on a jury.I personally don't think that being right ever excuses the method of delivery; there's always a way to be just as right and convincing without being an asshole, but it requires conscience choice. Dijkstra probably would have found this sort of insistence tedious and beneath him, and he wouldn't be wrong about being smarter than me and probably anyone else who would have expressed this to him, but like I said, I don't think that excuses it.
by saghm
5/3/2026 at 5:39:15 PM
In OP's post, Dijkstra explicitly points out that APL aficionados don't seem to be able to write programs without an implementation (i.e. computer+special characters keyboard) while according to him Programming is about humans manipulating symbols and hence should be doable with pencil and paper.The reason why is what EWD1036 elaborates beautifully. My second comment with excerpts here https://news.ycombinator.com/item?id=47985605 follows on the previous (which talked about Programs) with Dijkstra's views on Programming Language.
This is what should have been discussed in this thread since it shows quite clearly the reasons for Dijkstra's uncompromising stand in the note. Roger Hui then argues that Dijkstra may have been hasty in his conclusion since Ken Iverson clearly invented APL explicitly as a notation for mathematical communication (his famous paper "Notation as a Tool of Thought") and therefore Dijkstra's insistence on writing a program formally (i.e. with proof) should be natural in APL. He then demonstrates it with a couple of examples making it a nice teaching lesson.
But "adregan" focused on some trivial phrase that Dijkstra had employed, imagined a silly slight in his head and labelled Dijkstra a "miserable ass" without having understood anything in the note (his comment has no relevance to the post). Apparently Dijkstra has not demonstrated any "positive attitude" in any of his voluminous writings! The ignorance was so breathtaking that i could not resist throwing a wall of excerpts from EWD1036 for his (and others) edification.
> I personally don't think that being right ever excuses the method of delivery; there's always a way to be just as right and convincing without being an asshole ...
This is more nuanced then you seem to think. One can be aphoristic/pithy/sharp/biting/assertive/etc. all without being an asshole. When it comes to communication, particularly of difficult scientific/mathematical abstract concepts/ideas one needs to be precise/specific so that the listener's attention is focused on the essence and not on the frills. Dijkstra did this masterfully and that is why people love to read his EWDs. When he makes a sharp observation or gives a biting opinion, it grabs your attention and you immediately start asking why/what-does-he-mean which more often than not leads to great insights.
I also pointed to the influence of time and context on Dijkstra's writings. Programming was at its infancy with Computers/OSes/Compilers/Languages/Tools all being unreliable since there was no unifying scientific principles underlying them. His knowledge of Mathematics gave him the one solid foundation on which he could build the "Science of Programming" which he did with masterful finesse and uncompromising attitude.
Lastly, Dijkstra was Dutch and culturally their society is known for their "straightforwardness" i.e. "say it as it is" way of communication - https://www.bbc.com/travel/article/20180131-where-dutch-dire...
by rramadass
5/4/2026 at 1:52:16 PM
I apologize for taking the conversation off course as it wasn’t my intention, and I also thank you for providing examples of Dijkstra‘a writing. In asking for a recommendation, I was admitting a great blind spot, so you needn’t be breathless from the ignorance.The only thing that I feel bears repeating is that I also compared Dijkstra to Ken Iverson—a mathematician who worked in the same time period and also taught in North America—who didn’t (as far as I have seen) muddy the waters of his writings/teachings with superfluous insults.
Note that Roger Hui here foregrounds the fact that
> Ken Iverson invented his notation as a means of communications among people
(Emphasis mine) and I think that it is important that this fact of APL is conflated against one’s desire to prove a program. A fact which Hui says has little to do with the correctness of the result.
One aspect of the original which I believe you are eliding over, but which I focused on and tacitly referenced (wouldn’t be an APL discussion without a little tacit programming reference), is that in conveying one’s ideas or proofs, one can distract from their point by introducing unrelated jabs or insults. I believe this fact is present in Roger Hui’s writing.
by adregan
5/2/2026 at 10:05:51 AM
SICP already does that for the programmer, and "Concrete Abstractions" for the novice making it ready for SICP.by anthk
5/2/2026 at 11:54:01 AM
Not quite.The books you mention deal with "Software Abstractions" i.e. Procedural Abstraction, Data Abstraction, ADT, Patterns etc. They are at a much higher level than Dijkstra's concepts.
What Dijkstra is talking about is the Set Theory/Logic Operations underlying all of them. This is why he was sceptical of OO/Functional etc. styles of programming. They were all mere syntactic sugar over the underlying Mathematics obscuring the essence of Programming. For him all computation is basically a series of manipulating values from a Set as a whole using Logical Expressions i.e. Predicate Calculus.
Again from EWD1036;
Before we part, I would like to invite you to consider the following way of doing justice to computing's radical novelty in an introductory programming course.
On the one hand, we teach what looks like the predicate calculus, but we do it very differently from the philosophers. In order to train the novice programmer in the manipulation of uninterpreted formulae, we teach it more as boolean algebra, familiarizing the student with all algebraic properties of the logical connectives. To further sever the links to intuition, we rename the values {true, false} of the boolean domain as {black, white}.
On the other hand, we teach a simple, clean, imperative programming language, with a skip and a multiple assignment as basic statements, with a block structure for local variables, the semicolon as operator for statement composition, a nice alternative construct, a nice repetition and, if so desired, a procedure call. To this we add a minimum of data types, say booleans, integers, characters and strings. The essential thing is that, for whatever we introduce, the corresponding semantics is defined by the proof rules that go with it.
Right from the beginning, and all through the course, we stress that the programmer's task is not just to write down a program, but that his main task is to give a formal proof that the program he proposes meets the equally formal functional specification. While designing proofs and programs hand in hand, the student gets ample opportunity to perfect his manipulative agility with the predicate calculus. Finally, in order to drive home the message that this introductory programming course is primarily a course in formal mathematics, we see to it that the programming language in question has not been implemented on campus so that students are protected from the temptation to test their programs. And this concludes the sketch of my proposal for an introductory programming course for freshmen.
The language mentioned above is described in EWD472 (also see wikipedia for a detailed explanation - https://en.wikipedia.org/wiki/Guarded_Command_Language). Notice the total absence of syntactic sugar and fancy computation models i.e. no complex Types, no mapping to lambda calculus or any other mathematical model (since a computer is fundamentally imperative over a state space) etc. It is just the absolute basic mathematics of Set Theory and Logic.
Note that Tony Hoare had systematized the algebra for this in his "Hoare Logic" via Pre/Post conditions for a executable statement - https://en.wikipedia.org/wiki/Hoare_logic
Dijsktra then went one-step further by giving automatic calculational rules to derive a program by simple logical manipulation of symbols. In this case we reason backwards from the output of the program (known apriori from its functional specification) i.e. from postcondition to precondition using the idea of a predicate transformer. This is his weakest-precondition (wp) calculus where with each executable program statement a Pre = wp(Statement, Post) total function is defined by the Programmer i.e. his code must satisfy the function which is the predicate transformer transforming the postcondition to a weakest-preconditon. See this wikipedia page on Predicate Transformer Semantics for a nice detailed explanation - https://en.wikipedia.org/wiki/Predicate_transformer_semantic...
by rramadass
5/3/2026 at 12:31:54 PM
Thank you for this treatment. I agree 100% with you, people for opinions about the name Dijkstra based on silly echoes of polemics that lost much of the irony in their origination.The replies here I think support that. Dijkstra had a lot of radical ideas about computer science and I am glad to have the opportunity to read about them. When I read his texts I feel like I'm drinking from a pristine fountain and all my wandering was worth having found it at last. But people do have strong knee-jerk reactions about Dijkstra's name and some of his jabs taken out of context.
by intrinsicallee
5/3/2026 at 5:54:39 PM
See also - https://news.ycombinator.com/item?id=47999389by rramadass
5/2/2026 at 2:49:19 PM
I'm talking about Lisp where most of the concepts you are talking about are being mapped almost 1:1 to some ML language, MLite, point for point:https://www.t3x.org/mlite/index.html
Read the manual and the paper.
On guarded commands (and guards under ML), they are a bit close to a cond and recursivity under Scheme, a simple case.
by anthk