Some languages (most notably LISPs) exhibit a characteristic called Homoiconicity, which means that code is data and data is code. This makes a language very powerful because a program can inspect and manipulate itself. C# isn’t a homoiconic language, but using formalized object graphs, it’s often possible to formulate a problem in such a way that the program opens itself up for inspection and manipulation – essentially faking Homoiconicity in parts of the code base.
This opens up many powerful options, including easier unit testing, self-documenting systems, run-time changes to program structure, and more.
[vimeo 68236489 480 360]
Video producer: http://www.ndcoslo.com/