From TunesWiki

Meta- programming is the term for the art of developing methods and programs to read, manipulate, and/or write other programs. When what is developed are programs that can deal with themselves, we talk about reflective programming.

I (Fare) have written an article on metaprogramming that you can read online.

From what is known of technical evolution, it can be advanced that most probably, like any technological activity, the art of computer programming will be done more and more by machines themselves instead of humans; Much like people don't hand-compute astronomic or physical stuff anymore, or wash their linen by hand, or have portraits painted to transmit their picture, and have machines do in their place. This way, they can focus on more interesting stuff, be it manipulating astronomical equations, building washing machines, shooting photographs, etc, or anything else that gained free time allows. And even the activities that replaced the former will one day be semi-automated if it brings valuable enough enhancements. So computer programming, which was once done at the level of electronic components, then at the level of binary representation of machine programs and data, then at that of human readable transcript of the former, then at that of simple languages that are more abstract while still mapping the underlying computer architecture, then at that of more and more abstract languages, will achieve such state that most usual work can be done entirely automatically from functional specifications, while most of the interesting work will lie in meta-programming.