Q&A: Rich's design decisions building Clojure

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
A list of commonly asked questions, design decisions, reasons why Clojure[^1] is the way it is as they were answered directly by Rich (even when from many years ago, those answers are pretty much valid today!). Feel free to point friends and colleagues here next time they ask (again). Answers are pasted verbatim (I've made small adjustments for readability, but never changed a sentence) from mailing lists, articles, chats.
# Table of Content
### FP vs OOP
* [What is the meaning of Data?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Should I use a `namespace` to bundle functions to model a domain object like a "customer" or "product"?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Why Clojure does not implement something like CLOS?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [How is Clojure polymorphism different from Java or other languages?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [How Clojure compares to Scala?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
### Clojure Design
* [Why no pattern matching?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Why Clojure does not allow to introduce new syntax like Common Lisp?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Why did you choose to make your language a Lisp dynamically typed as opposed to ML?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Why no tail call optimization?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Are there cons cells in Clojure?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Aren't chunked sequences completely subverting the point of laziness?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Why Clojure doesn't have a generic `insert`, `lookup`, `append` that works the same on all collections?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Why Clojure compiler is single pass? Aren't many possible optimizations lost this way?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
### Clojure Features
* [Isn't the behavior of the STM unpredictable compared to manual locking?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [deftype, gen-class, proxy, reify, etc. Why there are so many ways to define a type?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [How does Clojure solve the potential ambiguity of multiple inheritance?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Couldn't locals be mutable?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [When should I use atoms/refs/agents?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Why there is a "rest" and a "next"?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [What is the difference between collections and sequences?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Why lazy sequences are cached?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Why cannot "last" be fast on vector?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Shouldn't `(nth nil 1)` throw outofbound exception?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [What is the convention for arguments order?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Why doesn't contains? do what I expect on vectors and lists?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Why commas are allowed as whitespaces?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [How Clojure transients work?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
### Learning, Process and Community
* [How can I achieve programming mastery?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Why you don't accept pull requests?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [Why Clojure is not licensed under GPL, MIT, etc?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [I want to study SICP and use Clojure instead of Scheme. Is that a good idea?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
* [What lessons did you learn porting some data structures from Okasaki ML into Java?](

Gist
A curated collection of answers that Rich gave throughout the history of Clojure
A curated collection of answers that Rich gave throughout the history of Clojure - rich-already-answered-that.md
)
[^1]: Clojure is a dynamic and functional dialect of the programming language Lisp on the Java platform. Like most other Lisps, Clojure's syntax is built on S-expressions that are first parsed into data structures by a Lisp reader before being compiled. Clojure's reader supports literal syntax for maps, sets, and vectors along with lists, and these are compiled to the mentioned structures directly. Clojure treats code as data and has a Lisp macro system.

Stacker News
Q&A: Rich's design decisions building Clojure \ stacker news ~Design
A list of commonly asked questions, design decisions, reasons why Clojure is the way it is as they were answered directly by Rich (even when from m...