Homoiconicity is a long word our 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, even while the program is running? I will investigate this question with examples from clojure.spec & hopefully help you understand this abstract concept better.