Friday, April 29, 2011

On Meta-Leveling - Design Strategy #1

Importance of Formal Definitions

Like other commonly understood terms such as life, intelligence, empathy & morality, meta-leveling is easily understood and admits to many crappy semi-useful definitions.

Definitions which don't provide any useful insight into what the fuck the phenomenon actually is since they are fuzzy, slippery and squishy. This "wealth" of crappy inaccurate, incorrect definitions leaves people scratching their heads when boundary cases come up. As they inevitably do.

Are viruses alive? Most biologists don't know because they don't have enough insight into what life is. And they lack insight because they don't have a single fucking formal definition. Is having just one too much to ask? Mathematicians often work with half a dozen, and gain insight from each and every one of them.

Unyielding, rigid and formal definitions of common terms are exceedingly useful when you're pushing the boundaries. When you're not content not-thinking the same crap every other group-thinking moron is not-thinking about. And I'm not talking about average people here, I'm talking about academics who supposedly are intellectuals.

What Is Meta-Leveling?

Well, you've just had a fine example of it above. I intended to write an article about a formal definition of meta-leveling I developed a few weeks ago. It's in my mind now because just yesterday I developed a definition of transcending.

But before getting into a formal definition of meta-leveling, I thought it would be important to get straight what it is in the first place. And then I realized it was even more important to explain why a formal definition of meta-leveling is important.

What is meta-leveling formally? It is making a complete model of a system and then annotating the model by determining its most important elements. Which are almost always the elements with the greatest freedom of output.

How To Meta-Level

Okay, when I say model, you can forget UML or any other such crap. You'll see why in a minute.  You can also forget functional modeling since that only works for mathematicians. 90% of human beings are better suited to OO since human brains prefer SVO word order to VOO. So pick up Object Oriented Systems Analysis by Embley, Kurts  & Woodfield. It's available from Powells and of course Amazon.

