Homoiconicity
When a language's code is written in its own primary data structure, so programs can manipulate programs.
A language is homoiconic when its source code is represented in one of the language's own data structures — so a program can read, generate, and transform other programs as ordinary data. The term traces to the TRAC language (Mooers and Deutsch, 1960s), but the canonical example is Lisp, where code is a list.
Because (+ 1 2) is simultaneously a function call and a three-element list, a Lisp program can build and rewrite code with the same tools it uses for any other data. This is what makes Lisp macros so powerful: they are functions that run at compile time and return new code.
Homoiconicity is the structural face of the deeper idea of code as data, and it's what lets a language host a metacircular evaluator — an interpreter for itself, written in itself, in a single page.