Richard P. Gabriel: The Art of Lisp & Writing
dreamsongs.com
dreamsongs.com
Lisp vs Java is one thing but there is an undercurrent of "static typing is terrible" running through this paragraph (and others). I am not sure I agree. Haskell for example is very expressive(at least to me). And I am not sure a static type system gets in the way of "prototyping" much.
"Lisp, of course, and especially Common Lisp are my languages. Not since the 1960s have I programmed professionally in a language other than Lisp."
With all due respect to Richard Gabriel, (and this probably blasphemy) perhaps he should? Haskell or Erlang or Factor are mind expanding in ways Common Lisp never was. (Not to deride Common Lisp, but I am tired of people implying it is some kind of unsurpassed acme of language design excellence)
I see Lisp is more mind-reflecting beyond just being mind-expanding. It's easier to write Haskell programs in Lisp than the converse.
You can write a compiler for one in the other (as you could do with any two Turing Complete programming languages), but other than that this seems to be a meaningless play on words.
But, ok let us take your claim that it is "easier to write Haskell programs in lisp than lisp programs in Haskell".
Care to point at some specific significant "haskell programs in lisp" that are "easier to write" than the corresponding "lisp programs in haskell" that are harder to write?
Not knowing either Common Lisp or Haskell, I really couldn't comment on the rest, or on specifics in this case. Nor if it even makes sense, or is true in this case (that it's easier one way or the other).
> With all due respect to Richard Gabriel, (and this probably blasphemy) perhaps he should? Haskell or Erlang or Factor are mind expanding in ways Common Lisp never was.
The fact that Gabriel hasn't "programmed professionally" in those languages does not imply that he doesn't know them.
Fair enough but it doesn't mean that he does either, at least to a high enough degree where he can make an unbiased comparison to CL.
And his writing on this essay (which in my opinion is a rather incoherent and wandering paean of praise for lisp vs a strawman Java) seems to indicate he doesn't.
He spend a lot of time & money into getting this C++ thing going - not as a programmer, but as a boss of a software company.
That's also why Lucid Emacs got forked - which then became XEmacs.
What?
Otherwise, good article.
"Scientists, though, perhaps because of their desire for accuracy and precision have had the worst luck of all in pinning down the truth of the universe."
convinced me it would be a waste of time to continue with the article.
At most levels of work, we aren't actually making enormous changes all at once - even in the writing analogy, a story has to be written one sentence at a time, and if the concepts start changing partway through, the rewrite has to be done....one sentence at a time. The breakthrough concept that turns everything on its head is usually itself just one sentence.
In programming, we change two lines and then run the program again, we build on known, tested libraries and languages, we develop a concept on paper and then implement it. And because these things are built on a small foundation of logical concepts, we can build the language to ensure ever-greater levels of self-consistency that would otherwise only be manifested at runtime.
Feedback loops.
The fiction writer has a short feedback loop - the "state" of a story is small - no explosions of complexity as one would get with loops or recursion - so its progression can be kept in her head.
The programmer has a longer feedback loop, because her expectation is not to maintain the entire progression of the program in her head, but to let the computer do it and then display the results in some manner.
Dynamicness optimizes the feedback loop for greater incrementalism: the program runs until it hits any one point where an irreconcilable error is encountered, and then multiple options are available to fix the error and even let the program continue.
Staticness optimizes the feedback loop for "batch" error-checking: the programmer writes a full body of code she thinks is correct, with no run/test cycle to speak of, and then gets all the errors at once. When the program compiles, it works.
Since we can't implement either ideology perfectly, it's probably best to have some of _both_.
This is not a very good way of putting it. The essence of engineering is determinate knowledge, i.e. scientific, logical knowledge. That is not to say it excludes other things, or that that essence alone is sufficient, just that it is the definitive, distinctive, fundamental feature.
Experiment produces determinate knowledge -- the most specific, detailed kind. Scientific research produces the broad, general know-how, and experiment fills the gaps for a particular task. If engineering were not fundamentally about determinate knowledge, then experiment could not work. The knowledge produced by the experimental trial would not even have the generality to transfer to the intended use.
Associating engineering and software with art seems of little value. From what I remember of aesthetic philosophy, art does not have substantial, useful, or perhaps any correspondence with engineering -- let alone the vagueness of what art is anyway. One cannot fault the real content of the article, but the arty leaning is ultimately empty.
The limit of engineering is evolution, not art. When there is no knowledge, engineering design can't work, and instead evolution is the way. Proof of the effectiveness of that alternate approach is all around.
Can you please explain in what way LaTeX is lightweight? IIRC, LaTeX is a macro layer above TeX which is a layer above something written in "web" which (don't know the details here, but) I think may be translated to C (web2c) for building.
Also, last time I looked, the Texlive distribution is something like at least 100 MB.