There's also a video version of this paper: https://www.computerhistory.org/collections/catalog/10262213... — This is a nice talk (~80 minutes followed by ~30 minutes of Q&A) that Donald Knuth gave on 2003-December-03 at the Computer History Museum. This paper was reprinted with corrections/updates as pages 1 to 93 of "Selected Papers on Computer Languages" (the fifth volume of Knuth's collected papers), and the talk was given shortly after this book came out, so he spoke about the first chapter of the book.
The clever idea here is to illustrate (very) early programming languages from their first decade (roughly 1947 to 1957), by writing the same program ("TPK") in each of them. A while ago I added a little bit about it to the lede of https://en.wikipedia.org/w/index.php?title=TPK_algorithm&old...
What it reveals is that many ideas of programming languages that we now consider obvious in fact took a long time and many people to be developed. The early programming languages did not look at all like languages have looked, more or less, since 1958 (when both ALGOL and LISP were introduced).
> This talk will discuss contributions of Zuse (1945), Goldstine and von Neumann (1946), Curry (1948), Mauchly et al (1949), Burks (1950), Wheeler (1951), Rutishauser (1951), Böhm (1951), Glennie (1952), Hopper et al (1953), Laning and Zierler (1953), Brooker (1954), Kaminynin and Ljubimskiy (1954), Ershov (1955), Grems and Porter (1955), Elsworth et al (1955), Blum (1956), Perlis et al (1956), Katz et al (1956), Bauer and Samelson (1956), Melahn et al (1956), as well as the prototype of FORTRAN developed by Backus et al from 1954 to 1957. At least a dozen of these efforts will be illustrated by showing how a particular procedure called the TPK algorithm might have been coded at the time.
One of the highlights of reading The Art of Computer Programming (TAOCP) is the small historical lessons sprinkled in the text. Truth be told they're usually the main thing I understand. Sometimes I wish Knuth would just write a history book on computing. He has such a unique perspective as both a leader of the field and a great historian of it. Of course at this point he probably shouldn't have any distractions from TAOCP.
This reminded me of something Knuth says about this paper (starting around 8:17) in the talk I mentioned in another comment, showing that his historical knowledge, at least on this particular topic, wasn't always so deep:
> The other background to this work… In 1962 I was asked to give a talk at the ACM National Conference which was held in Syracuse, and this [slide] was the review that occurred in Datamation. And basically he pans the thing [the conference]. He says “Fortunately a large number of the society's members were unable to attend.” And he goes on and says “Well, the hotel was pretty good and there was good breakfast…” But he says here “Another paper which was titled A History of Writing Compilers”—which was mine—“was actually the history of one individual's rather limited experience with *a* compiler”.
> Well, that wasn't exactly true, but it was true enough: in other words, in 1962 I didn't know about almost anything of what I'm going to tell you tonight. So I took it as “maybe, you know, if I'm going to talk about the history of something, maybe I ought to actually research it, look into it.” And so over the next few years I started learning more about this and the more I learned the more fascinating it got…
Speaking of names, in the abstract of the paper they mention:
> Curry (“Composition”, 1948)
And suddenly I was like wow I wonder if the concept of currying was invented by this guy so I look it up. Turns out that while someone else is credited for inventing currying, it’s named after this Curry guy indeed. And more things are named after him, including the Haskell programming language.
A recurring joke in functional programming books is some footnote mentioning that currying was discovered by Schönfinkel but named after Curry because "schönfinkeling" didn't catch on.
float f(float t)
{
return sqrt(abs(t)) + 5 * pow(t, 3);
}
void tpk(void)
{
int i;
float y, a[11];
for (int i = 0; i < 11; ++i)
scanf("%f", &a[i]);
for (int i = 11; i > 0; --i) {
y = f(a[i]);
if (y > 400)
printf("%d TOO LARGE", i);
else
printf("%d %f", i, y);
}
}
There's also a video version of this paper: https://www.computerhistory.org/collections/catalog/10262213... — This is a nice talk (~80 minutes followed by ~30 minutes of Q&A) that Donald Knuth gave on 2003-December-03 at the Computer History Museum. This paper was reprinted with corrections/updates as pages 1 to 93 of "Selected Papers on Computer Languages" (the fifth volume of Knuth's collected papers), and the talk was given shortly after this book came out, so he spoke about the first chapter of the book.
The clever idea here is to illustrate (very) early programming languages from their first decade (roughly 1947 to 1957), by writing the same program ("TPK") in each of them. A while ago I added a little bit about it to the lede of https://en.wikipedia.org/w/index.php?title=TPK_algorithm&old...
What it reveals is that many ideas of programming languages that we now consider obvious in fact took a long time and many people to be developed. The early programming languages did not look at all like languages have looked, more or less, since 1958 (when both ALGOL and LISP were introduced).
> This talk will discuss contributions of Zuse (1945), Goldstine and von Neumann (1946), Curry (1948), Mauchly et al (1949), Burks (1950), Wheeler (1951), Rutishauser (1951), Böhm (1951), Glennie (1952), Hopper et al (1953), Laning and Zierler (1953), Brooker (1954), Kaminynin and Ljubimskiy (1954), Ershov (1955), Grems and Porter (1955), Elsworth et al (1955), Blum (1956), Perlis et al (1956), Katz et al (1956), Bauer and Samelson (1956), Melahn et al (1956), as well as the prototype of FORTRAN developed by Backus et al from 1954 to 1957. At least a dozen of these efforts will be illustrated by showing how a particular procedure called the TPK algorithm might have been coded at the time.