6 ms·
From the earliest days, amateurs instruct computers, while professionals write executable stories. I loved reading the projection of this quip into Haskell.
by ByzantineO6 9y ago
From the earliest days, amateurs instruct computers, while professionals write executable stories. I loved reading the projection of this quip into Haskell.
- samwestdev 9y agoWhat is that supposed to mean?
- mlevental 9y agoit's pretentious nonsense about how programming should be declarative rather than imperative and the implication that Haskell (the one true God) is. this point of view of course forgets that Turing tape machines came first and lambda calculus second and that most theory is still done using TMs rather than categories.
- dtornabene 9y agoeasy there, you might want to get your facts straight before you drop vitriol like that. LC actually came first, via Alonzo Church in Annals of Mathematics. Turing didn't publish his definition for another year and also, he did his PhD thesis under Church in LC notation.
- coldtea 9y ago>LC actually came first, via Alonzo Church in Annals of Mathematics. That's irrelevant, as early computers weren't programmed in LC, not build on such an architecture. And of course algorithms and even programs (e.g for Babbage's computer) existed before LC.
- jxub 9y agoI don't think that pointing out who came first is even relevant to the discussion; the real question might be: "which model is better to program in?" and the answer would be lambda-calculus derivatives for many.
- mlevental 9y agodifferent problems require different tools. functional has its place and imperative has its place. that's why i was so snarky in replying (even if i did get the timeline wrong): prescribing one over the other is dogmatic and pretentious.
- jxub 9y agoYou're right, we should avoid forming cults and following blind obsessions. Programming should remain the domain of rationality.
- thanatropism 9y agoI find that the more competent people are as programmers, the more they treat their preferred one as a religion. It's not even that they can't hack others, it's that they've arrived at the One True Way. Less experienced programmers (and moreso those who can kind of code but are faking their way with Stack Overflow) tend to be (or claim to be) language-agnostic.
- wz1000 9y agoNo computers have ever been programmed via Turing Machines, or built on an architecture resembling TMs(Von Neumann architecture can be described as a register machine). TMs are simply a mathematical formalisation of the notion of computation, equivalent in power to the lambda calculus. However, most programming languages(including C, Java, etc.) look much more similar to lambda calculus than a description of a Turing Machine - and for very good reason. Have you ever tried describing a TM that encodes even the simplest logic? It is a pain in the ass. Indeed, most courses on the theory of computation that discuss Turing Machines etc. don't ever expect students to fully describe a Turing Machine. Many times they use a language reminiscent of the lambda calculus to describe Turing Machines. Just take a look at the definition of Turing Machines on wikipedia and examples of TMs: https://en.wikipedia.org/wiki/Turing_machine#Formal_definition https://en.wikipedia.org/wiki/Turing_machine#Formal_definiti... https://en.wikipedia.org/wiki/Turing_machine_examples https://en.wikipedia.org/wiki/Turing_machine_examples That resembles no description of programs that are written by humans to run on computer systems, unlike the lambda calculus.
- jcranmer 9y agoRandom-access, multi-tape Turing machines are actually very good descriptions of computer hardware. The description of Turing machines in practice (using unary or binary notation on a single tape) is generally done because they're simpler and no less powerful, but modern computers hew much closer to a state-transition model embodied by Turing machines than a symbol rewriting process embodied by Lambda calculus.
- coldtea 9y ago>However, most programming languages(including C, Java, etc.) look much more similar to lambda calculus than a description of a Turing Machine - and for very good reason. Have you ever tried describing a TM that encodes even the simplest logic? It is a pain in the ass. That's because we don't actually have tape, but random access memory. But a turing machine is just a limited form of imperative programming, and much closer to Assembly, or C, Fortran, BASIC, or even Java, than Lambda Calculus. >That resembles no description of programs that are written by humans to run on computer systems, unlike the lambda calculus. Actually looks like a pretty run of the mill description of working with memory locations, gotos, conditional jumps and so on. Substitute the need to run through the tape for random access memory, and you're there. The examples don't remind you of programs written by humans mostly because they're visual examples showing the whole state configuration. If we similarly mapped the memory states during various steps of the execution of a common imperative program, it would look very much like those tables.
- TuringTest 9y agoDoesn't it blow your mind that you can represent imperative computations using a purely functional language? (like Haskell do-blocks, or lambda calculus itself). The beauty of a declarative notation is not that you get to ditch representation of state, is that you can represent such state in a much more compact and tractable way than what is required by theoretical representations of imperative machines. Trying to do mathematical reasoning with Hoare logic is a pain in the ass.
- krnsn 9y ago"Programs are meant to be read by humans and only incidentally for computers to execute." - Donald Knuth
- wtetzner 9y agoI thought that quote was by Abelson & Sussman in "Structure and Interpretation of Computer Programs".
- lopatin 9y agoHuh, I does appear to be in the preface of SICP. It does seem more of a Knuth-y quote though. I can see why it can be accidentally attributed to the literate programming guy, vs. the meta-circular interpreter guys.
- pash 9y agoYes, it’s from the preface to the first edition. Incidentally, the earliest expression of this idea that I’ve seen is from a talk by Fischer Black [0] in 1963, published a year later in a volume on LISP [1]: Programming style is not a matter of efficiency in a program. It is a matter of how easy it is to write or read a program, how easy it is to explain the program to someone else, how easy it is to figure out what the program does a year after you've written it; and above all, style is a matter of taste, of aesthetics, of what you think looks nice, of what you think is elegant. Although style is mainly a matter of taste, a programmer with a "good" style will find his programs easy to write, easy to read, and easy to explain to others. ... In particular, you may have acquired special programming tricks that you are very fond of, and that aren't used by other programmers, but that don't make your programs much more efficient. I urge you to stop using those tricks. As Samuel Johnson once said, "Read over your compositions, and when you meet with a passage which you think is particularly fine, strike it out." In other words, make your style simple, not complicated, even though the complicated style may seem to have some abstract virtues. ... 0. Yes, this is the same Fischer Black of the Black-Scholes duo of financial fame. His PhD, informally supervised by Marvin Minsky, was on artificial intelligence. Myron Scholes, for that matter, was also a good programmer and made money programming for economics professors at Chicago while he did his PhD there. 1. F. Black, “Styles of Programming in LISP,” in The Programming Language LISP: Its Operations and Applications, ed. E. Berkeley and D. Bobrow (1964), p96 (p106 of the PDF): http://www.softwarepreservation.com/projects/LISP/book/III_LispBook_Apr66-Acro5.pdf http://www.softwarepreservation.com/projects/LISP/book/III_L... [PDF]
- z5h 9y ago"amateurs instruct computers, while professionals write executable stories" Did you just make this up? I think this is an important idea.
- TuringTest 9y agoProgramming has much more in common with literature than what engineers typically realize. (Not to mention its relation with philosophy, with classes being a pure Aristotelian system of universals). Even for programs that are meant to be written and compiled once and never maintained, the programmer needs to build in their mind the whole story of the required computation, and put it in words for the compiler to transform it to low-level instructions. The clearer the programming language, the easier will be to reason about that story.