12 ms·
The Manuscripts of Edsger W. Dijkstra
- peterkelly 11mo agoThe most important one in the context of 2025 is this one: On the foolishness of "natural language programming". https://www.cs.utexas.edu/~EWD/transcriptions/EWD06xx/EWD667.html https://www.cs.utexas.edu/~EWD/transcriptions/EWD06xx/EWD667...
- sfn42 11mo agoI love that essay. It's such a joy to read, and even though it is very short and to the point it says so much both about the topic itself and society at large. And its just so obviously correct.
- Atlas667 11mo ago[flagged]
- f1shy 11mo agoIMHO you are going way way way to far. Far in the weeds.
- BigGreenJorts 11mo agoNah, I think they're probably seeing warning signs. So much Djikstra's writing is pseudo intellectual pretensious word salad. Which is a shame bc he was an actual intellectual.
- bazoom42 11mo agoIt is not obviously correct. The unstated premise is that programming is - or should be - similar to writing mathematical proofs.
- adamddev1 11mo agoThe proofs/programs (Howard/Curry) correspondance has been fairly well established I think.
- marcosdumay 11mo agoIt's the requirements discovery phase that always breaks every pure mathematical treatment of software development. (And also, like DW points, that software is way more complex. But on this case, it's the requirements discovery.)
- moi2388 11mo agoThat’s because it’s not pure math, but applied math. Which also has the requirements discovery phase.
- marcosdumay 11mo agoYes, and constructing mathematical theories is completely different from finding proofs.
- bazoom42 11mo agoIt is a bit like architecture is just physics or painting is just chemistry. Technically true in some reductionist sense, but not necessarily the most useful way to think about it.
- sfn42 11mo agoNo, the premise is that programming is the act of writing precise specifications, which is easier in a precise language. Similarly to mathematical proofs.
- f1shy 11mo agoThis is gold! Thanks.
- dilawar 11mo agoThanks for the link. Great read. Apparently Dijesktra loved using em-dash!
- beezlewax 11mo agoIf you look at the scanned pdf from what looks like a typewriter written document, he was using two hyphens everywhere. Links on the top of the page.
- adamddev1 11mo ago> when judging the relative merits of programming languages, some still seem to equate "the ease of programming" with the ease of making undetected mistakes. This hits so hard. cough dynamic typing enthusiasts and vibe coders cough
- noosphr 11mo ago> Another thing we can learn from the past is the failure of characterizations like "Computing Science is really nothing but X", where for X you may substitute your favourite discipline, such as numerical analysis, electrical engineering, automata theory, queuing theory, lambda calculus, discrete mathematics or proof theory. I mention this because of the current trend to equate computing science with constructive type theory or with category theory. https://www.cs.utexas.edu/~EWD/transcriptions/EWD12xx/EWD1243a.html https://www.cs.utexas.edu/~EWD/transcriptions/EWD12xx/EWD124...
- oivey 11mo agoI’m not sure that is the focus of most serious dynamic language. For me, it’s the polymorphism and code re-use it enables that the popular static languages generally aren’t close to catching up to.
- dpark 11mo agoI’m curious, can you give an example that wouldn’t be solved by polymorphism in a modern statically typed OO language? I would generally expect that for most cases the introduction of an interface solves for this. Most examples I can think of would be things like “this method M expects type X” but I can throw in type Y that happens to implement the same properties/fields/methods/whatever that M will use. And this is a really convenient thing for dynamic languages. A static language proponent would call this an obvious bug waiting to happen in production when the version of M gets updated and breaks the unspecified contract Y was trying to implement, though.
- oivey 11mo agoThat’s basically the main example I’d give. I think the static proponents with that opinion are a little myopic. Those sorts of relationships could generally be statically checked, it’s just that most languages don’t allow for it because it doesn’t fit in the OOP/inheritance paradigm. C++ concepts seem to already do this. The “bug waiting to happen” attitude kind of sucks, too. It’s a good thing if your code can be used in ways you don’t originally expect. This sort of mindset is the same trap that inheritance proponents fall into. If you try to guess every way your code will ever be used, you will waste a ton of time making interfaces that are never used and inevitably miss interfaces people actually want to use.
- cubefox 11mo agoSetting aside the the elephant in the room (modern coding LLMs are in some sense indeed compilers for natural language -- except they still "compile to" ordinary programming languages) it nonetheless seems to me that even conventional programming languages use too little, not too much, natural language. Example: - "&&" rather than "and", - "||" rather than "or", - "if (A) B" rather than "if A then B" This only makes the code harder to read for beginners without apparent benefit. I'm not sure whether Dijkstra would have agreed. Thankfully though, programming languages already use mostly explicit (English) language in function names. Which is a much better situation than in mathematics, where almost every function or operator is described by a single nondescript letter or symbol, often even in Greek or in a weird font style. There is a tradeoff between conciseness and readability. Mathematics has decided long ago to exclusivly focus on the former, and I'm glad this didn't happen with programming. If we read Dijkstra as arguing that only focusing on readability (i.e., natural language) is a bad tradeoff, then he is right.
- SirHumphrey 11mo agoWorking a bit with some old programming languages that are very natural language like (FORTRAN’s .and. and .or. or COBOL’s IS GREATER THAN) I don’t think the readability increases that much, maybe the benefit is more approachability. In a more symbolic language skimming code is much easier because the symbols provide visible distinction between more syntactic control flow and the declared functions, variables etc.
- pm215 11mo agoI suspect Dijkstra would have disagreed with you about "and" and "or", judging from his criticism of the technical report which had the line "even the standard symbols used for logical connectives have been avoided for the sake of clarity". Personally I think one advantage of '&&' and '||' is that it's clear they're a notation that you need to know the syntax and semantics of. For instance typically '&&' is "short-circuiting" and will not evaluate its RHS if the LHS is true; a natural-language "if a and b then ..." doesn't suggest that critical detail or necessarily nudge you to go and check. (Not that Dijkstra was in favour of short-circuiting logical operators, to judge by https://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD1009.html https://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD100... point 4...) More generally, I'm not sure of the benefit of tailoring the language syntax for beginners rather than experienced practitioners; the advantage of '&&', '||' and the rest of the "C-like" syntax stuff in a new language is that it's familiar to a wide base of existing experienced programmers.
- bobsh 11mo agoThis is a treasure (it’s been around quite a while). For those youngers out there: still completely relevant. Still ahead of the game, imho.
- fallat 11mo agoI've read them all. While they are fun to read as their commentary come from a place of logic, there is a lot of emotion baked in and little room for being open minded about potential alternatives that could find their ways to reality. Dijkstra was very smart but you can tell thinking is a little closed, which is not objectively bad, but it happens a little too much for my taste.
- linguae 11mo agoI love Dijkstra’s writings, but, yes, he had very strong opinions that at times were abrasive. Alan Kay said it best when he said, “arrogance in computer science is measured in nano-Dijkstras.” Some famous Dijkstra quotes: “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.” “Object-oriented programming is an exceptionally bad idea which could only have originated in California.” As a UC Santa Cruz masters alum, my favorite Dijkstra quotes come from notes from his visit to UCSC in the 1970s (https://www.cs.utexas.edu/~EWD/transcriptions/EWD07xx/EWD714.html https://www.cs.utexas.edu/~EWD/transcriptions/EWD07xx/EWD714...): “I found the UCSC campus not an inspiring place, and the longer I stayed there, the more depressing it became. The place seemed most successful in hiding all the usual symptoms of a seat of learning. In the four-person apartment we occupied, only one of the four desks had a reading lamp, and the chairs in front of the desks were so low that writing at the desks was not comfortable. Probably it doesn't matter. Can UCSC students write? Do they need to? The notice boards showed ads from typing services "Grammar and spelling corrected.". (One of these ads itself contained a spelling error!)”
- deleted 11mo ago[deleted]
- 11mo ago
- quantum_state 11mo agoTruly a treasure trove … unfortunately, much of the wisdom from people like Dijkstra seems to have been forgotten or ignored by the software engineering industry.
- RoguePixelDC 11mo agoSince I've been playing around with AI a lot lately, I'd suggest taking a few papers and uploading them for context...seeing good examples vastly improves their subsequent programming ability.
- teddyh 11mo agoSomething which I occasionally link to, is this: <https://www.cs.utexas.edu/users/EWD/ewd08xx/EWD831.PDF https://www.cs.utexas.edu/users/EWD/ewd08xx/EWD831.PDF>. It not only shows why computer languages should start their indexes at 0 (instead of 1), but also shows why intervals should be specified as lower-inclusive and upper-exclusive.
- nyrikki 11mo agoWhile I don’t disagree with his argument for preferred conventions in an era of accumulators/gp registers, I am surprised he didn’t call out why Fortran used 1, The IBM 704's index registers were decrementing, subtracting their contents from an instruction's address field to form an effective address. Type A instructions had a three bit tag, indicating which index registers to use. With those three indexes you get Fortran’s efficient 7D column major arrays. This made data aggregation much more efficient and Cray/Cuda/modern column oriented DBs do similar. But for Algol-like languages on PDP inspired hardware I do like his convention, if like the example you have a total ordering on the indexes. But Fortran also changed the way it was taught, shifting from an offset from memory that was indexed down from an address, which makes sense when the number of bits in an address space changes based on machine configuration, to index values. Technically Fortran, at least in word machines meets his convention. pointer + offset <= word < pointer + offset +1 It is just the offset is always negative.
- adrian_b 11mo agoFORTRAN was defined a few years before IBM 704 (in 1954). The use of 1-based indexing was just inherited from the index notation used for vectors and matrices in most mathematical journals at that time. When IBM 704 was designed (as the successor of IBM 701 and taking into account the experience from IBM NORC), it was designed to allow an efficient implementation of FORTRAN, not vice-versa. The column-major ordering of FORTRAN allows more efficient implementations of the matrix-vector and matrix-matrix products (by reading the elements sequentially), when these operations are done correctly, i.e. not using the naive dot product definitions that are presented in most linear algebra manuals instead of the useful definitions of these operations (i.e. based on AXPY and on the tensor product of vectors).
- PaulRobinson 11mo agoI once had one of his quote on the back of my business card when I was doing a lot of software dev consultancy: "Computer Science is no more about computers than astronomy is about telescopes". I keep meaning to sit down with this site and make my way through it all. Might make more progress if I grab them into an eReader-friendly format and then peruse them more easily when travelling.
- ajdoingnothing 11mo agoAstronomy is not named "Telescope Science" though. ;-)
- drob518 11mo agoYou’re only half serious, but this is actually a good point.
- psychoslave 11mo agoIn Europe Informatics is more common than CS.
- PaulRobinson 11mo agoThat's his point: "Computer Science" is a poor name for that area of study.
- GrumpyYoungMan 11mo agoThe problem with that quote is that all of us reading this are telescope operators, not astronomers. The quantity and quality of our telescope photos is what we are paid for so we have no choice but to know our chosen brand of telescope inside and out.
- shagie 11mo agoI'm amused at EWD498 - How do we tell truths that might hurt? https://www.cs.utexas.edu/~EWD/transcriptions/EWD04xx/EWD498.html https://www.cs.utexas.edu/~EWD/transcriptions/EWD04xx/EWD498... Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer. ... The use of anthropomorphic terminology when dealing with computing systems is a symptom of professional immaturity. ... Projects promoting programming in "natural language" are intrinsically doomed to fail. I'd also recommend EWD1305 https://www.cs.utexas.edu/~EWD/transcriptions/EWD13xx/EWD1305.html https://www.cs.utexas.edu/~EWD/transcriptions/EWD13xx/EWD130... Answers to questions from students of Software Engineering [The approximate reconstruction of the questions is left as an exercise to the reader.] ... No, I'm afraid that computer science has suffered from the popularity of the Internet. It has attracted an increasing —not to say: overwhelming!— number of students with very little scientific inclination and in research it has only strengthened the prevailing (and somewhat vulgar) obsession with speed and capacity. Yes, I share your concern: how to program well —though a teachable topic— is hardly taught. The situation is similar to that in mathematics, where the explicit curriculum is confined to mathematical results; how to do mathematics is something the student must absorb by osmosis, so to speak. One reason for preferring symbol-manipulating, calculating arguments is that their design is much better teachable than the design of verbal/pictorial arguments. Large-scale introduction of courses on such calculational methodology, however, would encounter unsurmountable political problems.
- ryandv 11mo agoDijkstra was so based.
- 4b11b4 11mo agoI really enjoyed the this one: Some meditations on Advanced Programming https://www.cs.utexas.edu/~EWD/transcriptions/EWD00xx/EWD32.html https://www.cs.utexas.edu/~EWD/transcriptions/EWD00xx/EWD32.... As I'm currently in a Functional Programming course in Haskell... This resonated. I know that we'll always need to write programs which directly interface with memory. However, when we don't need to do that... Maybe we shouldn't write programs in this style (i.e. imperative). Maybe we shouldn't even use an imperative language (I know, that's a stretch, many languages have incorporated functional aspects and we can utilize them instead of trying to avoid the language entirely). --- Dijkstra ends EWB 32 with: "Smoothly we have arrived at the third component of our tool, viz. the language: also the language should be a reliable one. In other words it should assist the programmer as much as possible in the most difficult aspect of his task, viz. to convince himself —and those others who are really interested— that the program he has written down defines indeed the process he wanted to define." "As my very last remark I should like to stress that the tool as a whole should have still another quality. It is a much more subtle one; whether we appreciate it or not depends much more on our personal taste and education and I shall not even try to define it. The tool should be charming, it should be elegant, it should be worthy of our love. This is no joke, I am terribly serious about this. In this respect the programmer does not differ from any other craftsman: unless he loves his tools it is highly improbable that he will ever create something of superior quality." At the same time these considerations tell us the greatest virtues a program can show: Elegance and Beauty." --- Functional languages... help us achieve these aims.
- bdamm 11mo agoAlas, I live an a world where efficiency does actually matter, and elegance to me includes efficiency. I live in a world of embedded software, portability, and reliability. In this regard, almost every single functional language is an utter failure, because they require runtimes and big fat common libraries. Even golang is borderline. Haskell has little chance. Generally I think this does answer the question about why functional languages don't dominate more than they do - although you could make an argument that JavaScript is a functional language, and it certainly is enjoying a lot of dominance these days. JS environments aren't known for being particularly efficient, though. To me, efficient use of resources is elegant, and a language needs to be able to do that.
- OakNinja 11mo agoI love the timeless ”Threats to computer science” https://www.cs.utexas.edu/~EWD/transcriptions/EWD08xx/EWD898.html https://www.cs.utexas.edu/~EWD/transcriptions/EWD08xx/EWD898... Also the burn in the beginning of EWD899 (not transcribed) is noteworthy: A review of a paper in AI. I read "Default Reasoning as Likelihood Reasoning" by Elaine Rich. (My copy did not reveal where it had been published; the format suggests some conference proceedings. If that impression is correct, I am glad I did not attend the conference in question. https://www.cs.utexas.edu/~EWD/ewd08xx/EWD899.PDF https://www.cs.utexas.edu/~EWD/ewd08xx/EWD899.PDF
- tiu 11mo agoFor the mathematically inclined, EWD717 and EWD765 have two really cool problems. A while back someone posed EWD765 for an alternate solution, I don't recall if any other solution was found. That was my introduction to these. [717]: https://www.cs.utexas.edu/~EWD/ewd07xx/EWD717.PDF https://www.cs.utexas.edu/~EWD/ewd07xx/EWD717.PDF [765]: https://www.cs.utexas.edu/~EWD/ewd07xx/EWD765.PDF https://www.cs.utexas.edu/~EWD/ewd07xx/EWD765.PDF
- zkmon 11mo agoSeeing book sections or chapters starting with zero, always confuses me. I know that this convention is probably inspired by the fact that the addresses of memory locations start with zero. But that case was due to that fact one of the combination of the voltages can be all zeros. So, it's actually the count of combinations, and I don't think it can be used for ordinal enumeration of worldly things such as book chapters, or while talking about the spans in space and time (decades, centuries, miles etc). There is no zeroth century, there is no zeroth mile and there is no zeroth chapter. In case the chapter numbers are not meant be ordinal, then I think it would be odd to call Chapter 3 as fourth chapter.
- hollerith 11mo agoThere is however the zeroth element of a vector in most programming languages.
- zkmon 11mo agoZero is not an ordinal number. There can be a vector element indexed with zero, but it is not "zeroth" element. Book chapter numbers are ordinal numbers.
- vouwfietsman 11mo agoBut what is there to gain with this distinction? Just the convenience of having an ordinal number to say? Rather than saying "chapter 0, chapter 1, chapter 2" one can say "the fourth chapter"? Or is it the fact that the chapter with number 4 has 3 chapters preceding it? On first glance I find this all rather meaningless pedantry.
- oh_my_goodness 11mo agoIf I use ordinal numbers to count, then counting tells me the number of objects. Sometimes I want to know the number of objects. EDIT: Yeah, I don't know why book chapter labels shouldn't start with "0". It seems fine to me. They could use letters instead of numbers for all I care.
- kwa32 11mo ago[dead]
- torben-friis 11mo agoCompletely silly fact: knowing 0 about the guy except that he gave his name to the famous algorithm, I had somehow assumed he was Indian. Weird to see a white Dutchman in the picture.
- porridgeraisin 11mo ago(Curious) How did Edsger Dijkstra sound like an indian name to you?
- torben-friis 11mo agoI knew an Indian woman named Divya, perhaps my mind thought it looked similar in print? I don’t think it was ever a conscious decision. It’s similar to how I always pictured Jane Austen as a sarcastic woman in her forties while reading her books, but she wrote her most famous works being borderline a teenager. Your mind just fills things up I guess.
- wowczarek 11mo agoAll comes down to some degree of "linguistic intuition", that one acquires from not necessarily speaking foreign languages, but some exposure and proximity to them. My bet is that most Europeans, faced with "Edsger Dijkstra" would have instinctively pointed towards the general direction of Holland and upwards.
- torben-friis 11mo agoFunnily enough, I’m western European, have visited the Netherlands several times and I’m friends with some Dutch people. No idea how this slipped by for so long.
- Scarblac 11mo agoDutch is the only language I know that uses the "ij" digraph, where other languages write "ei", "ay", maybe "y".
- commandersaki 11mo agoI really enjoy having him recall the design of a computer with the first interrupt: https://www.cs.tufts.edu/comp/150FP/archive/edsger-dijkstra/ewd1303.pdf https://www.cs.tufts.edu/comp/150FP/archive/edsger-dijkstra/...
- wara23arish 11mo agoI was taught at UT. Apparently Djikstra would make his students take exams with pens instead of pencils. Less likely to make mistakes if you can’t erase
- huijzer 11mo ago> As a result of the educational trend away from intellectual discipline, the last decades have shown in the Western world a sharp decline of people's mastery of their own language Dijkstra already wrote this in the 80s and today many teachers still complain about this fact. I also know that, at least in the Netherlands, the curriculum is judged based on the percentage of students that pass. If too few students pass, then the material is made easier (never harder!), so you can imagine what happens if this process continued for half a century by now.
- kebman 11mo agoSouth Africa is a sad example of this. And so systems are deteriorating country-wide.
- webdevver 11mo agothe only meaningful contribution this guy made was his prose. certainly a talented constructor of sentences, i could never write as precisely as him. but as far as meaningful technical contributions, i struggle to find anything. his path search algorithm, no offence, is self-evident. for all the disdain he appears to have had for (what we now call) the 'move fast and break things' style of engineering/science, they were the ones that gave us everything today. you innovate by running experiments, not philosophising and writing proofs. in retrospect he probably should have stayed on his initial discipline, theoretical physics.
- rramadass 11mo agoThe most charitable thing i can say about your comment is; who had a fashion of calling every thing "odd" that was beyond his comprehension, and thus lived amid an absolute legion of "oddities." -- from "The Purloined Letter" by Edgar Allan Poe. To dismiss you/your comment; “Mediocrity knows nothing higher than Itself; but Talent instantly recognizes Genius.” -- from "The Valley of Fear" by Arthur Conan Doyle. To deflate your claim of Dijkstra's Algorithm being "self-evident"; Students Struggle with Concepts in Dijkstra's Algorithm -- https://dl.acm.org/doi/fullHtml/10.1145/3632620.3671096 https://dl.acm.org/doi/fullHtml/10.1145/3632620.3671096 Edsger Dijkstra contributed to; 1) Algol60 language/compiler 2) THE Operating System 3) Graph Algorithms (shortest-path etc.) 4) Concurrent Algorithms (semaphores, CSP etc.) 5) Distributed Algorithms (dining philosophers etc.) 6) Fault-Tolerant Computing (which he called "Self-Stabilizing Systems") 7) Programming Language Design (GCL etc.) 8) Structured Programming Techniques. 9) Program Correctness Methodologies based on Predicate Calculus to derive Programs (weakest-precondition etc.) 10) Essays giving insights into "How to Think and Reason Systematically" using commonsense and mathematical Tools.
- capestart 11mo agoAlways fascinating how Dijkstra’s writings feel just as relevant today. His clarity of thought on simplicity and structure in code still sets a standard we rarely reach.