Metaprogramavimas yra kompiuterinių programų, kurios savo ruožtu rašo kitas programas, rašymo procesas. Metaprogramavimo procesas suteikia daugiau lankstumo kompiuterių programuotojams, nes darbas, paprastai atliktas vykdymo laikotarpiu, priskiriamas kompiliavimo laikotarpiui. Šis procesas atlaisvina programuotojo laiko sutelkti dėmesį į kitas užduotis, nes sutrumpėja laikas, kurio reikia rankiniu būdu parašyti programos kodą. Perkompiliuoti nereikia, nes metaprogramavimas leidžia programoms efektyviau spręsti naujas situacijas. „Metakalba“ yra terminas, suteikiamas kompiuterio kalbai, kurią naudoja metaprograma.
Objekto kalba yra tų programų, kurios parašytos meta programavimo procesu, kompiuterinė kalba. Refleksyvumas yra metakalbos terminas, kuris taip pat gali sukelti metaprogramavimą. Metaprogramavimas veikia įvairiais būdais. Vienas iš būdų yra programų programavimo sąsaja, leidžianti programavimo kodui pasiekti vykdymo laiko variklio vidų.
Kitas būdas, kaip veikia metaprogramavimas, yra leidimas programoms rašyti kitas programas per dinaminį vykdymo procesą. Šiuo atveju šiame procese naudojamos eilučių išraiškos. Nors šiuose dviejuose procesuose galima naudoti tą pačią kalbą, nėra neįprasta, kad kalbos teikia pirmenybę vienam procesui, o ne kitam.
Metaprogramavimas taip pat veikia apeinant kalbą. Tai leidžia keisti kalbas naudojant programų transformavimo sistemas. Ši procedūra suteikia metaprogramavimui laisvę naudoti kalbas, net jei kalba nenaudoja jokių metaprogramavimo savybių.
Metaprogramavimui šaltinio kodas nereikalingas. Tai galima padaryti laipsniškai kompiliuojant arba naudojant programas, kurias galima keisti. Kompiuterių kalba Lisp yra mėgstamiausia metaprogramavimo proceso kalba. Taip yra dėl šio tipo kompiuterinės kalbos paprastumo ir jos galios.
Metaprogramavimas, kuriame naudojama Lisp kalba, veikia leisdama įvertinti kodą programos apibrėžimo laikotarpiu, priešingai nei vykdymo laikotarpiu. Šis procesas metaprogramavimo kalbą ir pagrindinę programavimo kalbą paverčia vienoda. Kai tai įvyksta, ši Lisp rutina gali būti panaudota metaprogramavimo procesui.
Kitos kalbos naudojo būtent šį procesą su programos vertėju. Šis vertėjas dirba su programoje esančiais duomenimis. Konkrečiam domenui skirtos programavimo kalbos metaprogramavime yra kita forma, kurianti analizatorius ir leksinius analizatorius. Tai leidžia vartotojui naudoti įprastus posakius kalbai apibrėžti.