Homoiconicity is a word the Clojure community likes to use heavily. It’s a cool property of the Clojure language: it means that code can be treated as data. We as computer people are used to handling data: we can visualise it, analyse it and even generate it. What does it imply if we can do the same things with our Clojure code? I will investigate this question through a series examples and hopefully help you understand this abstract concept better.