5 ms·
I think it is interesting that you left out the very next few sentences, which provide very relevant context: "I see a great future for very systematic and ver
by galacticpony 10y ago
I think it is interesting that you left out the very next few sentences, which provide very relevant context:
"I see a great future for very systematic and very modest programming languages. When I say “modest”, I mean that, for instance, not only ALGOL 60’s “for clause”, but even FORTRAN’s “DO loop” may find themselves thrown out as being too baroque."
While I agree with the general sentiment, it's very important to take anything Dijkstra says with a huge grain of salt. He was a mathematician first and foremost. He obsessed about things like a mathematician. Such people, while very smart, make for very unproductive software engineers. They also have a way of sounding deceptively smart and thoughtful, when really they're just talking out of their ass. Beware.
- todd8 10y agoI agree with Dijkstra, the looping constructs of FORTRAN's DO and ALGOL 60 were too baroque. Dijkstra's comments were written in 1977, at that time FORTRAN IV and ALGOL 60's loop semantics were a mess and were common sources of errors. Without qualification, Dijkstra was one of the greatest computer scientists in our field's short history. While I don't agree with every single one of his ideas, I would encourage budding computer scientists and professional programmers to look over what he accomplished. He most certainly was not unproductive. Wikipedia says that Dijkstra is known for: - Dijkstra's algorithm (single-source shortest path problem) - DJP algorithm (minimum spanning tree problem) - First implementation of ALGOL 60 compiler - Structured analysis - Structured programming - Semaphore - Layered approach to operating system design - T.H.E. multiprogramming system (one of the first operating systems) - Concept of levels of abstraction - Concept of layered structure in software architecture (layered architecture) - Concept of cooperating sequential processes - Concept of program families - Multithreaded programming - Concurrent programming - Concurrent algorithms - Principles of distributed computing - Distributed algorithms - Synchronization primitive - Mutual exclusion - Critical section - Generalization of Dekker's algorithm - Tri-color marking algorithm - Call stack - Fault-tolerant systems - Self-stabilizing distributed systems - Resource starvation - Deadly embrace - Deadlock prevention algorithms - Shunting-yard algorithm - Banker's algorithm - Dining philosophers problem - Sleeping barber problem - Producer–consumer problem (bounded buffer problem) - Dutch national flag problem - Predicate transformer semantics - Guarded Command Language - Weakest precondition calculus - Unbounded nondeterminism - Dijkstra-Scholten algorithm - Smoothsort - Separation of concerns - Program verification - Program derivation - Software crisis - Software architecture This quote by galactipony is really offensive to me: > Such people, while very smart, make for very unproductive software engineers. They also have a way of sounding deceptively smart and thoughtful, when really they're just talking out of their ass. Beware. It is quite clear to me that Dijkstra wasn't "just talking out of [his] ass." Learn more about Dijkstra at https://en.wikipedia.org/wiki/Edsger_W._Dijkstra https://en.wikipedia.org/wiki/Edsger_W._Dijkstra or in any resource on the history of Computer Science.
- galacticpony 10y agoI know about Dijkstra. I didn't say Dijkstra was talking out of his ass in this case. I'm saying you often can't tell when people like him are talking out of their ass, as they sometimes do. Who would think the inventor of all these algorithms would ever utter a half-formed thought, on a whim? Unthinkable! Yeah... no. Another distinction you fail to see is that somebody who is great at finding the best or optimal algorithms (i.e. a great theorist) isn't necessarily a productive programmer. To the contrary, perfectionism and productivity are at great odds. Dijkstra was heavily at odds with real-world programming as it was done, to the point of isolating himself with his work. If we followed his opinions on how to program, we wouldn't get much of anything done.
- throwaway729 10y ago> Another distinction you fail to see is that somebody who is great at finding the best or optimal algorithms (i.e. a great theorist) isn't necessarily a productive programmer. I suppose what you're saying here is that there are a lot of business tasks which don't require a great theorist. I don't think Dijkstra would disagree. But still, calling Dijkstra an "unproductive programmer"? Really? I'll take one Dijkstra's algorithm over a dozen web apps. And if I can have a patent on it, I can even make a solid business case for that choice. > If we followed his opinions on how to program, we wouldn't get much of anything done. And yet, how many man-years of engineering effort could we waste having bad theorists who can quickly hack out LoB code try to re-invent Dijkstra's algorithm? Perhaps software engineering is a very wide field, and it takes all types?
- importantbrian 10y ago> To the contrary, perfectionism and productivity are at great odds. I've learned this the hard way in my career. I always have to fight against taking the extra 20 hours to perfect something when it only took me 1 hour to get to 95% and 95% is more than good enough for the particular task.
- edejong 10y agoI agree with todd8, but would like to add that the next paragraphs were not added for two simple reasons: the quote itself was already too long and I felt it summarizes well enough the gist of the argument: programming languages should not allow 'clever' tricks. But, lets discuss the 'for clause' and 'do loop': these constructs were made specifically for one kind of simple loop. It is not a systematic solution for an iterative process. To me it seems Dijkstra specifically aims for languages such as LISP (which, with the renewed interest from Clojure is one of the most oldest successful (semi-) functional programming languages).
- galacticpony 10y ago"I agree with todd8, but would like to add that the next paragraphs were not added for two simple reasons: the quote itself was already too long and I felt it summarizes well enough the gist of the argument: programming languages should not allow 'clever' tricks." It still seems intellectually dishonest to leave it out. Clearly, what Dijkstra in 1972 considers too "clever" may in fact be tools that are now basic building blocks of everyday software. We can all agree that "too clever" is bad. We can't agree on what "too clever" is. "But, lets discuss the 'for clause' and 'do loop': these constructs were made specifically for one kind of simple loop. It is not a systematic solution for an iterative process." I'm fairly sure (from what I remember him writing) that he doesn't like it because you can do the same thing with existing constructs, so you'd be adding complexity to the language that isn't strictly necessary. History has shown that actual programmers prefer having for loops like Algol. "To me it seems Dijkstra specifically aims for languages such as LISP (which, with the renewed interest from Clojure is one of the most oldest successful (semi-) functional programming languages)." Probably not, or else he would've talked about LISP in a different manner (he does talk about it in an earlier paragraph).
- edejong 10y ago"Programmers prefer loops like Algol": Yes, programmers prefer it, but the general structure: `for (init-statement ; boolean-continuation-expression ; iteration-statement) statement;` is syntactic sugar for a specific imperative process (with the iteration and ending expression appended at the end of the block). It does not generalize to other imperative processes, it cannot be transformed into a meaningful expression and it invites 'clever' programmers to do 'too much' in the various for-clauses. Wrt to LISP, do you mean this part? That seems to align well with my standpoint: use very few basic principles and be stable. "The third project I would not like to leave unmentioned is LISP, a fascinating enterprise of a completely different nature. With a few very basic principles at its foundation, it has shown a remarkable stability. Besides that, LISP has been the carrier for a considerable number of in a sense our most sophisticated computer applications. LISP has jokingly been described as “the most intelligent way to misuse a computer”. I think that description a great compliment because it transmits the full flavour of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts."