It has been a long time since I used APL (in college)
We had APL terminals which had APL keys and would print APL characters. It was significantly more immersive that way.
Looking at this letter i start to vaguely recall things.
Decades later, I recall the output operator, not shown anywhere here.
⎕←<something>
which would print whatever <something> was. (was I misremembering?)
I do recall using matrix operations in a similar way to the math classes I was taking at the same time. matrix multiplication, inversion, dot products seemed to be more "math oriented" than other computer languages.
In other computer languages, you had to adapt to the language. For example:
x = x + 1
y = mx + b
in these two statements, one only makes sense in math class, one only makes sense to increment a variable in a computer language.
adregan 13 hours ago [-]
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.
mlajtos 13 hours ago [-]
> 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."
“This quote keeps on showing up out of context. […]”
tristramb 12 hours ago [-]
"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.
mlajtos 8 hours ago [-]
Interesting. Bird-Meertens formalism? That was directly influenced by APL. In the broader scope — algebra of programs — Dijkstra heavily disliked Backus’ FP.
shrubble 13 hours ago [-]
I wonder if EWD would have had the same opinion if he were alive today, with every Unicode font having the APL characters immediately available on the screen.
Did he feel the language design was bad, or would having TTF fonts being able to show "rho", "iota", "grade up" have removed one or more of his objections?
mlajtos 13 hours ago [-]
Oh, he would definitely hate it even more. It was too high-level for his taste.
What I would like to know is how he would bend Algol 60 if he had tablet with pencil that could evaluate it in real-time.
Jtsummers 12 hours ago [-]
> It was too high-level for his taste.
That's a pretty silly claim. Is Haskell not high-level?
Someone happy to see Haskell used in freshman CS education is not someone who opposes high-level languages.
mlajtos 8 hours ago [-]
Very interesting flip! For much of his life, Dijkstra opposed functional programming. He even more strongly criticised FP from Backus and APL from Iverson, which are both very funcional/function-level.
As he said, Java is a mess and any sensible person would oppose the switch from Haskell to Java. I am almost sure he never used any of them. Might have read about them, but highly doubt he run any on computer.
As for the high-level status of Haskell and APL — both languages are very mathematical. Haskell goes very into the abstract realm of computation, while APL tackles very raw form of computation. Semantically, Haskell is way more high-level. In terms of economy of notation and unified concepts, APL has no match.
The most used (by me) Vector package has boxed (efficient) and unboxed (J-like) arrays. With these arrays having map, fold, scan, fromList/toList, zip and unzip combinators, one can have as terse (in the operator count sense) notation as one wishes for.
Jtsummers 8 hours ago [-]
> Might have read about them, but highly doubt he run any on computer.
Nice goalpost shifting. Anyways, you also neglected that he was a major proponent of structured programming and the author of the letter "Go To Statement Considered Harmful". The idea that he would oppose high-level languages is not based in reality. Specific languages, yes, but not because they are high-level as your silly original comment claimed.
Dijkstra was highly influential in theoretical (proofs, algos) and practical (spec&compiler for Algol60) compuper science. But in reality he used his fountain pen disproportionately more than the computer.
8 hours ago [-]
Almondsetat 14 hours ago [-]
One can appreaciate striving for simplicity (a programming language that can be taught and explained with pen and paper), but one must also consider that computers are meta-devices.
Before computers, we could write things only on paper, either with our hands or a typewriter. So, naturally, when computers came about, the way of thinking about programming was very text-driven, with an emphasis on what a typewriter could represent.
But then, code could be written directly with computers, opening up more typesetting possibilities thanks to keyboards not being bound anymore by the mechanical limitations of typewriters. You could add keys and combinations to your heart's desire, and they would be natively digital and unlimited.
Now, with graphics, both 2D and 3D, and a myriad or other HIDs, shouldn't we try to make another cognitive jump?
mlochbaum 14 hours ago [-]
It's very strange to see handwriting lumped in with typewriting, to be described as limited relative to screens! Iverson notation was a 2D format (both in handwriting and typeset publications) making use of superscripts, subscripts, and vertical stacking like mathematics. It was linearized to allow for computer execution, but the designers described this as making the language more general rather than less:
> The practical objective of linearizing the typography also led to increased uniformity and generality. It led to the present bracketed form of indexing, which removes the rank limitation on arrays imposed by use of superscripts and subscripts.
I think this is more true than they realized at that time. The paper describes the outer product, which in Iverson notation was written as a function with a superscript ∘ and in APL became ∘. followed by the function. In both cases only primitive functions were allowed, that is, single glyphs. However, APL's notation easily extends to any function used in an outer product, no matter how long. But Iverson notation would have you write it in the lower half of the line, which would quickly start to look bad.
le-mark 13 hours ago [-]
All those things can be specified in text. Fortress was a language that had the facility to use mathematical notation. Turned out to be not so compelling iirc.
We might also consider letting the language semantics invade the editor. Hazel integrates its parser into the text editor, so rather than getting a red squiggly when you break a rule you're just unable to break the rules. It represents code you haven't yet written as a "typed hole" so instead of
1 +
The + would cause the following to appear
1 + <int>
where <int> is the typed hole, reminding you to put an expression there which is an integer. It's perhaps a smaller leap than using shapes and space, but it's one I'd like to feel out a bit sometime.
WillAdams 11 hours ago [-]
I've long been fascinated by this question, probably spurred on by having read Hermann Hesse's _The Glass Bead Game_ (originally published as _Magister Ludi_) when I was impressionably young.
The problem of course is: ``What does an algorithm look like?''
Depicting one usually directs one into flowchart territory, and interestingly efforts at that style of programming often strive for simplicity, e.g., the straight-down preference from Raptor or Drakon --- systems which do not implement that often become a visual metaphor for ``spaghetti code'':
As a person who uses: https://www.blockscad3d.com/editor/ and https://github.com/derkork/openscad-graph-editor a fair bit, and needs to get Ryven up-and-running again (or to fix the OpenSCAD layer in his current project or try https://www.nodebox.net/ again), this is something I'd really like to see someone be successful with, but the most successful exemplar would be Scratch, which I've never seen described as innovatively expressive --- I'd love to see such a tool which could make a traditional graphical application.
VorpalWay 14 hours ago [-]
We do have syntax highlighting these days. And our editors work like hypertext, where I can go to definitions, find usages, get inheritance hierarchies etc. Quite a ways from your suggestion, but also a few steps removed from a type writer.
I think any such leap would have to be a really big one to catch on though, due to inertia. Colorforth is not exactly popular, and I can't think of any other examples.
jmalicki 13 hours ago [-]
With LLMs you can write your code by hand drawing a diagram on a touch screen.
ModernMech 13 hours ago [-]
This has been possible since Sketchpad in 1963.
jmalicki 3 hours ago [-]
Can sketchpad do this? (relatively simple, but showing what an LLM can do with a sketch with very little prompting, full transcript of further typing included)
Yes, but there don't seem to be any current implementations which are more than academic exercises (I'd love to be wrong about that and be pointed to something which I could try).
ModernMech 11 hours ago [-]
The reason for this is that we've been trying to draw code by hand since 1963 and it doesn't really work out well except in limited domains. Maybe it'll work better with LLMs tho, I guess we'll see.
WillAdams 11 hours ago [-]
Not sure what an LLM brings to the table here.
I've been trying to learn traditional CAD, and found this observation enticing:
>Parametric CAD, in my view, is a perfect example of "visual programming", you have variables, iteration/patterning reducing repetition, composability of objects/sketches again reducing repetition, modularity of design though a hierarchy of assemblies. The alignment between programming principles and CAD modelling principles, while not immediately obvious, are very much there. An elegantly designed CAD model is just as beautiful (in its construction) as elegantly written code.
Obviously, it is fitting that a visual product is amenable to a visual approach/solution, so my question is, what programming environment for general purpose is most like to a parametric CAD system?
ModernMech 10 hours ago [-]
Yeah I think CAD is a perfect domain for this kind of thing, and IIRC that was one of the original target applications for Sketchpad, where Sutherland demonstrated constraint-based bridge design where the constraints were sketched in.
I agree I don't think LLMs really change the equation much.
For another look at where drawing-based programming has gone, see Dynamicland by Bret Victor. No LLMs required.
segmondy 14 hours ago [-]
We already did, it's natural language. Talk to your computer and get code, aka vibe coding.
Almondsetat 13 hours ago [-]
So humans just have a mouth and that's it? Language is the be-all-end-all of how humans can interact with the world and express themselves?
14 hours ago [-]
boje 11 hours ago [-]
APL suffers from the same apparent problems as Perl: They have friction coming from an unconventional syntax that's hard to understand without knowing the language beforehand, and when faced with competition, people went with the path of least resistance.
* Out of all people, and especially in the newer generations, it is increasingly uncommon to find someone with a desktop or even a laptop.
* Out of them, very few decide to do anything with it besides checking mail, social media, the web or play games.
* Out of them, very few decide to learn a programming language.
* Out of them, very few decide to learn anything besides Javascript or maybe Python.
* Out of them, very few decide to learn anything besides Java/C#/C++, learn algorithms, or learn tools like Vim or Emacs.
* Out of them, very few decide to learn anything besides Rust/Go/Haskell/Lisp/Scheme or even Fortran.
* Out of them, very few decide to learn a language with an alien, symbolic notation that resembles a code golfing language, and which, too, requires them to possibly learn a completely new keyboard layout to type with proificiency.
Not trying to discredit APL's contributions to functional programming and the like, but from the letter, it is pretty obvious Djkstra had little respect for friction. Not saying that he's right to dismiss it outright, though.
boje 10 hours ago [-]
Now that I think about it, and I don't know if this exists yet, but APL would probably very much benefit from having a Scratch-like or Factorio-like visual editor paired with a touch interface. You would drag and drop symbols, and long-pressing a symbol would popup its definition.
You could also probably do nice things with the symbol "icon blocks" themselves, and provide them with colors or different visualizations to convey different contextual meanings.
lokedhs 10 hours ago [-]
That wouldn't help much. People who don't use these languages doesn't understand that what makes the language different isn't the syntax. There are plenty of dialects that use English words instead of symbols (check out Ivy by Ron Pike for example).
The difference is much deeper, but the best way to understand it is probably to check out an introduction (there is a lot on youtube).
I'd personally be happy to give an introduction to anyone willing to listen, but this comment field is not the place to do it.
As if medieval math notation was not weird enough, people decided to invent APL to be even more bizarre. As a proud Perl5 dev, I totally don't buy it. Neither do I buy into Raku's brave use of all possible Unicode symbols. Perhaps I'm ageing.
WillAdams 4 hours ago [-]
What do you mean by "Medieval math notation"? Wasn't it mostly just textual descriptions? (which arguably would not be too far away from the natural language being used to interact with LLMs)
It wasn't until Thomas Harriot's _Artis Analyticae Praxis_ was published that one got anything resembling consistent math notation as folks today would expect, and isn't the symbology used for APL just a formalization and/or extension of prevailing math symbol usage? (which was the point of the whole thing?)
I wrote a lot of APL for my undergraduate Senior Project in 1978/1979.
I really enjoyed it because it was fun. You could do an incredible amount of work in a single line of code.
The only problem was, that line would then be almost impossible to read and understand! It could easily be used as a "write-only" language even without a separate obfuscation step.
When I become a professional programmer right after college, I never used it again, and learned to write code that was readable above all else.
WillAdams 11 hours ago [-]
Is this an instance of the maxim that one has to be twice as smart to debug code as to write it?
Are you aware of any APL programs written using Literate Programming?
Apparently there was at least one attempt:
Lee J. Dickey. Literate programming in APL and APLWEB. APL
Quote Quad, 23(4):11–??, June 1, 1993. CODEN APLQD9. ISSN 0163-6006.
Perhaps that additional layer of documentation would help? (APL is a language I've always been fascinated by, but never had occasion to more than superficially examine)
FartinMowler 8 hours ago [-]
Yup, impossible to read. I was a paid APL coder in the early 80's. We called it WORN: Write Once, Read Never.
kstrauser 2 hours ago [-]
That's what we called my friend's Jaz drive, which had a habit of dying.
APL was the first language to have operators for "do this to all that stuff".
They were headed for functional programming. But the syntax was too weird.
Hendrikto 14 hours ago [-]
Ironically, I think the examples given in the post validate Dijkstra’s points, instead of disproving them, as the author intended.
bear8642 14 hours ago [-]
How so?
I'm struggling to see how Roger's manipulation of the expressions without executing each line validates Dijkstra's point...
empath75 13 hours ago [-]
"This is easy to understand, see:"
5 lines of completely inscrutable symbols follow.
If you are expecting someone to learn a completely new notational language before you can communicate a basic algorithm, you have gone wrong somewhere.
You could also similarly write down merge sort in pure lambda calculus, which is interesting as an exercise, but not especially useful as working code, or as a way to explain how merge sort works.
mlajtos 13 hours ago [-]
Dijkstra's go-to language (pun intended) was Algol 60 (& Pascal) – everything else was shit in his view. Some of his comments:
FORTRAN — "an infantile disorder"
COBOL — "the use of COBOL cripples the mind"
BASIC — students exposed to it are "mentally mutilated beyond hope of regeneration"
PL/I — "the fatal disease"
APL — "a mistake, carried through to perfection"
He liked his languages and programs to be easily traceable with pen & paper. He always wrote programs on the paper (and proved correctness) and only then into computer. REPL-driven development (what APL pioneered) was a foreign concept to him. He would be so appalled by LLM code generation.
ilayn 8 hours ago [-]
Read the sources carefully. Fortran quote is not his; he quoted it. Also remember that he was talking about pre-Fortran77 era. F77 tried to fix some of the criticisms though did not succeed fully. Here is a nice dig-in about the quote https://limited.systems/articles/dijkstra-fortran/
Another note to remember that John Backus, the team lead of the Fortran gang, was in the Algol committee. So these folks knew what they are talking about and spoke to each other periodically. Even John Backus said, Fortran is not the final interface that we should have.
It keeps spinning in the programming circles half-quoted versions of half-baked quotes from original sources. These pioneers, even when they disagreed, had pretty precise arguments and very rarely feeling the feelies.
tristramb 11 hours ago [-]
He liked to be able to reason about programs without running them.
He preferred simpler languages because they contain less irrelevant noise which got in the way of that.
esquivalience 10 hours ago [-]
> Your writings made me wonder in which discipline you got your doctor’s degree.
Is this a horrible sideswipe or do people think it was intended frankly?
layer8 6 hours ago [-]
I would assume it was intended humorously.
12 hours ago [-]
wood_spirit 14 hours ago [-]
The opening paragraphs about how people enamoured by a shiny gadget will overlook a terrible interface brings immediately to my mind the modern day LLMs.
asdfasgasdgasdg 14 hours ago [-]
I don't find this observation of Djikstra's to be one of his best. If there is a gadget that does a thing that no other gadget does, what does it even mean for the interface to be "terrible?" How can you even know if the interface is terrible, given that a better one has yet to be invented? Maybe the interface is as good as it can be for the tool in question.
I also don't love your mapping of this observation onto modern LLMs. The interface of an LLM is natural language text, along with some files written in plain text or markdown. Can it be improved? Undoubtedly! But as a baseline, it doesn't seem half bad to me. If it is so terrible, it should not be hard to propose an interface that will be significantly more productive. Can you?
empath75 13 hours ago [-]
> If there is a gadget that does a thing that no other gadget does, what does it even mean for the interface to be "terrible?" How can you even know if the interface is terrible, given that a better one has yet to be invented? Maybe the interface is as good as it can be for the tool in question.
That's just a taste judgement, and you can decide the interface sucks on a one of a kind item quite easily, and people often do.
dsecurity49 14 hours ago [-]
[dead]
Rendered at 04:32:29 GMT+0000 (Coordinated Universal Time) with Vercel.
We had APL terminals which had APL keys and would print APL characters. It was significantly more immersive that way.
Looking at this letter i start to vaguely recall things.
Decades later, I recall the output operator, not shown anywhere here.
⎕←<something>
which would print whatever <something> was. (was I misremembering?)
I do recall using matrix operations in a similar way to the math classes I was taking at the same time. matrix multiplication, inversion, dot products seemed to be more "math oriented" than other computer languages.
In other computer languages, you had to adapt to the language. For example:
in these two statements, one only makes sense in math class, one only makes sense to increment a variable in a computer language.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.
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."
“This quote keeps on showing up out of context. […]”
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.
Did he feel the language design was bad, or would having TTF fonts being able to show "rho", "iota", "grade up" have removed one or more of his objections?
What I would like to know is how he would bend Algol 60 if he had tablet with pencil that could evaluate it in real-time.
That's a pretty silly claim. Is Haskell not high-level?
https://www.cs.utexas.edu/~EWD/transcriptions/OtherDocs/Hask...
Someone happy to see Haskell used in freshman CS education is not someone who opposes high-level languages.
As he said, Java is a mess and any sensible person would oppose the switch from Haskell to Java. I am almost sure he never used any of them. Might have read about them, but highly doubt he run any on computer.
As for the high-level status of Haskell and APL — both languages are very mathematical. Haskell goes very into the abstract realm of computation, while APL tackles very raw form of computation. Semantically, Haskell is way more high-level. In terms of economy of notation and unified concepts, APL has no match.
[1] https://stackoverflow.com/questions/6622524/why-is-haskell-s...
Haskell have array-oriented programming embedded DSLs, like REPA [2] and Accelerate [3].
[2] https://hackage.haskell.org/package/repa
[3] https://hackage.haskell.org/package/accelerate
The most used (by me) Vector package has boxed (efficient) and unboxed (J-like) arrays. With these arrays having map, fold, scan, fromList/toList, zip and unzip combinators, one can have as terse (in the operator count sense) notation as one wishes for.
Nice goalpost shifting. Anyways, you also neglected that he was a major proponent of structured programming and the author of the letter "Go To Statement Considered Harmful". The idea that he would oppose high-level languages is not based in reality. Specific languages, yes, but not because they are high-level as your silly original comment claimed.
Dijkstra was highly influential in theoretical (proofs, algos) and practical (spec&compiler for Algol60) compuper science. But in reality he used his fountain pen disproportionately more than the computer.
Before computers, we could write things only on paper, either with our hands or a typewriter. So, naturally, when computers came about, the way of thinking about programming was very text-driven, with an emphasis on what a typewriter could represent.
But then, code could be written directly with computers, opening up more typesetting possibilities thanks to keyboards not being bound anymore by the mechanical limitations of typewriters. You could add keys and combinations to your heart's desire, and they would be natively digital and unlimited.
Now, with graphics, both 2D and 3D, and a myriad or other HIDs, shouldn't we try to make another cognitive jump?
> The practical objective of linearizing the typography also led to increased uniformity and generality. It led to the present bracketed form of indexing, which removes the rank limitation on arrays imposed by use of superscripts and subscripts.
(https://www.jsoftware.com/papers/APLDesign.htm)
I think this is more true than they realized at that time. The paper describes the outer product, which in Iverson notation was written as a function with a superscript ∘ and in APL became ∘. followed by the function. In both cases only primitive functions were allowed, that is, single glyphs. However, APL's notation easily extends to any function used in an outer product, no matter how long. But Iverson notation would have you write it in the lower half of the line, which would quickly start to look bad.
https://en.wikipedia.org/wiki/Fortress_(programming_language...
The problem of course is: ``What does an algorithm look like?''
Depicting one usually directs one into flowchart territory, and interestingly efforts at that style of programming often strive for simplicity, e.g., the straight-down preference from Raptor or Drakon --- systems which do not implement that often become a visual metaphor for ``spaghetti code'':
https://blueprintsfromhell.tumblr.com/
https://scriptsofanotherdimension.tumblr.com/
As a person who uses: https://www.blockscad3d.com/editor/ and https://github.com/derkork/openscad-graph-editor a fair bit, and needs to get Ryven up-and-running again (or to fix the OpenSCAD layer in his current project or try https://www.nodebox.net/ again), this is something I'd really like to see someone be successful with, but the most successful exemplar would be Scratch, which I've never seen described as innovatively expressive --- I'd love to see such a tool which could make a traditional graphical application.
I think any such leap would have to be a really big one to catch on though, due to inertia. Colorforth is not exactly popular, and I can't think of any other examples.
https://jmalicki.github.io/sp500-chart/
I've been trying to learn traditional CAD, and found this observation enticing:
https://news.ycombinator.com/item?id=31471109
>Parametric CAD, in my view, is a perfect example of "visual programming", you have variables, iteration/patterning reducing repetition, composability of objects/sketches again reducing repetition, modularity of design though a hierarchy of assemblies. The alignment between programming principles and CAD modelling principles, while not immediately obvious, are very much there. An elegantly designed CAD model is just as beautiful (in its construction) as elegantly written code.
Obviously, it is fitting that a visual product is amenable to a visual approach/solution, so my question is, what programming environment for general purpose is most like to a parametric CAD system?
I agree I don't think LLMs really change the equation much.
For another look at where drawing-based programming has gone, see Dynamicland by Bret Victor. No LLMs required.
* Out of all people, and especially in the newer generations, it is increasingly uncommon to find someone with a desktop or even a laptop.
* Out of them, very few decide to do anything with it besides checking mail, social media, the web or play games.
* Out of them, very few decide to learn a programming language.
* Out of them, very few decide to learn anything besides Javascript or maybe Python.
* Out of them, very few decide to learn anything besides Java/C#/C++, learn algorithms, or learn tools like Vim or Emacs.
* Out of them, very few decide to learn anything besides Rust/Go/Haskell/Lisp/Scheme or even Fortran.
* Out of them, very few decide to learn a language with an alien, symbolic notation that resembles a code golfing language, and which, too, requires them to possibly learn a completely new keyboard layout to type with proificiency.
Not trying to discredit APL's contributions to functional programming and the like, but from the letter, it is pretty obvious Djkstra had little respect for friction. Not saying that he's right to dismiss it outright, though.
You could also probably do nice things with the symbol "icon blocks" themselves, and provide them with colors or different visualizations to convey different contextual meanings.
The difference is much deeper, but the best way to understand it is probably to check out an introduction (there is a lot on youtube).
I'd personally be happy to give an introduction to anyone willing to listen, but this comment field is not the place to do it.
It naturally trains your memory as you use it. Definitely a language of choice for getting into array languages in my opinion.
https://www.reddit.com/r/apljk/comments/uccbd6/russ_cox_solv...
It wasn't until Thomas Harriot's _Artis Analyticae Praxis_ was published that one got anything resembling consistent math notation as folks today would expect, and isn't the symbology used for APL just a formalization and/or extension of prevailing math symbol usage? (which was the point of the whole thing?)
https://t3x.org/klong/
Intro:
https://t3x.org/klong/klong-intro.txt.html
Quick ref:
https://t3x.org/klong/klong-qref.txt.html
Intro to statistics with Klong
https://t3x.org/klong-stat/
I really enjoyed it because it was fun. You could do an incredible amount of work in a single line of code.
The only problem was, that line would then be almost impossible to read and understand! It could easily be used as a "write-only" language even without a separate obfuscation step.
When I become a professional programmer right after college, I never used it again, and learned to write code that was readable above all else.
Are you aware of any APL programs written using Literate Programming?
Apparently there was at least one attempt:
Lee J. Dickey. Literate programming in APL and APLWEB. APL Quote Quad, 23(4):11–??, June 1, 1993. CODEN APLQD9. ISSN 0163-6006.
Perhaps that additional layer of documentation would help? (APL is a language I've always been fascinated by, but never had occasion to more than superficially examine)
I'm struggling to see how Roger's manipulation of the expressions without executing each line validates Dijkstra's point...
5 lines of completely inscrutable symbols follow.
If you are expecting someone to learn a completely new notational language before you can communicate a basic algorithm, you have gone wrong somewhere.
You could also similarly write down merge sort in pure lambda calculus, which is interesting as an exercise, but not especially useful as working code, or as a way to explain how merge sort works.
FORTRAN — "an infantile disorder"
COBOL — "the use of COBOL cripples the mind"
BASIC — students exposed to it are "mentally mutilated beyond hope of regeneration"
PL/I — "the fatal disease"
APL — "a mistake, carried through to perfection"
He liked his languages and programs to be easily traceable with pen & paper. He always wrote programs on the paper (and proved correctness) and only then into computer. REPL-driven development (what APL pioneered) was a foreign concept to him. He would be so appalled by LLM code generation.
Another note to remember that John Backus, the team lead of the Fortran gang, was in the Algol committee. So these folks knew what they are talking about and spoke to each other periodically. Even John Backus said, Fortran is not the final interface that we should have.
It keeps spinning in the programming circles half-quoted versions of half-baked quotes from original sources. These pioneers, even when they disagreed, had pretty precise arguments and very rarely feeling the feelies.
Is this a horrible sideswipe or do people think it was intended frankly?
I also don't love your mapping of this observation onto modern LLMs. The interface of an LLM is natural language text, along with some files written in plain text or markdown. Can it be improved? Undoubtedly! But as a baseline, it doesn't seem half bad to me. If it is so terrible, it should not be hard to propose an interface that will be significantly more productive. Can you?
That's just a taste judgement, and you can decide the interface sucks on a one of a kind item quite easily, and people often do.