Computer Science vs. Computing Science (1999)
cs.utexas.edu
cs.utexas.edu
> The idea of a formal design discipline is often rejected on account of vague cultural/philosophical condemnations such as ”stifling creativity”; this is more pronounced in the Anglo-Saxon world where a romantic vision of ”the humanities” in fact idealizes technical incompetence. Another aspect of that same trait is the cult of iterative design.
> Industry suffers from the managerial dogma that for the sake of stability and continuity, the company should be independent of the competence of individual employees. Hence industry rejects any methodological proposal that can be viewed as making intellectual demands on its work force. Since in the US the influence of industry is more pervasive than elsewhere, the above dogma hurts American computing science most. The moral of this sad part of the story is that as long as computing science is not allowed to save the computer industry, we had better see to it that the computer industry does not kill computing science.
Typical Dijkstra. You do it his way or you're not only wrong, but also stupid. But "his way" is to have a correct formal specification that you can operate on using mathematical logic. We have learned, from bitter experience, that that's asking quite a lot, and even when you can get it, it's a recipe for building systems that are obsolete on the day they are completed. But Dijkstra is content to pronounce the system produced to be "correct". That approach may cut it in academia, but in the real world it has been tried and found to be sorely wanting.
Then you get to aspects that really are a combination of art and science. Would Dijkstra's approach have produced, say, the iPhone user interface? I strongly doubt it.
Unfortunately, Humans are heuristic, pattern-matching, infinitely adaptable organisms and hence absolute rigor is very difficult. The fact that programming languages are so evolved that one can easily code-up any incoherent stream of consciousness and still have the system-as-a-whole work in some fashion is what has contributed to both the boom (anybody can contribute) and mess (quality sorely lacking) in the industry.
PS: Never ever dismiss pioneers like Dijkstra, Hoare, Wirth and others offhand. They built up the Fundamental Theory, Science and Tools which directly led to today's Computer Industry and its effect on Society.
Wow, John von Neumann is my man! I need to get more exposure to his intellectual legacy. I couldn't articulate why my POC of parallel computation surviving asynchronous loss of threads [0] would be of any interest (I don't see any practical value in it myself and treat it as a piece of art). I think the man would find more than two words to respond to it.
He's working on a pertinent hardware project called the T2 Tile and is documenting it all on YouTube: https://www.youtube.com/channel/UC1M91QuLZfCzHjBMEKvIc-A
> Our strategy is to entice smart people to play with programming robust, indefinitely scalable computations by lowering barriers to entry, and as idioms, motifs, and best practices emerge from such explorations, we believe opportunities for wise optimization will arise.
I believe I have unknowingly contributed to that strategy.
Would any Lisp expert care to comment on this?
[1]: https://en.wikipedia.org/wiki/Scope_(computer_science)
[2]: https://stackoverflow.com/questions/1047454/what-is-lexical-...
[3]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Clos...
[4]: https://en.wikipedia.org/wiki/ColdFusion_Markup_Language
[5]: [https://en.wikipedia.org/wiki/MUMPS
[6]: https://www.emacswiki.org/emacs/DynamicBindingVsLexicalBindi...
[7]: https://en.wikipedia.org/wiki/Scope_(computer_science)#Macro...
And, would you also comment on Dijkstra's "self-definition" comment?
Dijkstra's comment on this is quite acerbic, isn't it? Here is the full quote for easy reference:
> [LISP's] promotion of the idea that a programming language should be able to formulate its own interpreter (which then could be used as the language’s definition) has caused a lot of confusion because the incestuous idea of self-definition was fundamentally flawed.
I agree to the extent that the exercise of writing a LISP interpreter in LISP is indeed often a very confusing exercise for beginner, partly because writing any interpreter (or compiler) is fairly arcane for a beginner, and partly because keeping track of which parts are in implementation and which parts are in the target language can be made more difficult; also because it's easy to "cheat" and rely on outside language in inappropriate ways. I would recommend using a language you already know well and implementing a moderately simple language as a first exercise to a student. But on the whole the exercise of writing an interpreter in its own language - or alternatively writing a self-hosting compiler[5] - is rewarding and does teach you a great deal about how programs work.
I also can't agree the so-called "incestuous idea of self-definition" is "fundamentally flawed:" it is in fact fairly interesting and related to important meta-mathematical concepts like Godel numbering[6], reductions[7], and the Church-Turing thesis[8]. Writing a meta-circular evaluator seems like a reasonably concrete way to start building intuition towards these important ideas. Perhaps Dijkstra has in mind such problems as Curry's Paradox[9] or Russel's Paradox[10], both of which are paradoxes arising from self-reference? In my view a meta-circular evaluator is much closer in spirit to Godel numbering (which is valid and useful) than these paradoxes.
[1]: https://en.wikipedia.org/wiki/Meta-circular_evaluator
[2]: https://en.wikipedia.org/wiki/Structure_and_Interpretation_o...
[3]: http://www.sicpdistilled.com/section/4.1/
[4]: https://www.youtube.com/watch?v=0m6hoOelZH8
[5]: https://en.wikipedia.org/wiki/Self-hosting_(compilers)
[6]: https://en.wikipedia.org/wiki/G%C3%B6del_numbering
[7]: https://en.wikipedia.org/wiki/Reduction_(complexity)
[8]: https://en.wikipedia.org/wiki/Church%E2%80%93Turing_thesis
> "That name ['programming languages'] was unfortunate because very soon the analogy with natural languages became more misleading than illuminating. It strengthened the school of thought that tried to view programming primarily as a communication problem, it invited the psychologists in, who had nothing to contribute, and it seriously delayed the recognition of the benefits of viewing programs as formulae to be derived. It was the time of Edmund C. Berkeley’s “Giant Brains or Machines that Think”, it was the time of rampant anthropomorphism that would lead to the false hope of solving the programming problem by the verbosity of COBOL and would seduce Grace M. Hopper to write a paper titled “The Education of a Computer”. Regrettably and amazingly, the habit lingers on: it is quite easy to infuriate computing scientists by pointing out that anthropomorphizing inanimate objects is in science a symptom of professional immaturity."
This school of thought that Dijkstra decried is the one that eventually triumphed in our industry, and nowadays it is widely held that a general-purpose programming language "succeeds" primarily when it enables communication with/between programmers. Armies of consultants and bloggers and Uncle Bobs make a living out of this idea. The whole "languages are first for programmers to read, and second for computers to run" shtick.
I'm not sure which is my own position, but we do know which was Dijkstra's and that he would not be happy today.
I didn't make up that aphorism myself. There is very much a design contradiction between "this language should make things easier for the computer (or compiler, or whatnot)" and "this language should be easy to read for humans, even if this makes it worse for the computer". This is widely acknowledged and not the point of contention; whether the former or the latter is more important is.
I mean, readability of any language for humans is an issue, but I'm not sure what readability for computers means exactly in this context. How easy it is to make an optimizing compiler? Modern languages use zero cost abstractions approach to improve readability for humans, while targeting well optimized code.
The fact he specifically picks on COBOL -- exclusively formulated to communicate well to humans, not computers -- seems to favor my interpretation.
I could be mistaken, of course. He does speak of "anthropomorphizing inanimate objects", which does favor your interpretation. Or maybe it's mixed?
If that was the case, I think we'd just end up using literate programming systems, which get both the "human-focused" and "computer" parts right.
BTW, running executable code is only one small part of what computers do with programming languages; what about things like performing static analysis to detect errors within the code, and providing language-specific support for IDE's and/or CASE systems? These things just seem to be a lot more important in programming language design than either the "communicate to humans" or the "run executable code" part.
I suppose I should amend my statement to: "this view has triumphed in the blogs, articles and papers that some programmers like to read, and self-styled gurus like to write, if not actually practice" :)
That said, for readers untrained in the predicate calculus, his work can be impenetrable. Fortunately anyone smart enough to program is smart enough to learn the predicate calculus. I use it regularly in real work. I don’t bother constructing fully formally correct programs, but I use invariants to write all but the most trivial loops.
The focus should be on computing, but understanding the machine is very important
I'm one of the least likely people to start screaming sexism at the drop of a hat but does this turn of phrase seem a bit, well, sexist?
On the nomenclature topic, it's interesting to note that Georgia Tech and many others have a School of Computing so it's not that unusual of a term.
> "It was the time of Edmund C. Berkeley’s “Giant Brains or Machines that Think”, it was the time of rampant anthropomorphism that would lead to the false hope of solving the programming problem by the verbosity of COBOL and would seduce Grace M. Hopper to write a paper titled “The Education of a Computer”. Regrettably and amazingly, the habit lingers on: it is quite easy to infuriate computing scientists by pointing out that anthropomorphizing inanimate objects is in science a symptom of professional immaturity."
Like another comment here points out, this use of "seduce" is akin to "being seduced by the Dark Side of the Force". Anakin Skywalker was a man!
Also, this was Dijkstra's (slightly vitriolic) way of speaking. If you've read other [0] stuff [1] by him [2], you'll instantly recognize his style. And he isn't singling Grace out either; in any case, he seems to refer to her as another computer scientist, sharing the "professional immaturity" with Edmund Berkeley, a man.
[0] "Go To Statement Considered Harmful" http://www.u.arizona.edu/~rubinson/copyright_violations/Go_T...
[1] "On the cruelty of really teaching computing science" https://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD103...
[2] "The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense."
"FORTRAN, 'the infantile disorder', by now nearly 20 years old, is hopelessly inadequate for whatever computer application you have in mind today: it is now too clumsy, too risky, and too expensive to use."
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
But I think greed can seduce a person, I think power can seduce a person, I think fame can seduce a person.
I've never heard of "false hope" or "rampant anthropomorphism" as seductive, though.
It isn't the writing of the book he thinks she was lured into. It was the error in thinking that (he believed) the book contained.
(Note: I've included a lot of stuff like "he believed" and "his point" to emphasize that I don't really buy his thesis. I'm not in his corner when it comes to the idea he's presenting, but I don't see anything wrong with the words he used to present it.)
Just because popular language may only use one meaning of seduce does not mean that a writer with a strong vocabulary may not use it with a valid but less common meaning.