'''Metaprogrammeerimine''' on selliste [[programm]]ide kirjutamine, mis manipuleerivad andmetena teisi programme (või iseennast), või mis teevad osa tööst, mida harilikult tehtaks programmi jooksmise ajal, juba kompileerimise ajal.
Keelt, milles metaprogramm on kirjutatud, kutsutakse metakeeleks. Keelt, milles kirjutatud programme manipuleeritakse nimetatakse objektkeeleks. Programmeerimiskeele võimet olla iseenda metakeel nimetatakse [[reflektsioon]]iks.
Reflektsioon on väärtuslik metaprogrammeerimise tööriist. Samuti tuleb kasuks kui [[programmeerimiskeel]] ise on esmajärguline andmetüüp (nagu näiteks keeltes [[Lisp]], [[Forth]], [[Rebol]]).