XProc: Meta-Programming and Rube Goldberg
Declarative programming can take a little getting used to, especially if the standard mode of operation is working with languages like Java or C#. In essence, such programming requires that one thinks not of objects, properties and methods but rather of rules, filters and pipelines. Indeed, one reason that the future is looking increasingly declarative is that the web, as a network, does not lend itself well to being described as a collection of objects with methods and properties. That resistance is at least part of the reason why SOA (service oriented architecture) essentially requires that one builds an entire infrastructure on top of the web just to make it work properly.