Going meta is a powerful technique to solve complex problems. By changing the level of abstraction at which a particular problem is viewed and solved, a much simpler solution can often be found. Applying the meta approach in software is especially powerful and has a long history. Intentional relies heavily on the idea of “going meta”.

Intentional builds on the idea that to solve a specific problem, develop a domain in which a more general problem can be described, and create the solution automatically as a special case. For example, instead of describing a particular problem in C++, express it in a language suitable to the problem domain and generate the implementation automatically.

Going meta is used across Intentional technology in a number of ways:

    • Meta Programming:  writing computer programs that write other computer programs. When we create a workbench, we create a way for business professionals to express their intentions, and from these intentions as input, we generate a computer program that implements those intentions.
    • Meta Languages: languages that operate on other languages.  Some of the languages we build and use define and operate other languages. For example our schema language is used to define what intentions are possible to express in the given domain and their basic structure.
    • Meta Application: an application of other applications. A meta application may use the data of other applications, or as event triggers, or be a higher level of abstraction as compared to the applications that it uses.

To learn more about “Going Meta” and Intentional, see the MIT Technology Review article about Charles Simonyi: Anything You Can Do, I Can Do Meta. From the article:

…every time he has confronted some intractable problem in software or life, he has tried to solve it by stepping outside or above it. He even has a name for his favorite gambit: he calls it “going meta.”