Lisp History, Culture and Best Practices
42.1 Timeline
McCarthy designs Lisp at MIT "Recursive Functions of Symbolic Expressions" paper; first implementation (IBM 704)
MacLisp, Interlisp; AI lab culture at MIT, Stanford, BBN Scheme (Sussman & Steele, the "Lambda Papers")
Lisp Machines (MIT CADR, Symbolics, LMI, Xerox, TI) *Common Lisp the Language* (Steele); 1985: Emacs Lisp (GNU Emacs) "AI winter" hurts Lisp vendors
ANSI Common Lisp standard; first ANSI-standardized object-oriented language (CLOS)
Paul Graham builds Viaweb in Lisp (later Yahoo! Store); *On Lisp* (1993), *ANSI Common Lisp*
SBCL fork (1999), Practical Common Lisp (2005), PLT Scheme → Racket (2010)
ClojureScript, Babashka, Racket CS on Chez, Fennel, Janet, Coalton, Jank
42.2 Culture and Classic Wisdom
*"Lisp is a programmable programming language."* (John Foderaro)
*"Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp."* (Greenspun's tenth rule)
*"Programs must be written for people to read, and only incidentally for machines to execute."* (SICP)
Key essays and talks: Paul Graham's *Beating the Averages* and *Revenge of the Nerds*; Rich Hickey's *Simple Made Easy* and *The Value of Values*; Steele's *Growing a Language*; McCarthy's history of Lisp.
42.3 Best Practices Across Lisps
✅ Use the REPL constantly and develop interactively.
✅ Prefer pure functions and immutable data; isolate side effects.
✅ Use clear names with dialect conventions (kebab-case, predicate?/predicatep, mutate!, *special* variables in CL).
✅ Indent properly and let structural editing manage parentheses.
✅ Write functions first; reach for macros only for syntax/evaluation control that functions can't provide.
✅ Document with docstrings and test with your dialect's framework.
✅ Learn your dialect's standard library before writing utilities.
❌ Counting parentheses by hand ❌ Unhygienic macros that capture variables accidentally
❌ Deep non-tail recursion over huge inputs in dialects without TCO ❌ Mutating shared (quoted) literal data
❌ Overly clever macro DSLs that teammates can't read or debug