Meta-leveling is nothing more than creating a complete OOSA model of the system whose parts you're thinking about then annotating the model. It's based on those annotations that you decide what parts of the system to think about. Because some elements (objects, relationships or interactions) are more free in their output than others (they're generally the ones that control the system).

Other elements contradict each other in the system. There may also be contradictions between elements and the system as a whole. There may be overly complicated elements that can be simplified. Or made weaker, or made stronger, or made more general, or more flexible, or more restricted depending on your concerns. There may be objects that can be unified together.

Meta-leveling is the process of creating this OOSA model and annotating it with all of these descriptions. Ideally, you do all this in your head without relying on paper. Or even conscious thought. So if you're talking about some objects in the system with someone but one of the other objects in the completed model is more worthy of attention and consideration then shifting the conversation to those other objects is said to be meta-leveling. The beginning of this essay is a good example. I had no outline nor any plan, the shift just popped up from my subconscious.

What Meta-Leveling Is For

Meta-leveling is known as Judgement in Bloom's original taxonomy of cognition. It is the highest form of cognition, one which not all people are capable of. It is also known as Evaluation. Judgement is the capacity to distinguish not just right and wrong (fitness to a predetermined goal) but good and evil (determining the goals themselves). Strictly speaking, judgement is broader than determining good and evil. It's just that 

Eliezer Yudkowsky makes a big deal of recursion. In planning, recursion is not just considering your goals and plans, but the other players' goals and plans. And in double recursion, you assume that the other players have considered your goals and plans, so you account for that as well. Well, meta-leveling is so much more powerful than recursion that it makes recursion look like a weak pathetic thing.

After all, meta-leveling was the crucial step required to go from playing a game using rules to playing against the other players. Recursion is nothing compared to meta-leveling since it stays on the same level always. Eliezer Yudkowsy harps on recursion because he is incapable of meta-leveling, because he is incapable of synthesis.

By meta-leveling the first time you go from playing the pieces of the game, to playing the players in the game. By meta-leveling a second time, you change the game's rules, outcomes and players entirely. It's like going from playing against your opponent in chess, to playing 3 dimensional fantasy chess where the winners are the best 3 cooperators out of 5 players.

Meta-Meta-Leveling

Meta-leveling twice in a row is called transcending. The first meta-leveling step gave you a model of the system and identified its most important elements. The second meta-leveling step gives you all the ways this system can evolve in future, all the forces that direct its evolution, and the entire space of possibilities for you to redesign the system. Transcending a system means to redesign its entire architecture so that it is no longer recognizable as the original system. It is not an improved system, it is radically different and better.

On reflection, my definition of meta-leveling isn't nearly as formal as I'd like. Meta-leveling is not just creating a model, it's annotating it. Doing it a second time is creating a super-model and annotating that. I didn't make this correspondence explicit enough. I also didn't point out that every time you model (or meta-level) you make things more generic, more abstract. Now there are multiple types of super-models but this is exactly as it should be since there are multiple aspects to any system. Every real system admits to multiple models, and every model admits to multiple super-models. Mathematicians ought to be very familiar with this.

In particular, if you create a model in the OOSA style then the OOSA book is one possible super-model. It's not a very interesting super-model (or form of transcending) so don't waste your time on it. If you didn't use the OOSA style but just did it in your head, then a model of your mind is the super-model that replaces the OOSA book (and a theory of the human mind replaces the endnotes of the OOSA book). That's at least more interesting than the book. What I described at the beginning of this section is a reliably interesting type of super-model for a systems designer.

It now seems dubious to me that there can be more than two types of meta-leveling. The first goes upwards to the conceptual space. The second goes upwards to the realization that contains the concept. What else can there be?

Meta-Meta-Meta-Leveling

By meta-leveling three times in a row, you leave the system entirely behind you to enter into the realm of generic systems design. If the level is chess, the meta-level is a rulebook on chess and transcending is fantasy cooperative chess, then meta**3 is talking about the nature of meta-leveling and how important it is for systems design. In other words, this blog post.

Which reminds me, meta-leveling and transcending are the #1 and #2 tools of any systems designer. If you can't do them then don't even bother. Another crucial tool is empathy. Now, the really funny thing is that empathy's formal definition is: the capacity for formation of other-identities (to complement self-identity). Psychopaths are incapable of this, probably because they lack a crucial form of synthesis.

Multi-Leveling

Now what makes this funny is that formation of identities for others is ... meta-leveling. What Dabrowski calls "multi-leveling" (formation of a complex and utterly accurate self-identity) is ... meta-leveling your own mind. Empathy is just ... meta-leveling other people's minds. So you see, the top three tools of any systems designer are meta-leveling any system, meta-leveling twice in a row, and meta-leveling human minds. Hmm, I sense a pattern here. It's almost like meta-leveling is important.

Incidentally, Dabrowski was incapable of multi-leveling or meta-leveling, which is why he didn't have any insights into the process. He never realized that multi-leveling was meta-circular (the whole of the meta-level exists as a subpart inside of the level it describes) or that it was related to consciousness (which is also meta-circular). In fact, he never understood multi-leveling as the formation of a complex and accurate self-identity. Beyond identifying that the process existed and that it had something to do with ethics and integrity, he was in the dark about it.

Dabrowski also made up the crappiest theories about the nature of Development Potential (people who can multi-level). But his estimation of less than 10% of the general population capable of multi-leveling sounds about right. Of those 10% less than one tenth are naturally prone to multi-leveling because they use their synthesis more heavily than their analysis. Synthesis is what drives the process after all, while analysis just keeps it in check. These one or two percent of the population will try to meta-level everything they come across.

Who Can Meta-Level?

It's not every person that can meta-level. The process can be described so that any person capable of logic will be able to follow it, but it takes synthesis (creativity) to actually do it. Engineers and mere programmers for instance, will never be able to meta-level. So why bother describing it? So that I can say in your face you pretentious assholes! Because they claim to be able to do synthesis and the truth is, they can't.

Meta-leveling is the province of people capable of both synthesis and analysis. It takes synthesis to create the original concepts and it takes analysis for those concepts to be both correct and also to keep the meta-level strictly separate from the level. People lacking in logic are prone to thinking the map is the same as the system it describes, that by changing the map, they change how the system works. This is literal magical thinking.

But let's set aside the pretentious fuckers who can't meta-level but desperately want to be thought of as just as good as those who can. For those who possess both analysis and synthesis, and thus CAN meta-level, the whole process of meta-leveling is something that can be learned and practiced.

Skill and Talent

Of course, a person will show skill at meta-leveling only when they can do it subconsciously. When they have no need to draw out the diagrams on paper at all. This is why I said UML software is worthless. If you need computer software to help you meta-level, you're hopelessly incompetent. And then of course there is the question of talent. Let's say that a person shows talent only if they're able to meta-level subconsciously before ever learning to do it consciously.

If you're able to skim the first couple chapters of Object Oriented Systems Analysis by Embley then flip to the endnotes (where they have a formal OOSA model of the OOSA modeling formalism) and make sense of them then congrats, you've got talent. If you're able to read that book and this article, then think back to how you were meta-leveling years ago as an adolescent, then congrats you've definitely got talent.

And if you haven't got talent at it, then go back and reread the previous section where I go on about how the overwhelming majority of people will never do it in their lives and couldn't do it even if there were a loaded gun stuck to their heads and their lives depended on it. Be glad that you can do it at all. Be glad you can learn. Be glad and appreciate your cognitive gifts.

And if you can't meta-level at all? Fuck off.

Friday, April 01, 2011

Why Software Is Stupidly Slow

People often bitch about software being slow and they have every reason to. Modern hardware has plenty of CPU and GPU cycles to spare, so why the fuck is it so slow? The software I have to use that's slow as molasses is Office, Opera and Firefox.

The first thing I observe is that these pieces of crapware do things I never asked them to do, I don't want them to do, things I don't need them to do, things I don't want them to do, things that nobody anywhere either wants nor needs them to do. Let's look at some examples.

Opera keeps all 30 pages I have in tabs immediately renderable. Did I ever ask it to do that? Like fuck I did. Most of those tabs are things I haven't looked at in days. One of them I hadn't looked at in 3 weeks.

Inevitably those 30 tabs will grow to 120 tabs, which will have Opera thrashing for no good fucking reason and then I'll save them all as a new session (rendering them unusable) and start from scratch.

If there were a better way to organize tabs than multiple windows (which are difficult to use and unhelpful) then I would use them. Not that moving the tabs to another window would help since Opera insists like some kind of fucking moronic retard to keep those tabs immediately renderable too!

Who the fuck decided it was a good idea to keep every bit of cruft a web user left opened immediately renderable? What kind of fucking retard at Opera decided on this dys"functionality"? I never wanted this feature, I never asked for it, I don't need it, NOBODY needs it. Nobody on the fucking planet needs it!

Nevermind that it is dysfunctional and fucking harmful, nobody needs this.

The same goes for Firefox and Office. I only open Office to read RTF files. Do I fucking need all this "functionality" that takes 30 seconds to load? For fuck's sake, does any Office user need it?! I would dearly love to know whether more than 10% of core Office users need to regularly change between 50 different fonts. I use one font, ONE, Sylfaen, that's it! 

It seems to me if software did ONLY what every one of the core users needs (instead of what's expected by the programmer's peers and tradition, or what the programmer thinks might be nice, or what users say they want or ask for, or what some user wants, or what non-core users need) then so much crap falls away in the code, so many "features" go away, that there's plenty of computing power for what's actually needed.