Wow That Is So Meta
Have you ever read a chat, comment section or listened to a conversation and heard the phrase "Wow that is so meta?". But what does this actually mean?
This article tries to investigate the meaning of meta, and complement it with my personal definition.
I would estimate from the people who are able to reach, navigate and read my blog 99% are familiar or have at least heard the concept of meta-data. So this is where I will begin.
Metadata (or metainformation) is "data that provides information about other data" but not the content of the data itself, such as the text of a message or the image itself.
Says Wikipedia. So from this definition we could infere the abstract notion that meta "is something about that same something". Let's validate our theory. Another good example where this is commonly used is with the term meta-physics.
Again consulting Wikipedia:
Metaphysics is the branch of philosophy that studies the fundamental nature of reality. This includes the first principles of: being or existence, identity, change, space and time, cause and effect, necessity, actuality, and possibility.
When I first researched meta for myself, this is where I stumbled, based on my previous notion, I would expect the answer to be "Physics about physics". But in this sense we have something a bit more vague. Something more fundamental than physics. Before we can apply physics to reality, we first need to define what reality is. Before we can define what forces exist, we must define what existence is. So in a sense it is the Physics of Physics. Depending on how we want to define the semantics of Physics. If we were to interpret Physics in a philosophical sense: That it defines the inner working and mechanisms of reality, then meta-physics: Defines the inner working and mechanisms of the inner working and mechanisms of reality.
This is also the point where we need to be careful not to mix up concepts. This last definition sounded a lot like recursion. Like the old joke "To understand recursion, one must first understand recursion". I will soon publish another article dedicated to that distinction. So for now it's sufficing to say, they are related but not the same thing. At least in my humble opinion. Before I elaborate more on this notion, let's have a cross-examination into other different meanings of meta.
Meanings of Meta
One of the biggest false friends when it comes to Meta is in Gaming. Where we say the Meta-Game. That does not refer to the game about games, but about the most efficient tactics available which essentially sets a benchmark for the effectiveness of future and past strategies. It is a vital aspect of multiplayer games to refresh what strategies work best, by presenting new content or adjusting the effectiveness of existing aspects, commonly called buffing and nerfing.
Next we come to the marketing buzzword "metaverse". Here meta could be replaced with Virtual, Super, Ultra, and quite honestly I don't care. A Metaverse is as related to the concept of meta as javascript is to java. It is a branding, and became a prefix to relate the object to a company, Meta in this case.
Now we come to the real meaning of meta.
Meta (from the Greek μετά, meta, meaning "after" or "beyond") is a prefix meaning "more comprehensive" or "transcending"
Again from Wikipedia
In epistemology, and often in common use, the prefix meta- is used to mean about (its own category).
I once read a joke about puns, which embodies this phenomenon very clearly
"I really tried hard to find a good pun. I wrote down so many. But no pun in ten did."
The joke plays with the similar sound of "But no pun in ten did" with "no pun intended", which is the common phrase used to indicate an accidental pun in conversation. At its core it is a meta-joke, it is a joke about jokes. And for most people that is enough to call it a day.
My interpretation of Meta
But I would like to go deeper. Not only is the content of the joke a joke, but the very mechanism that makes the joke funny is an example of the category the joke is part of. A pun. The vehicle for a subject becomes the subject. This for me is the true meaning of meta.
Let's dive into another example. In one of my courses in my old media design programme, we had to analyze the design of books. We had to apply what we had learned and evaluate how well the common elements of books have been adapted to the subject the book tries to convey. We got handed a blue book. The cover was blank. Inside the book was very convoluted. Chapters disarranged, no pagination. Honestly I don't remember many details, but what I remember is, that I had to present our findings. I enumerated all of our observations, and it was in that moment that I was so bold to claim "I think this book is about what a book is not supposed to be", a book about books. A meta-book. Which was the correct answer, by the way. (And not one the lecturer was expecting)
If we compare it with something like a book containing a book review. We could also argue that that book is a book about another book. But that is exactly the point. For me that is not a meta-book. The book is not talking about itself but about another book. Mostly concerned about the content of a book and not the essence of a book. We can fall into the trap to classify everything too quickly as meta, when in reality it is not.
Let's move to some programming examples. Let's start with types. Like a List containing a List. Is that meta? The vehicle List contains itself. Does it evoke the same notion as our previously mentioned meta-book? Not really. It is just a nested list. It was designed to contain other lists. And can do so up to an indefinite depth. Ok so then let's step outside the domain of types and perceive programming as a whole. A Program that produces another program. A compiler? If you think of it, it is a program that generates another program. Also not really, because this is just a translation process. There is however an exception for me personally. That of boot strap compiler. A compiler written in the same language that it is supposed to compile to. A C compiler written in C, for example. As I have said in another article, a language is just a collection of symbols that access an underlying implementation. So a bootstrap compiler defines that implementation, the very meaning of a language, in terms of that same language. That show-cases that paradoxical kind of self-reflection that for me is so fascinating about meta. Then there is the more commonly used term meta-programming. Code that can interpret, change or generate itself. Now there is different levels of how powerful the meta-capabilities of a language are. I would say the general shelf-top preprocessor commands, like the C and C++ Directives are very low on that spectrum, followed by general-purpose Macros. They are more like templates filled in by the compiler before it gets compiled. However true meta-programming is achieved for me at runtime, if the code can read, transform and generate itself while being executed. And no other language does this better than Lisp. In Lisp programs are data and data are programs. First of all lisp is designed as a collection of lists, similar to how Abstract Syntax Trees are structured. This makes it very easy to generate code. You create a list by appending values and tokens (symbols). Then Lisp has function such as eval and quote. Which are on the opposite side of the same coin. Eval turns data arranged to lists to executable programs, while quote turns executable code to lists as data. And there is much fun to be had with this concept. Which brings me to my personal exploration of this mechanism.
My exploration of Meta in Programming
For my admission of my current Programme in Creative Technologies I decided to explore the notion of meta-programming in an artistic context. At the time I was reading the book Gödel, Escher, Bach - An eternal golden braid. I will not attempt to sum up this book to avoid oversimplifying it. But at its core it tries to showcase the incompleteness theorem of Gödel, talking about formal systems and generally the philosophy of logic, often drawing similarities to Music from Bach and mind-bending artworks of M.C. Esher. It embodies many of the concepts of each chapter in metaphorical stories. Some of the topics that spoke most to me were "The location of meaning" and the chapter about recursion and meta. In the former chapter the book talked about how the process of DNA synthesis can be understood metaphorically as a Jukebox that plays a song, containing the instructions to build a more complex Jukebox containing the instructions to build another more complex Jukebox.
I found this comparison intriguing and decided to explore it programmatically. Instead of making it about music, I abstracted the ideas from music composition to visual composition. I then used Clojure, which is a modern dialect of Lisp running on the JVM to build a generative Artwork.
The idea of the artwork is that the user can interact with an optical or mechanical input device, allowing him to translate an organic "movement" input to a an abstract sequence which is sampled and turned to the seed for a long self-reflective evolution. The seed gets translated to abstract instructions. These instructions would then be mapped to a list of graphic's drawing and transformation functions on one side. And then mapped to a list of list manipulation and mutation functions, which after being composed to one compound function, would receive the abstract sequence itself as input to build the next iteration. Like this the instructions would interpret themselves and produce the next more complex generation.
I have written two papers about this project, which you can find on my personal website if you would like to know more about it. This turned out to become a project showcasing meta-algorithmic-art. If we understand algorithmic-art as art that is implemented by following a sequence of steps, meta-algorithmic art is a sequence of steps implementing a sequence of steps implementing the artwork.
Takeaway
Meta is a very powerful concept to know especially as an artist, as an effect and as a programmer as a tool. As a final example showcasing how powerful meta-programming can be, have a look at Unreal Engine's Reflection system. In essence it is an entire framework of Macros and Build tools which enables the code to be self-aware as core component to enable Blueprint scripting. Lifting the functions from one programming domain (C++) into the domain of a GUI (Blueprint and Visual Scripting). I personally believe once you are able to reach a level of proficiency in a language to be able to do meta-programming, like in the original meaning of the word "meta", you have "transcended" that programming language and truly mastered it! At least mastered it's syntax.