I agree with the author that meta programming may be useless in most cases. But while writing a framework (DHH writing rails or brizany writing Sinatra or hundreds of others), meta programming creates pleasant interfaces.<p>That said, I think all programming is meta programming; like the next abstraction is the generalization of the current abstraction; the first 1956 fortran allows to metaprogram the assembler code or the assembler code metaprograms the machine code or java the JVM byte code etc. Ruby makes meta programming in runtime, so that your Ruby code creates your interpreted-ruby-code.