On Lisp by Paul Graham
This is the best argument in favour of bottom up design I have ever seen. Download his book here.
Lisp is a programmable programming language
As well as writing their programs down towards the language, experienced Lisp programmers build the language up towards their programs
Bottom up design is becoming more important as software grows in complexity
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 on that.
... the association between Lisp and AI is just an accident of history ... Recent advances in hardware and software have made Lisp commercially viable: it is now used by Gnu EMacs ...
Lisp itself is a Lisp program and Lisp programs can be expressed as lists which are Lisp data structures
The plan-and-implement method is not a good way of writing programs
In Lisp, you can do much of your planning as you write the program ... nothing clarifies your ideas like trying to write them down
... the final design is always a product of evolution
Language and program evolve together ...
Like the border between two warring states, the booundary between language and program is drawn and redrawn, until it eventually comes to rest along the mountains and rivers, the natural frontiers of your problem ... your program will look as though the language had been designed for it ...
Instead of a lintel, you'll get an arch ...
Advantages of bottom up design:
No other language has anything like Lisp macros
- ... programs which are smaller and more agile
- ... promotes code re-use
- ... easier to read
- ... it causes you always to be on the lookout for patterns
... programs are data ...
... you can build a whole language on top of Lisp, and write your programs in that ...
Like an arch, Lisp is a collection of interlocking features ... dynamic storage allocation and garbage collection, runtime typing, functions as objects, a built in parser which generates lists, a compiler which accepts programs expressed as lists, an interactive environment ... It is the combination
Fortran was invented as a step up from assembly language. Lisp was invented as a language for expressing algorithms
Efficiency! (Fortran) versus Abstraction! (Lisp)
... the outcome of this battle is being determined by hardware. Every year things look better for Lisp ...