- There are multiple ways to think about problems. *
- Given a real-world or programming problem, often if you find the right abstraction to model it you can make the problem vastly simpler and/or make your software vastly higher quality.
- Therefore, solving a problem well should involve trying to find the best abstraction possible.
- Programming languages influence your thought processes to match what they offer.
- "if you see enough nails everything starts to look like a hammer".
- See: Sapir Whorf hypothesis and Paul Graham: Succinctness is Power.
- Lisp offers the flexibility to adapt to ANY paradigm, imposes the least constraints on your thinking, and therefore is likely often the best language to use to approach a problem. **
\* I hold the idea that there are multiple ways to think about problems to be fairly obviously true. But in case you don't agree yet, here is some justification. An example of a problem which can be profitably approached from multiple perspectives is "dynamic programming". I can either approach a dynamic programming problem using a top-down recursive viewpoint, or look at it from the bottom up as filling out values in a table. I can reason about DP as either constructing a DAG of subproblems or as filling out a table of precomputed values. There are MULTIPLE WAYS to think about the problem