> - CL is too big (compared to Racket and Clojure)
The old criticisms of Lisp being too big were compared to Scheme & C, and it is definitely much larger than those two are: why, it defines modules & hash tables and has objects! Racket is actually a pretty neat system which is basically Scheme-plus-a-lot; I wouldn’t be surprised if it’s actually larger than CL.
I don’t know how Clojure would compare, but I imagine that it’s comparable.
Not that compared to language like Go or Python, Lisp is very much not big. It doesn’t have built-in email, or HTTP and that kind of thing (but there are good libraries available for almost everything these days).
> - Lisp-1 vs Lisp-2
Most language these days have a single namespace. Honestly, though, I think that’s a mistake along the same lines as most languages these days lacking a symbol type. https://www.dreamsongs.com/Separation.html is a nice overview of the arguments in both directions.
I like being able to easily add my own new namespaces to the language.
> - recursion discouraged (is that even true?)
I don’t believe it is. Recursion is just one more tool in the toolbox. Note that while the standard doesn’t mandate tail call optimisation, many implementations implement it anyway.
> - There is a thing called "Lisp Curse"
I think that applies to any Lisp-like language, not just Common Lisp. For some reason people’s brains turn off when they see:
(if (foo x)
(bar)
(baz))
instead of:
if foo(x) {
bar()
} else {
baz()
}
> are there any compelling reasons for an average Joe programmer like me to start learning Common Lisp in 2019?
I think that it’s still the best language out there for delivering quality, well-forming software which can run in a dynamic environment and handle dynamic situations. I professionally program in Go — and I enjoy it — but I would rather program in a Lisp implementation which adopted goroutines, channels and interfaces[0]. I would rather use something like an eshell which had a few man-years of work on it than zsh, and I’d rather use something like a next-gen Lisp scsh than sh.
There are some great languages out there: ML, Erlang, Lisp. They are each worth learning, worth using.
0: there are threading and channel libraries already, but I honestly don’t know what interfaces would look like in a dynamic language; I do know that I love them in Go.