In literature, the ambition of the novice is to acquire the literary language; the struggle of the adept is to get rid of it
~ George Bernard Shaw
Some of the finest prose I’ve ever come across has been in the pages written by Paul Graham. In an essay that I wrote earlier (entitled On Lisp and Paul Graham)—and where I was referring to the two fine books Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp by Peter Norvig (Morgan Kaufmann, 1992) and On Lisp: Advanced Techniques for Common Lisp by Paul Graham (Prentice Hall, 1994)—I had noted that, “While both are replete with good advice, it is Paul Graham’s On Lisp that also has the distinction of having been written spectacularly well; it has to be read to be believed!”
The title is intended to stress the importance of bottom-up programming in Lisp. Instead of just writing your program in Lisp, you can write your own language on Lisp, and write your program in that… Lisp was meant from the start to be an extensible language. The language itself is mostly a collection of Lisp functions, no different from the ones you define yourself…
Sometimes I will stay up in my room for a day trying to get two sentences that will flow, that will just seem as if they were always there.~ Maya Angelou, in Conversations with Maya Angelou, ed. Jeffrey M. Elliot (Jackson, MS: University Press of Mississippi, 1989), p.59
…The traditional approach is called top-down design: you say “the purpose of the program is to do these seven things, so I divide it into seven major subroutines. The first subroutine has to do these four things, so it in turn will have four of its own subroutines,” and so on. This process continues until the whole program has the right level of granularity—each part large enough to do something substantial, but small enough to be understood as a single unit.
Experienced Lisp programmers divide up their programs differently. As well as top-down design, they follow a principle which could be called bottom-up design—changing the language to suit the problem. In Lisp, you don’t just write your program down toward the language, you also build the language up toward your program. As you’re writing a program you may think “I wish Lisp had such-and-such an operator.” So you go and write it. Afterward you realize that using the new operator would simplify the design of another part of the program, and so on. Language and program evolve together (italics are mine). Like the border between two warring states, the boundary between language and program is drawn and redrawn, until eventually it comes to rest along the mountains and rivers, the natural frontiers of your problem. In the end your program will look as if the language had been designed for it. And when language and program fit one another well, you end up with code which is clear, small, and efficient.
If you want to learn about complexity classes, scaling laws in computation, undecidability, randomized algorithms, how to prepare a dinner with Pommard, Quail and Roquefort, or the new ideas that quantum theory brings to computation, this is the right book. It offers a wonderful tour through many facets of computer science. It is precise and gets into details when necessary, but the main thread is always at hand, and entertaining anecdotes help to keep the pace.~ Marc Mézard, Université de Paris Sud, Orsay
- Y combinator (mathematical function), one of the most well-known fixed-point combinators in untyped lambda calculus, or to
- Y Combinator (company), an American company that provides seed money, advice, and person-to-person networking connections in their yearly programs
Writing a book is a horrible, exhausting struggle, like a long bout of some painful illness. One would never undertake such a thing if one were not driven on by some demon whom one can neither resist nor understand. For all one knows that demon is simply the same instinct that makes a baby squall for attention. And yet it is also true that one can write nothing readable unless one constantly struggles to efface one’s own personality. Good prose is like a windowpane.~ George Orwell, Why I Write (England Your England and Other Essays)
For me, writing is the only thing that passes the three tests of metier: (1) when I’m doing it, I don’t feel that I should be doing something else instead; (2) it produces a sense of accomplishment and, once in a while, pride; and (3) it’s frightening.~ Gloria Steinem