In this letter, Dijkstra talks about readability and maintainability in a time where those topics were rarely talked about (1968). This letter was one of the main causes why modern programmers don’t have to trouble themselves with goto statements. Older languages like Java and C# still have a (discouraged) goto statement, because they (mindlessly) copied it from C, which (mindlessly) copied it from Assembly, but more modern languages like Swift and Kotlin don’t even have a goto statement anymore.

  • atzanteol
    link
    fedilink
    English
    arrow-up
    7
    ·
    edit-2
    7 months ago

    Perhaps it’s because at that time people would be running the programs in their heads before submitting them for processing, so they tended to use more of a computer scientist mindset - whereas now we’re more likely to use test cases to convince ourselves that code is correct.

    This is 1968. You didn’t have an IDE or debugger. Your editor was likely pretty terrible too (if you had one). You may have still been using punch cards. It’s possible the only output you got from your program was printed on green-bar paper.

    “Back in the day” it wasn’t uncommon to sit with a printout of your code and manually walk though it keeping state with a pencil. Being able to keep track of things in your head was very important.

    GOTO existed in part for performance purposes. When your CPU clock is measured in megahertz, your RAM is measured in kilobytes and your compilers don’t do function in-lining it’s quicker and cheaper to just move the program pointer than it is to push a bunch of variables on a stack and jump to another location, then pop things off the stack when you’re done (especially if you’re calling your function inside a loop). Even when I was programming back in the '80s there was a sense that “function calls can be expensive”. It wasn’t uncommon then to manually un-roll loops or in-line code. Compilers are much more sophisticated today and CPUs are so much faster that 99% of the time you don’t need to think about now.

    Oddly enough the arguments against GOTO are less important today as we have much better development tools available to us. Though I certainly won’t recommend it over better flow-control structures.

    • 0x0@programming.dev
      link
      fedilink
      arrow-up
      3
      ·
      7 months ago

      When your CPU clock is measured in megahertz, your RAM is measured in kilobytes

      Ah yes, the good ol’ days when developers programmed for efficiency.

      • atzanteol
        link
        fedilink
        English
        arrow-up
        3
        ·
        7 months ago

        Mostly because they had to. Writing efficient code and easy-to-read code are often at odds with each other. I like being able to create lots of functions that can be called from a loop without needing to worry too much about function call overhead. I can prioritize readability for some time before I ever need to worry about performance.

          • atzanteol
            link
            fedilink
            English
            arrow-up
            2
            ·
            7 months ago

            People have been complaining about this exact thing forever. Even back when “people cared about efficiency”.

          • BatmanAoD@programming.dev
            link
            fedilink
            arrow-up
            1
            ·
            7 months ago

            Does the catchphrase “blazing fast” ring any bells? Some people care.

            (Arguably that’s just the pendulum swinging the other way; Ruby, Python, and Java ruled the software world for a while, and I think that’s a large part of why the Go and Rust communities make such a big deal about speed.)