Hacker News new | comments | ask | show | jobs | submit login
Richard P. Gabriel: The Art of Lisp & Writing (dreamsongs.com)
59 points by astine on Apr 3, 2010 | hide | past | web | favorite | 14 comments



"The difference between Lisp and Java, as Paul Graham has pointed out, is that Lisp is for working with computational ideas and expression, whereas Java is for expressing completed programs. As James says, Java requires you to pin down decisions early on. And once pinned down, the system which is the set of type declarations, the compiler, and the runtime system make it as hard as it can for you to change those assumptions, on the assumption that all such changes are mistakes you're inadvertently making."

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)


>"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.

The fact that Gabriel hasn't "programmed professionally" in those languages does not imply that he doesn't know them.


"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.


Richard P. Gabriel lost his Lisp business when he invested in creating a new C++ development environment and used his existing Lisp business to get some money for that.

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.


"Haskell or Erlang or Factor are mind expanding in ways Common Lisp never was."

I see Lisp is more mind-reflecting beyond just being mind-expanding. It's easier to write Haskell programs in Lisp than the converse.


" 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?


Er, "write X in Y" is a common (and meaningful) snowclone/expression. It means you're not adopting the idioms of the language you're writing in, you're attempting to kludge together the idioms of one language and the syntax of another. For example, writing Java in Scheme could be refusing to use recursion, map, fold, etc., but instead using loops/loop-analogues and vectors everywhere, trying to craft everything into objects or similar instead of using closures where appropriate, and so on. Basically, writing a messy Scheme version of a clean Java program.

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).


It really irks me when people misrepresent the discovery of quantum effects as some kind of science-shattering event that overturned everything we knew, setting scientists kicking stones for the next 80 years. But it's a whole new level of wtf to say, “at least opening the door for a new kind of formulation (other than mathematics) for describing the truth about reality.”

What?

Otherwise, good article.


That and the line

"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.


I'm pretty sure that Lisp isn't as worthy as Gabriel paints it, for this simple reason: We grasp the static-verse more readily than the dynamic.

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_.


> ". . . most design problems we face in creating software can be resolved only through experimentation with a partially running system. Engineering is and always has been fundamentally such an enterprise, no matter how much we would like it to be more like science than like art."

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.


An old article, but a great read. Tying together writing and programming Lisp is insightful and if I could extend his ideas a little: writing using a light weight but very powerful tool like Latex seems similar to programming in a Lisp environment that may also be powerful but after a learning curve, the language and environment stay out of your way. Writing with Latex seems that way to me.


> writing using a light weight but very powerful tool like Latex

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.


Light weight in the sense that adding Latex formatting to a text document is easy and does not (much) get n the way of writing. Also, moving material around, referring to figures, sections, etc. is all easy. I have not tweaked my Latex setup in a long time.




Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact

Search: