I&#x27;ve only played with Lisps, so can&#x27;t quite say I&#x27;ve had the &#x27;enlightenment&#x27; experience, but, realizing that &quot;I know how to manipulate lists...and my program is just another list (of lists of lists of lists)&quot; was a bit eye opening.<p>The regularity of the language makes it so that taking advantage of this is far more reasonable (both a logical thing to do, and something that can be reasoned about) than any other language I&#x27;ve seen (where the closest equivalent would be the eye gougingly bad decision to read in your code as a string and perform string operations to munge it and then &#x27;eval&#x27; it. Or, arguably, since this is obviously metaprogramming, reflection, but there it still ends up being something &#x27;special&#x27;, something very different than just writing a program, and as such is still frowned upon. Lisp is homoiconic, and realizing the ramifications of that made metaprogramming go from a &quot;avoid if at all possible&quot; to just another tool, one that sometimes provides the most elegant solutions, and is reasonable to choose in those situations)