Metaprogramming can be described in two ways:
“Computer programs that write or manipulate other programs (or themselves) as their data, or that do part of the work at compile time that would otherwise be done at runtime”.
More simply put: Metaprogramming is writing code that writes code during runtime to make your life easier.