2012-02-04 is sponsored by the word "homoiconicity" http://en.wikipedia.org/wiki/Homoiconicity .
Background: I’m going to choose which book about Clojure to buy - “Clojure in action” or (coming in late April) “Clojure Programming” (you can read it through O'Reilly Rough Cuts , half the pages are visible), I was struck that in both books this property - homoconicity - caused a great emphasis.
Since Clojure roots are based on Lisp, I called the "dead sexy" book - it really is that important. Well, I see that the macros are explained in detail, but I did not notice the accent mentioned. Now compare with this (quote from "Clojure in action")
This homoconicity also enables the Clojure s macro system.
It seems that macros would not be possible without it. Even Wikipedia's statement (link above) is more balanced, but none of these sources (*) take human factors into account in favor of English syntax.
If I'm not mistaken, a syntax macro (Lisp -like) may be possible in C # (for example), only with great effort from the C # team. But this is the value of the design team, not the users (?). The second is the question. If in real life you think “a + b”, and in the computer world you constantly translate it to “+ ab”, performance suffers (I see this for myself when I switched from C ++ functors to C # lambdas).
This praise that the Clojure programmer writes programs almost directly, like AST, scares me by reading that "by writing code directly in hexadecimal code, you not only learn the six system by heart, but also closer to the machine."
To summarize - I like metaprogramming, I like Lisp macros (I'm not Lisper, though), but I see two things here - macros and homoconicity. The first is, without a doubt, a big one, the second is not so much (as for my understanding), because it requires a person's need for a computer, and it has to be in a different way.
Question
Is homoiconicity really beneficial for people (end users of the language), or is it almost exclusively useful for language developers? Examples are very welcome!
Or just in case, if I rephrase - if the given language has Lisp -macros, will the "homocinity" add end-user productivity? Expresiveness? Or quite the opposite?
(*) I can’t be 100% sure, because I see only a small part of Clojure books, and I don’t read them, just evaluating them for purchase.
Update
Thanks to everyone for the answers, it’s a pity that I needed to choose only one solution :-), this does not mean that I value others less, this one is the most complete for me.