As someone who was born more than a decade after this was written, I can't say I understand the context in which this was written. Would anyone care to elaborate for me?
Specifically, I'd like to know what opinions about Fortran, Basic, Cobol, PL/I and APL were common at the time.
The easiest way to update it is to replace those with the closest current equivalents.
Fortran = C, Basic = PHP, Cobol = Java, PL/I = Perl, and there is nothing on the landscape that is really equivalent to APL.
So let me say more about APL.
APL basically started as math notation turned into a programming language. In order to type it you needed a special keyboard for all of the extra symbols you needed. It evolved into an incredibly compact and versatile language, with a well-deserved reputation for being hard to read. In fact the classic challenge among APL programmers is that one would write a program in a single line, and the other would try to figure out what it did!
Update: Apparently one or more of my comparisons are offending people. If you'd respond indicating which comparison offends you, I'll explain why I made the comparison.
The comparisons you've made are flippant ones without much serious weight to them. I didn't downvote you, but, for example, COBOL bears no resemblance to Java beyond "it's used for business applications." Unlike COBOL, Java has a thriving non-business ecosystem and is a suitable tool for a lot of varied tasks. And, perhaps more importantly, it is regarded as such--the opinions held of COBOL at the time do not look remotely similar to the opinions about Java today.
I can't speak to PL/I : Perl so I won't try, but FORTRAN : C is likewise unfair. BASIC : PHP is closer, but still denies the credit (yes, there's some) that the PHP language, core library, and community deserve.
(EDIT: I will totally agree with you that APL is cool, though. ;-) )
I said closest equivalents, not close. And, in terms of understanding a 1975 comment with 2012 language comparisons, I challenge you to do better.
As for Java, it, like COBOL, was intentionally designed from the start to subtly restrict programmers so that large groups could work together on extremely portable programs. Both became popular in lots of "boring business applications" that will live forever. And if you think that current opinions about Java are dissimilar from old opinions about COBOL, you need to get out of your echo chamber and learn what adherents of various scripting languages think about Java. If you're tempted to retort that there are more Java programmers than scripting programmers, and Java programmers like the language, a 1975 COBOL programmer could justifiably have said the same thing.
The Perl vs PL/I comparison is not original to me. A bit over a decade ago MJD took a 1967 description of PL/I, did word substitution, and came up with http://perl.plover.com/perl67.html. The description fits - both languages combined several previous ones in an idiosyncratic way, with a strong emphasis on making it easy to get stuff done. The result in both cases was a language which made it easy for "sysadmin types" to solve real problems, with solutions that in time could become problems of their own.
The FORTRAN to C comparison is, admittedly, unfair as languages. But both have the characteristic of being low-level languages that are not (by current standards) very expressive, with large established code bases, riddled with repetitive mistakes that cause problems.
You admit that BASIC to PHP is better. If you think that I have failed to give the PHP language, core library, and community the full iota of respect that they deserve, then I likewise believe that you fail to give Kemeny and Kurtz full respect for deciding in the early 60s that computing was going to be a universal right, and there needed to be a programming language, for non-programmers, that would let them unleash that potential. And then designing a language that successfully served that purpose for decades.
And that productive people continue to get amazing stuff done with all of these technologies, and that starting over from scratch in any of theses areas would be far harder than critics would like to admit.
>The comparisons you've made are flippant ones without much serious weight to them.
I find them mighty fine comparisons. He didn't want to convey the same language features -- he wanted to convey languages that draw similar kinds of criticism today and serve similar functions.
So, none of them? Again, never used PL/I, so I can't roll on that one, but I know guys who have been doing FORTRAN since the seventies and that culture and outlook bears little resemblance to the C community. Java's community is not nearly as buttoned-up and business-centric as COBOL's was (even the oh-so-wise "scripting people" aside); COBOL had literally-literally no other significant use case. And PHP, for all its many warts, is viewed as a language you use to ship products, novice or no. Actual products that people use, no less. The first time I can think of BASIC being readily usable for that was in the nineties.
They don't draw similar criticisms at all, unless you take the Djikstra paper literally (and not even Djikstra took the Djikstra paper literally). It's a chance to slag on languages rather than a way to move the conversation forward; he challenged me to make better comparisons and my point is that the number of factors that exist today are so much greater that a comparison will fail. To understand the Djikstra paper you have to understand the languages, not short-circuit a poor comparison.
(And I do know all of them except PL/I, which sort of pains me, but...)
I actually have heard similar criticisms to the ones that Dijkstra made of every one of the modern equivalents. For similar reasons. And I believe that my comparison touches on why each of those criticisms is paralleled.
I freely admit, though, that the weakest parallel is to Java. Programmers who are not enamored of deep object hierarchies despise those designs when Java programmers try to implement them in any language. But love of deep object hierarchies is not unique to Java (though it does tend to be extreme there). Nor is Java as crippled as COBOL.
As for COBOL and other use cases - I would be willing to bet large sums that it would have had many other use cases had the people programming in it had access to computers that could run it for a reasonable price.
And finally, I did not post that comparison to slag on languages. I posted it to provide context for Dijkstra's quote. In fact I, personally, have spent a lot of my professional life programming in Perl - which is one of the languages that I offered up for criticism. And I freely admit that the criticism is not entirely unfounded.
>So, none of them? Again, never used PL/I, so I can't roll on that one, but I know guys who have been doing FORTRAN since the seventies and that culture and outlook bears little resemblance to the C community. Java's community is not nearly as buttoned-up and business-centric as COBOL's was (even the oh-so-wise "scripting people" aside); COBOL had literally-literally no other significant use case. And PHP, for all its many warts, is viewed as a language you use to ship products, novice or no. Actual products that people use, no less. The first time I can think of BASIC being readily usable for that was in the nineties.
Do I have to repeat that it's not about them being the SAME, but merely an equivalent for the modern era?
The PHP analogy here is the novice targeted/available everywhere/easily run part.
The Java analogy is the enterprisey, business, all serious part.
The C analogy is the made to run fast but too low level and too concerned with control/low level speed over proper abstraction stuff.
Matlab and R could be seen as inheriting some of the features of APL; at least APL was my first thought after having written my first program in APL as a middle schooler and then done some work in R many years later...
Just watched a video about Array programming which mentions APL and J. It also mentioned a couple of interesting facts about Ken Iverson I'd not heard elsewhere:
1 - Iverson originally wanted to call his new language Iverson's Better Math but his company blocked this so he went for A Programming Language (APL) instead. NB. Iverson worked for IBM at the time :)
Not because of their domains (which are very different) but because nobody notices that they are evolving, and people still rant about how ugly they are (because it was true of versions that are now 20 years old.)
Some math people I talked to found formal logic to be the hardest branch. Proofs about proofs are maddening. Reasing about reasoning and about things you can't reason about is tricky.
Programming--at a high level--is just this with different syntax. Actually, that's both a simplification and an exaggeration. However, Dijkstra was very interested in formal verification, and that really is very much like the study of formal logic.
More generally, the study of programming languages and semantics (which is probably most of what he meant by programming as a branch of mathematics) is very closely related to formal logic. And while I personally think it's not nearly as scary as people make it out to be--please don't be afraid of type theory and formal verification!--most people do find it somewhat difficult.
He is an exceptionally sharp thinker who is able to communicate his thought process with clarity. Even if you don't follow the math you understand how certain proofs can be abstracted from proofs made earlier.
I think you are correct, Dijkstra was exceptionally interested in formal verification to the point where he wasn't willing to envision a computing world that was not formally verified. When he said that programming is more difficult to mathematics he was probably envisioning the problems of formal logic with increasingly sophisticated programming structures.
There were (and are) plenty of ways to make some simple scripts that you could term 'programming'.
This isn't what Dijkstra is talking about - he's talking about formally correct programming which has gone out of style in favor of unit tests and 'move fast and break things'. Completely different perspective on programming - a scientific approach versus an engineering approach to problem solving.
Dijkstra would be very upset by your hacking together Python scripts as programming and he would probably have sent a similar letter to the one in the OP. ;)
No, it's because a larger amount of programming was more complicated back then. Resources were significantly more constrained, and converting database result sets to pretty HTML layouts wasn't part of the field yet.
No, it's not. Dijkstra believed in programming as a formal discipline. One of his more contentious claims is that most computing scientists who wrote programs (note the "computing", not computer[1]) should use formal methods in addition to programming. In many cases this would mean proving your programs correct. In this sense you are not simply a "code monkey," you are a mathematician generating proofs of algorithmic analysis.
Now, of course, he was correct that this is quite difficult, especially if you want to do it for everything. It turns out that the demand for programs which sometimes work is higher than the demand for programs which always work, so most programmers are not mathematicians.
However, many of Dijkstra's feelings are being revisited, with a modern twist. The C security disasters of the latter part of the previous century convinced a lot of people that we have become far to lax in our discipline.
However, we still recognize that formal proofs of correctness are far too onerous for ordinary programmers. Instead, we'd like to offer the benefits of formal analysis to programmers without any experience with formal analysis. This is the study of type systems.
I could go on, but this is a long topic that I really just need to sit down and write a blog post about to cover in any sufficient detail.
[1] Computer science is not the study of computers, it's the study of computing
>Is it because they didn't have relatively easy-to-use languages such as Python back then?
No, it's because (people like Djikstra at least) didn't regard the stuff we do with Python nowadays as real programming, in the same way you don't regard office doodles as Van Gong style art.
Specifically, I'd like to know what opinions about Fortran, Basic, Cobol, PL/I and APL were common at the time.
Also, how was this received?