Hmm... "Why don't more people use XXXX" type of posts seem like an invitation to argument and drama. But I'm a Lisp fan, so I can't ignore this opportunity for people to down-vote me because I don't make a full-throated endorsement of their favourite language. I'm also somewhat tired of reddit, so I'm responding here.
a. Lisp isn't a single language, but a family of languages. There's Common Lisp, Scheme, Clojure and even Lisp Flavoured Erlang. They're all similar, but different enough that you can really shoot yourself in the foot if you assume code for one will do the same thing (or even work) in the other. C/C++ have a long history of reverse compatibility and a strong spec that insures interoperability between different implementations (mostly.) Java and C#, for all their perceived faults, have language definitions which are well defined.
b. Functional programming is different. Sure, you can do OOP w/ Lisp (google CLOS if you're unfamiliar with this.) But maybe it's not really a syntax thing and more of a "I have to bend my brainstem around a bit to do 'true' functional programming." (for some definition of the word "true".) And then there's the Haskell guys running around saying you can't do functional programming unless you've written a dissertation on category theory.
c. Other languages have stolen Lisp's functional thunder. When I was a young coder, Lisp was pretty much the only functional language out there. Sure... ML and OCaml existed, but this was before the intarwebs so we had never heard of them. Java and C++ have lambdas these days. And sure, they're not REALLY lisp-like lambdas, but they're close enough. And JavaScript lets you do reduce, forEach and filter, so you can get your monoid in a category of endofunctors on. And if all you're trying to do is irritate your co-workers, FORTH is better for doing that.
I use Scheme and a home-grown lisp-like language every day. I've taught a few co-workers how to cope with it. There are great benefits. But management doesn't pay to send me to conferences like the Java and C# guys get to go to. We also use SPITBOL for a few tasks just because it's A LOT easier for certain parsing tasks than Lisp and more powerful than awk.
We have a lot of engineers who's brains grok Java/Spring. They're reliable. We know what they can do in a given month. None of us Lisp guys want to do the same things. Larry Wall once said something like: "Languages do not differ in what they make possible, but in what they make easy." Lisp makes a subset of tasks an enterprise must perform easy. But it requires time to teach gigging coders how to use it effectively. Some enterprises just don't want to invest that time.
> a. Lisp isn't a single language, but a family of languages. There's Common Lisp, Scheme, Clojure and even Lisp Flavoured Erlang. They're all similar, but different enough that you can really shoot yourself in the foot if you assume code for one will do the same thing (or even work) in the other. C/C++ have a long history of reverse compatibility and a strong spec that insures interoperability between different implementations (mostly.) Java and C#, for all their perceived faults, have language definitions which are well defined.
This is a really good point. To think that Common Lisp and Clojure are somehow related just because they both use s-exp syntax is like thinking that Java and C# are somehow the same (or compatible) because their syntax is oddly similar.
So the question really is: Why aren't languages that use s-exp more popular? My answer is that s-exp lends itself to homoiconicity. But human brain is actually really good at detecting patterns, and homoiconicity is not compatible with human brain (although it is what computers understand better). Homoiconicity means everything looks the same (code is data), but when everything looks the same, it's hard to detect patterns. Contrast that with C code: just with a glimpse you can tell what each part of the code is doing because functions look different from definitions, etc.
In a weird way, human brain really likes irregularities (i.e., patterns).
> And then there's the Haskell guys running around saying you can't do functional programming unless you've written a dissertation on category theory.
I mean, I know you're trying to be funny and edgy, but because there's a risk of people taking you seriously, no, the Haskell community doesn't expect users to know category theory (there's only a fairly small niche (but vocal) of Haskellers that's into category theory) and most of the top Haskell luminaries (SPJ amongst them) wouldn't claim to know category theory at all.
a. Lisp isn't a single language, but a family of languages. There's Common Lisp, Scheme, Clojure and even Lisp Flavoured Erlang. They're all similar, but different enough that you can really shoot yourself in the foot if you assume code for one will do the same thing (or even work) in the other. C/C++ have a long history of reverse compatibility and a strong spec that insures interoperability between different implementations (mostly.) Java and C#, for all their perceived faults, have language definitions which are well defined.
b. Functional programming is different. Sure, you can do OOP w/ Lisp (google CLOS if you're unfamiliar with this.) But maybe it's not really a syntax thing and more of a "I have to bend my brainstem around a bit to do 'true' functional programming." (for some definition of the word "true".) And then there's the Haskell guys running around saying you can't do functional programming unless you've written a dissertation on category theory.
c. Other languages have stolen Lisp's functional thunder. When I was a young coder, Lisp was pretty much the only functional language out there. Sure... ML and OCaml existed, but this was before the intarwebs so we had never heard of them. Java and C++ have lambdas these days. And sure, they're not REALLY lisp-like lambdas, but they're close enough. And JavaScript lets you do reduce, forEach and filter, so you can get your monoid in a category of endofunctors on. And if all you're trying to do is irritate your co-workers, FORTH is better for doing that.
I use Scheme and a home-grown lisp-like language every day. I've taught a few co-workers how to cope with it. There are great benefits. But management doesn't pay to send me to conferences like the Java and C# guys get to go to. We also use SPITBOL for a few tasks just because it's A LOT easier for certain parsing tasks than Lisp and more powerful than awk.
We have a lot of engineers who's brains grok Java/Spring. They're reliable. We know what they can do in a given month. None of us Lisp guys want to do the same things. Larry Wall once said something like: "Languages do not differ in what they make possible, but in what they make easy." Lisp makes a subset of tasks an enterprise must perform easy. But it requires time to teach gigging coders how to use it effectively. Some enterprises just don't want to invest that time.