The problem as I see it is when metaprogramming is used laterally or vertically. If code at a higher scope changes code at a lower scope, this makes a lot more sense than the arbitrary and profane directions of mutability that Ruby allows. So, like all things in Ruby, it's a matter of how the tool is used.
To metaprogramming! The cause of -- and solution to -- all of life's problems.
To metaprogramming! The cause of -- and solution to -- all of life's problems.