Edsger W. Dijkstra: Difference between revisions

Jump to navigation Jump to search
3 bytes removed ,  19:24, 10 November 2019
m
Miraheze>Marshall
Miraheze>Marshall
Line 60: Line 60:
== APL by Dijkstra's criteria ==
== APL by Dijkstra's criteria ==


While Dijkstra believed that APL failed as a language for the development and communication of mathematical ideas, many APLers have disputed this idea and expressed confusion as to how he arrived at this viewpoint.<ref>J forums. [http://www.jsoftware.com/pipermail/chat/2007-November/000633.html "why did Dijkstra dislike APL so much?"]</ref> Array programmers have argued that APL, designed as a mathematical notation, is one of the best embodiments of Dijkstra's goals for programming languages, and some have attributed his dislike for the language with a lack of familiarity or understanding. In particular, examples of the use of APL and J in proofs include:
While Dijkstra believed that APL failed as a language for the development and communication of mathematical ideas, many APLers have disputed this idea and expressed confusion as to how he arrived at this viewpoint.<ref>J forums. [http://www.jsoftware.com/pipermail/chat/2007-November/000633.html "why did Dijkstra dislike APL so much?"]</ref> Array programmers have argued that APL, designed as a mathematical notation, is one of the best embodiments of Dijkstra's goals for programming languages, and some have attributed his dislike for the language to a lack of familiarity or understanding. In particular, examples of the use of APL and J in proofs include:
* [https://code.jsoftware.com/wiki/Essays/Ackermann%27s_Function "Ackermann's Function"]
* [https://code.jsoftware.com/wiki/Essays/Ackermann%27s_Function "Ackermann's Function"]
* [https://www.dyalog.com/blog/2015/01/cholesky-decomposition/ "Cholesky Decomposition"]
* [https://www.dyalog.com/blog/2015/01/cholesky-decomposition/ "Cholesky Decomposition"]
* [https://www.dyalog.com/blog/2018/11/tolerated-comparison-part-1/ "Tolerated Comparison"]
* [https://www.dyalog.com/blog/2018/11/tolerated-comparison-part-1/ "Tolerated Comparison"]


Dijkstra laments then inability of APL programmers to live without an APL session: an odd criticism, as the first APL session, [[APL\360]], was released years after the publication of [[A Programming Language]], and created at a time when [[Iverson Notation]] had already been used to teach mathematics and design IBM hardware. In fact it is common for APLers to communicate verbally, on a blackboard, or on paper without using an APL session; [[Aaron Hsu]] is known for combining his use of APL with a love of calligraphy and fountain pens in order to fill notebooks. Among mathematically inclined APLers, the session is often considered an aid in constructing a correct proof rather than a goal in itself. As an "executable mathematical notation" APL is both suited for expressing the final result and for verifying with examples that the steps of the proof are correct.
Dijkstra laments the inability of APL programmers to live without an APL session: an odd criticism, as the first APL session, [[APL\360]], was released years after the publication of [[A Programming Language]], and created at a time when [[Iverson Notation]] had already been used to teach mathematics and design IBM hardware. In fact it is common for APLers to communicate verbally, on a blackboard, or on paper without using an APL session; [[Aaron Hsu]] is known for combining his use of APL with a love of calligraphy and fountain pens in order to fill notebooks. Among mathematically inclined APLers, the session is often considered an aid in constructing a correct proof rather than a goal in itself. As an "executable mathematical notation" APL is both suited for expressing the final result and for verifying with examples that the steps of the proof are correct.


One specific complaint that Dijkstra levels at APL is its use of an expanded set of operations relative to the typical set used in computer science research. It's true that APL dedicates much of its functionality to working with arrays, but this shouldn't be taken as a theoretical weakness. In fact, APLs array operators are much like structured programming, which eliminates a single construct, Go to, in favor of several branching and looping constructs like ''if'' and ''while''. Moving from scalar processing to array processing requires new operations in exchange for, not at the expense of, improved theoretical properties. Nonetheless, language designers such as [[Arthur Whitney]] put considerable effort into reducing the number of symbols needed in the language in order to express ideas. Indeed, [[Fred Brooks]] praised [[Ken Iverson|Iverson]] for a "fierce determination not to invent any new constructs, until you have to."<ref>Brooks, Fred. ''A Celebration of Kenneth Iverson'' ([https://www.jsoftware.com/papers/KEIQA.htm#touchstone excerpt])</ref>
One specific complaint that Dijkstra levels at APL is its use of an expanded set of operations relative to the typical set used in computer science research. It's true that APL dedicates much of its functionality to working with arrays, but this shouldn't be taken as a theoretical weakness. In fact, APLs array operators are much like structured programming, which eliminates a single construct, Go to, in favor of several branching and looping constructs like ''if'' and ''while''. Moving from scalar processing to array processing requires new operations in exchange for, not at the expense of, improved theoretical properties. Nonetheless, language designers such as [[Arthur Whitney]] put considerable effort into reducing the number of symbols needed in the language in order to express ideas. Indeed, [[Fred Brooks]] praised [[Ken Iverson|Iverson]] for a "fierce determination not to invent any new constructs, until you have to."<ref>Brooks, Fred. ''A Celebration of Kenneth Iverson'' ([https://www.jsoftware.com/papers/KEIQA.htm#touchstone excerpt])</ref>
Anonymous user

Navigation menu