Professional programmers often find that the program they’re working on now has a great deal in common with some program they wrote in the past. It is this feeling that makes the idea of software reuse so attractive.

Somehow reuse has become associated with object-oriented programming. But software does not have to be object-oriented to be reusable—this is obvious when we look at programming languages (that is, compilers), which are the most reusable software of all.

The way to get reusable software is to write programs bottom-up, and programs don’t have to be object-oriented to be written bottom-up. In fact, the functional style seems even better adapted for writing reusable software.

Paul Graham, ANSI Common Lisp