I started writing something similar: I think the real reason most people don't like Lisp is because most people don't like to think in s-expressions. (Then I thought nah, nobody's going to like that, so I deleted it and just left the bit about libraries - foolish move!)
It's not only fear or laziness; I know two very good programmers who have tried Lisp and don't like it. Interestingly, both are Smalltalkers, though one was of the original generation that migrated to Java.
I wonder if it's that some people like thinking in trees and some don't. Human language has barely any nesting. Putting one parenthetical phrase inside another is already rare and that's just two levels. Parenthetical nesting is so difficult for humans to process that there's even a well-known hypnotic induction based on it (that essentially creates a stack overflow in a person's brain).
One of the guys I'm talking about has a programming style that's markedly linear (though not procedural). He likes chaining expressions together almost like noun phrases in English. For example, where in Lisp you'd write
(min y (max x 0))
he might write:
x.atLeast(0).atMost(y)
It's a trivial example, but enough to imagine more complex ones. The difference is dramatic if you think of a tree with many levels and the comparable unwound form. Of course, not all trees can be unwound in this way.
The converse is true, though: all chains of this form could be converted to s-expressions, so it's easy to imagine embedding this style into Lisp with a macro. That's the sort of thing that gets talked about naively, but never catches on. I think it would be a losing proposition. You'd lose Lisp's regularity, which is one of its greatest advantages. And the resulting programs would still have plenty of s-expressions, so you'd end up driving away the same group of people after all.
It's not only fear or laziness; I know two very good programmers who have tried Lisp and don't like it. Interestingly, both are Smalltalkers, though one was of the original generation that migrated to Java.
I wonder if it's that some people like thinking in trees and some don't. Human language has barely any nesting. Putting one parenthetical phrase inside another is already rare and that's just two levels. Parenthetical nesting is so difficult for humans to process that there's even a well-known hypnotic induction based on it (that essentially creates a stack overflow in a person's brain).
One of the guys I'm talking about has a programming style that's markedly linear (though not procedural). He likes chaining expressions together almost like noun phrases in English. For example, where in Lisp you'd write
he might write: It's a trivial example, but enough to imagine more complex ones. The difference is dramatic if you think of a tree with many levels and the comparable unwound form. Of course, not all trees can be unwound in this way.The converse is true, though: all chains of this form could be converted to s-expressions, so it's easy to imagine embedding this style into Lisp with a macro. That's the sort of thing that gets talked about naively, but never catches on. I think it would be a losing proposition. You'd lose Lisp's regularity, which is one of its greatest advantages. And the resulting programs would still have plenty of s-expressions, so you'd end up driving away the same group of people after all.