I agree with CLOS & MOP, but the loop macro is more like a pair of scissors that has been stuck into the Big Ball of Mud; it doesn't fit in with anything else, and makes it harder to use it for what it is really good for.
s/ CLOS and MOP seem like they are welded on to an otherwise good language, whereas loop is beautiful in all its loop DSL glory. /s
(In truth, I find that both have their uses).
Basically, different people disagree about which part of Common Lisp it is that they dislike. Unfortunately, this leads many people to believe that Common Lisp is not a very good language for programming in. To the contrary, people simply end up with very strong opinions about the different parts of Common Lisp that they _do not yet_ understand.
This is largely because it is trivial to implement your own object system or loop construct, so people think about the language in a completely different way. There is a mentality of 'Hey, I could do this better than what the standard does.'
You think about the way languages work differently.
My evidence for this is that I have never seen a C++ programmer complain about the for loop and describe a better for loop, you rarely see java programmers talking about how much better a different object system would be.
Again, this is covered in RPG's "Good news, bad news" (I'm busy, google it) and, to a lesser extent, "The bipolar Lisp programmer".
RPG's main argument is that Lisp is "MIT-style" the Right Thing, while C is "New Jersey-style" solve-the-right-problem-at-the-right-level. In other words, Lisp is like an expensive speaker system that's hard to configure correctly for ordinary sound systems, while C is something that works better for the average user.
The economics upshot of this is: target Lisp at the high-level critical applications Erlang and Haskell are targeting -- big telecom routing logical problems, flexible quant finance modelling, etc. Stop trying to replace the Scripting Language du Jour. You can't compete against C++; it's everywhere from Facebook to Arduino.
I have a blog post about this in the making, but in the meantime, I'd like to point out that there is zero quantifiable evidence to RPG's worse is better thesis. There are many aspects of Lisp/LispMachines vs C/Unix that can account for why they're used where they are, and he completely ignores the obvious ones that people have (and continue to!) complain about: C/Unix is cheap/free and runs everywhere. This wasn't the case for Common Lisp until the early 2000s!
I think RPG's good news, bad news came to the wrong conclusion and made some inappropriate dichotomies (Right Thing vs Worse is Better) that unfortunately have become memes that lead people astray.
> C is something that works better for the average user.
difficulty of using vs. difficulty of using correctly.
(And I'm not even sure worse is better makes sense in a modern context).
Difficulty of using a programming language (regardless of results) is inversely proportional to the amount of time spent writing code in that language. If the majority of users writes C or C++ code all day, C and C++ become 'better for the average user.'
If the majority of your users write Common Lisp or Scheme all day, CL and Scheme become 'better for the average user'.
C and C++ are much more difficult to actually use correctly (without regard for who the average user is), mainly because there are many more ways to screw up when you are working at such a low level.
The myth of Lisp being difficult makes me boggle. There isn't even a syntax to memorize!
Speed, safety, flexibility, dynamic debugging and compilation, optional static typing... You don't even need the higher level aspects of the language to reap benefits from these features. With Quick-lisp if I need a library I just load it and use it (plug and play).
Why not replace my C++ and scripting languages with Common Lisp if I can get the best of both worlds?
The economics of this is that if I already know Common Lisp, and am willing to teach those around me, I am a fool to use anything else.
I have never seen a C++ programmer complain about the for loop and describe a better for loop, you rarely see java programmers talking about how much better a different object system would be.
Amen to that! Except...
I'm a C & C++ developer who sometimes complains about for-loops, and often pines for dynamic dispatch. And any C developer who has written or used a FOR_* macro has complained about for-loops, whether she knows it or not.
I agree with CLOS & MOP, but the loop macro is more like a pair of scissors that has been stuck into the Big Ball of Mud; it doesn't fit in with anything else, and makes it harder to use it for what it is really good for.