The art of metaprogramming, Part 1: Introduction to metaprogramming https://www.ibm.com/developerworks/library/l-metaprog1/index.html