[HN Gopher] The Manuscripts of Edsger W. Dijkstra
       ___________________________________________________________________
        
       The Manuscripts of Edsger W. Dijkstra
        
       Author : nathan-barry
       Score  : 164 points
       Date   : 2025-11-09 15:27 UTC (7 hours ago)
        
 (HTM) web link (www.cs.utexas.edu)
 (TXT) w3m dump (www.cs.utexas.edu)
        
       | peterkelly wrote:
       | The 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...
        
         | sfn42 wrote:
         | I 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 wrote:
           | [flagged]
        
             | f1shy wrote:
             | IMHO you are going way way way to far. Far in the weeds.
        
               | BigGreenJorts wrote:
               | Nah, 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 wrote:
           | It is not _obviously_ correct. The unstated premise is that
           | programming is similar to writing mathematical proofs.
        
         | f1shy wrote:
         | This is gold! Thanks.
        
         | dilawar wrote:
         | Thanks for the link. Great read.
         | 
         | Apparently Dijesktra loved using em-dash!
        
       | bobsh wrote:
       | This 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 wrote:
         | I'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 wrote:
           | I 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...):
           | 
           | "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!)"
        
       | quantum_state wrote:
       | Truly 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 wrote:
         | Since 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 wrote:
       | Something which I occasionally link to, is this:
       | <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 wrote:
         | While 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.
        
         | ufo wrote:
         | That particular EWD is one of my pet peeves, because of how it
         | always pops up in discussion about array indexing. There are
         | several situations where 1-based indexing is better, but which
         | Dijkstra doesn't mention. For instance, one-based is much
         | better for iterating backwards.
         | 
         | I think a compelling argument can be made that 0-based is
         | better for offsets and 1-based is better for indexes, and that
         | we should not think of both as the same thing.
         | https://hisham.hm/2021/01/18/again-on-0-based-vs-1-based-ind...
        
           | bazoom42 wrote:
           | And Dijkstras argument is actually quite weak if you read
           | carefully. But he has a certain way of writing which make it
           | seem almost like a mathematical proof. And then he sprinkles
           | some "only smart people agree with me" nerd baiting.
        
           | adrian_b wrote:
           | One-based is not better for iterating backwards.
           | 
           | Zero-based indexing is naturally coupled with using only
           | half-open ranges.
           | 
           | When using zero-based indexing and half-open ranges,
           | accessing an array forwards, backwards or circularly is
           | equally easy.
           | 
           | In this case you can also do like in the language Icon, where
           | non-negative indices access the array forwards, while
           | negative indices access the array backwards (i.e. -1 is the
           | index of the last element of the array, while 0 is the index
           | of the first element).
           | 
           | In languages lacking the Icon feature, you just have to
           | explicitly add the length of the array to the negative index.
           | 
           | There is absolutely no reason to distinguish offsets and
           | indices. The less distinct kinds of things you need to keep
           | in mind, the less chances for errors from using the wrong
           | thing.
        
       | PaulRobinson wrote:
       | I 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 wrote:
         | Astronomy is not named "Telescope Science" though. ;-)
        
           | drob518 wrote:
           | You're only half serious, but this is actually a good point.
        
           | psychoslave wrote:
           | In Europe _Informatics_ is more common than CS.
        
         | GrumpyYoungMan wrote:
         | The 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 wrote:
       | I'm amused at EWD498 - How do we tell truths that might hurt?
       | 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/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 wrote:
         | Dijkstra was so based.
        
       | 4b11b4 wrote:
       | I really enjoyed the this one:
       | 
       | Some meditations on Advanced Programming
       | 
       | 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 wrote:
         | Alas, 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.
        
           | linguae wrote:
           | You brought up something interesting. I believe academic
           | computer science originated from at least three cultures:
           | pure mathematics (Church, Turing, Kleene, Dijkstra),
           | electrical engineering, and psychology (Licklieder). I say
           | "at least" since there may be other cultures I've overlooked.
           | These three cultures have different views on programming: the
           | EE-based culture emphasizes taking full advantage of the
           | underlying hardware, the math-based culture emphasizes proof,
           | and the psychology-based culture emphasizes human factors.
           | 
           | The challenge is reconciling these three views of
           | programming: the holy grail is a programming language that is
           | ergonomic and expressive, yet is also amenable to
           | mathematical reasoning and can be implemented efficiently. I
           | wonder if there is a programming language theory version of
           | the CAP theory in distributed systems, where one compares
           | performance, ease of mathematical reasoning about code, and
           | human factors?
        
           | mrkeen wrote:
           | Your environment is probably not more constrained than this:
           | https://github.com/Copilot-Language/copilot
        
       | OakNinja wrote:
       | I love the timeless "Threats to computer science"
       | 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
        
       | tiu wrote:
       | For 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
       | 
       | [765]: https://www.cs.utexas.edu/~EWD/ewd07xx/EWD765.PDF
        
       | zkmon wrote:
       | Seeing 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 wrote:
         | There is however the zeroth element of a vector in most
         | programming languages.
        
           | zkmon wrote:
           | Zero 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 wrote:
             | But 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 wrote:
               | If 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.
        
               | zkmon wrote:
               | If they use letters instead of numbers, note that letter
               | "A" is the first alphabet, not zeroth alphabet.
        
         | aaaronic wrote:
         | Building floor numbers in at least a few countries I'm aware of
         | start from zero or "G" ( or the local language equivalent for
         | "ground") with 1 being the first story above the ground.
         | 
         | I think you're just biased to think that starting must
         | "naturally" begin with 1.
         | 
         | Zero is just a good a place to start and some people do start
         | counting from zero.
        
           | zkmon wrote:
           | The floor number case arises so because traditionally it is
           | the count of "built" floors. So, ground is technically not a
           | floor in that sense. Also, if the floor indicates a
           | separation (cut) between the living spaces, ground floor can
           | be numbered as zero, just like the start point of a measuring
           | tape is numbered as zero.
        
         | danmaz74 wrote:
         | The reason is that, for an array (or vector), you find the
         | memory position for the i-th element with the base address +
         | i*word_length. And the first element is in the base address -
         | so has index 0.
        
           | Jtsummers wrote:
           | It has memory _offset_ 0, which we use as the array index for
           | convenience so that there 's no distinction between a memory
           | offset-base and the corresponding array index-base. That's
           | what happens when your arrays are barely different from
           | pointers, as in C. If your arrays aren't just a stand-in for
           | raw pointers, then there's little reason to require 0-based
           | indexing. You can use more natural indexes based on your
           | particular application, and many languages do allow arbitrary
           | indices.
        
         | 64718283661 wrote:
         | A zeroeth century sounds reasonable to me.
        
         | moron4hire wrote:
         | Dijkstra wrote a rather famous screed against 1-based indexing,
         | so it's more of an inside joke.
         | 
         | You're also wrong about there being no 0th mile.
         | https://www.atlasobscura.com/places/u-s-route-1-mile-0-sign
        
         | griffzhowl wrote:
         | Usually the chapter 0 is preliminary or prerequisite material.
         | It makes sense in an obvious and intuitive way if you want an
         | ordinal "before the first", even if that sense isn't a rigorous
         | mathematical one (although I think there's no problem with it).
         | 
         | I guess the practice was influenced by computer science - I
         | don't know of an example that precedes it, but one fairly early
         | one I've found is Bishop and Goldberg's _Tensor Analysis on
         | Manifolds_ from 1968, with a chapter 0 on set theory and
         | topology. Back then the authors felt the need to justify their
         | numbering in the preface:
         | 
         | "The initial chapter has been numbered 0 because it logically
         | precedes the main topics"
         | 
         | Quite straightforward.
         | 
         | There's also the "zeroth law of thermodynamics", which was
         | explicitly identified long after the first, second, and third
         | laws, but was felt more primary or basic, hence the need for an
         | "ordinal before the first"
        
           | zkmon wrote:
           | Hopefully they don't discover another more fundamental law,
           | to be called as "minus oneth" law
        
         | asimpletune wrote:
         | If you're at a corner and someone asks for directions, you say
         | "three blocks that way". That means three blocks starting from
         | here.
         | 
         | Then what do you call "here"?
         | 
         | The name for where you start from in this scenario is usually
         | not required because it's obvious what you mean and everyone
         | understands the first block means you have to first walk a
         | block, not that where you start is the first block.
         | 
         | So in that sense yes we have a zeroth chapter. That's when
         | you're at the beginning of the first one but haven't read all
         | the way.
        
           | oh_my_goodness wrote:
           | Folks ... cardinal and ordinal numbers both have "just so"
           | stories to support them. We're unlikely to eliminate either
           | one of them today.
        
           | zkmon wrote:
           | "here" is definitely not a zeroth block. As soon you start
           | walking, you are in the first block. However, if you are
           | numbering the separations (cuts) between the blocks, you can
           | number that "here" as zero.
        
             | asimpletune wrote:
             | Ok as soon as you start walking your are in the first
             | block, I agree. So then where are you before that? What
             | block were you at before you started moving, when you were
             | giving directions?
             | 
             | What is the name of the block from which you left to enter
             | the first block? Before you started walking I mean.
             | 
             | And mustn't that block be before that other first? When we
             | move from where we start we count up, so then mustn't an
             | earlier block be counting down? Counting down would mean a
             | number smaller than one.
             | 
             | And are blocks not counted in units, as whole numbers?
             | 
             | So would it not be the case that one block less than 1 must
             | be by necessity the zeroth block?
             | 
             | In other words if you agree that "as soon as you start
             | walking, you are in the first block", then you must also
             | agree that before you left you began in the zeroth block.
             | 
             | How else could it be interpreted?
        
               | zkmon wrote:
               | Before starting to walk, you were at the start of the
               | first block, not at zeroth block. There is no block prior
               | to first block. Otherwise that block would be called as
               | first block.
               | 
               | Think of jogging on a road. When you are at the beginning
               | of the road, you are at the start of the first mile, not
               | in the zeroth mile. It doesn't have one more mile prior
               | to first mile.
        
         | lionkor wrote:
         | The first element in a collection at address 15 is at address
         | 15. The offset of an element from the start is addr-start, so
         | 15-15=0 for the first, 16-15=1 for the second, etc.
         | 
         | that's why we start from 0, not because of voltages, at least
         | in compsci.
        
           | zkmon wrote:
           | This is all mostly about cuts and spans in a continuum. Cuts
           | can be numbered starting with zero, but spans can't be. Book
           | chapters are spans of content.
        
       | kace91 wrote:
       | Completely 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 wrote:
         | (Curious) How did Edsger Dijkstra sound like an indian name to
         | you?
        
           | kace91 wrote:
           | I 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 wrote:
         | All 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.
        
       | commandersaki wrote:
       | I really enjoy having him recall the design of a computer with
       | the first interrupt:
       | https://www.cs.tufts.edu/comp/150FP/archive/edsger-dijkstra/...
        
       | wara23arish wrote:
       | I 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 wrote:
       | > 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.
        
       | webdevver wrote:
       | the 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.
        
       ___________________________________________________________________
       (page generated 2025-11-09 23:00 UTC)