Wednesday, November 16, 2005

The Refactored Self (Part 1)

The other day I got an email from someone who'd read my Self 2.0 article, and was contemplating making a similar change. They asked:

Is there anything you'd care to share about who or what facilitated this change?

My first thought was that I'd already spelled out everything in that article, and my previous post on The Multiple Self. But as I began to write this person back to point out the places where I'd already said the things I thought would be useful to him, I realized that I hadn't been as clear as I thought. Reading the articles from the perspective of someone who neither experienced what I had, who was not poring over my writings as if they were a Biblical scholar pondering the meaning of every word, it became clear to me that I had not, in fact, been that clear.

And so, in the process of replying to this email, I found myself making things much clearer, and in so doing I learned things that I already knew - but didn't know that I knew, if you know what I mean. As a result, I now have a bit more "theory" behind what I've been doing, which will hopefully make it easier for me to be explicit as well as clear.

If you want to refactor yourself, it's essential that you understand what refactoring yourself is not. In the Multiple Self, I spoke mostly about the duality of self between conscious and unconscious, and tried to paint a picture of the uncontrolled nature of your unconscious' "code". Your brain doesn't so much write code as evolve it. Think of it as a genetic algorithm, trying different responses on for size, and adjusting them according to external feedback.

Much like the robots in the computer game I mentioned, your behaviors are formed as distinct neural nets keyed by what you can think of as "modes". You end up with work modes, play modes, social situation modes, and so on. These modes aren't fixed, as your brain is a lot smarter than AIs; it can figure out its own learning parameters and decide what are appropriate delineations of functional modes.

"You" are not a direct participant in this learning process, so it's not surprising that you don't even notice your modes unless you think about it. You are a different person - literally a "multiple self"- in different circumstances, because one set of neural networks is enabled and others are disabled in each situation, based on that network's activation rules.

The Network Is The Program

It is these networks, or subnets as I call them, that I'm going to try to explain further in this post. In The Multiple Self, I explained that these are NOT the same thing as the limbic system versus the cortex, or anything else based on different brain "hardware" networks, but lots of people managed to project that idea on to what I said anyway. This time I'm going to try harder to use words that are less likely to have wrong associations for some people, which is why I'm calling them subnets.

A subnet isn't a hardware network, it's a software one. It's simply an associative memory. In its simplest form, it can be a simple stimulus-response "conditioned reflex". A "Pavlov rings the bell and you salivate" sort of thing. Or, it can be a complex set of skills, like those I'm using to write this article, or the ones I use to ride a bike.

You could probably equate a subnet with the NLP concept of a TOTE loop, but that probably doesn't help most of you. A TOTE loop is sort of the neural network equivalent of a "while" loop in programming, except that a TOTE loop has an entry condition as well as an exit condition, and it's always running.

 That's right, a TOTE loop waits until its entry condition occurs, and then it does things until an exit condition occurs, at which point it goes back to waiting. But in a practical sense, it's "always on", because your brain is a parallel processor, not a serial one. Your brain simulates serial behavior by chaining entry and exit conditions. One thing stops and another one starts, and it looks like they happen in sequence.

(Side note: When you're initially learning something, all the stuff you're trying to learn overlaps and interferes because it's all working in parallel. A lot of learning to get good at a skill is learning which subnets within the overall skill subnet should be suppressed or activated when, to effect a smooth simulation of sequential processing!)

Subnets (aka TOTE loop collections) are self-organizing. TOTE stands for "Test-Operate-Test-Exit", and it means that the TOTE loop has a goal (the Test-Exit part) and a condition that triggers action (Test-Operate). The classic example is hammering a nail: If the nail needs hammering, "operate" by pounding it. If all the way in, then stop. Of course, "pounding" is another set of TOTEs: if we're pounding a nail, raise the hammer. If the hammer is high enough, then stop. If the hammer is raised, swing it down. When it hits the nail, then stop.

Each of those mini-TOTES encodes smaller TOTEs, all the way down to muscle contractions. Luckily for you, all that "hand-eye co-ordination" learning you did as a kid took care of wiring up enough "primitive" TOTEs that you don't worry about any of it, and those TOTEs can just be used as subroutines by higher-level TOTEs.

If you get a complex enough set of TOTEs, you end up with what I think of as a subnet. Some subnets are simple stuff, like perhaps a subnet for being lively at parties. Others are more "meta", in that they are about things like maintaining a certain relative social status, or perhaps governing your relationships with the opposite sex.

It is really really really important to understand, however, that these are NOT hardwired things, and everybody ends up with different ones, wired partly by personal idiosyncracy and partly by circumstance. We end up with lots of basic subnet structures in common because we have common needs as humans, we statistically speaking have lots of similar experiences, and because there are only so many ways to respond to something that occur to us when we are children. But obviously, the size and content of my "make jokes at parties" subnet is going to be different from someone else's.

This seems obvious if we talk about jokes or tennis, but it's easy to miss when we start talking about childhood traumas and what you believe you can accomplish in life, or what have you. Don't be distracted by the contents of your subnets, and above all, do not personalize. If you have a subnet that encodes behavior or attitudes or feelings that you don't like, do not think about it as being part of "you". It's just a self-organizing neural network that formed in response to various stimuli. You are not stuck with it, and you can refactor it. But you need to understand how to do it in a way that works, not the way that doesn't work.

What Doesn't Work

First, let's talk about what doesn't work. Willpower. The first thing that happens when we don't like the output of a subnet is that we decide to do something different. If the subnet we're modifying is relatively new and un-entrenched, this is fairly easy to do, because we are more likely to be making a congruent decision, where every affected subnet agrees on the decision.

"Whoa! Stop right there," you might be saying. "You mean I can't change a subnet that doesn't agree with my decision to change it? What the hell good is that?"

Stay with me. I'll address that, I promise. First let me finish explaining why not getting a subnet's agreement doesn't work, and can't possibly work. Then I'll explain how to refactor subnets so they agree with you. As it turns out, there is a beautiful symmetry to the system, a kind of safety factor that helps ensure that random screwing around with your operating system doesn't crash your "sanity process". :-)

Anyway, agreement isn't a very good metaphor anyway. Let me come at this from a different angle. Your brain is a parallel processor that has no erase function. When you decide to "do something different", you may congruently believe that the new thing is what you should do. But, you are trying to create a new subnet from scratch that isn't connected to any of your existing behaviors. It's just an idea, and it doesn't have much in the way of support. In the meantime, your decision does nothing to erase the existing subnet, which is still running, all the time. So you get competition.

Life is Not A Workaround

Now, if you have enough willpower, and you're smart about it, you can work around this limitation. First, you can try to tough it out, and stick with it until you've built up a new habit. And, you can build in a parallel or downstream subnet, by noticing triggering behaviors and building alternate responses. An AA member calls his or her sponsor or goes to a meeting in order to avoid drinking. He or she avoids situations likely to trigger the drinking response, and so on.

This is a really tough road to slog, because all of this manipulation leaves the problem subnet completely intact. People in "recovery" have to basically live the rest of their lives in it, because they aren't really "recovering", they're simply using workarounds to avoid encountering the "bug" in their programming. It's understandable that people would use these techniques if they were the only tool available, but fortunately they are not. "Once an alcoholic, always an alcoholic" is a truism only by definition; it is the process of recovery that ensures its permanence.

(I'm sure I'm going to get angry emails and comments about my apparent disparaging of the AA religion, but please don't bother. Just remember that I'm saying 12 step programs and other behavior modification processes are workarounds. Sure, they work, but actually fixing the bugs would be much, much better. The part of those processes that establish the "recovery forever" dogma are there to help people understand that the workarounds are not a permanent fix. This does NOT mean that there are no permanent fixes, only that the "recovery" concept is not one. Also, if you're going to commit to using the workaround, it's counterproductive to wonder about possible fixes, so it's emotionally much safer to believe in a dogma that says there are no fixes. Then you can stop worrying about whether you're doing the right thing and commit to the workaround. This does not mean, however, that you have to go around trying to convince other people to use the workaround even if they can get a fix for what ails them; that's the point at which it stops being a useful crutch and becomes a religion.)

Anyway, so now you hopefully see why downstream workarounds create internal conflict, and require a lifelong struggle to get somewhere. The subnets you have aren't going anywhere, so creating new subnets doesn't do diddly except set you up for future "slips". Sorry, but that's just how it is.

What you can do, however, is refactor the subnets from "upstream".

Let me back up a second, because I just realized I've been talking about upstream and downstream like everybody knows what I mean. Some of you may not have read The Multiple Self, and in any case I was never really that explicit about it to begin with. In that post, I implied that we had lots of independent processes whose inputs and outputs were chained. Thus, a "downstream" subnet is one whose inputs are dependent on the outputs of an "upstream" subnet.

Upstream is In, Downstream is Out

Whenever a new subnet is created, it tends to be downstream of existing subnets, for a variety of reasons, but mainly because the kind of "situation" the subnet is created for is probably one that already existed before, and there's already a subnet there to recognize that situation. So, at the minimum, it will be downstream of the subnet(s) that identify the context for the behavior, and the ones that identified the goal for the new behavior.

The upstream/downstream relationship is somewhat dynamic and not entirely one-way. But it does help to explain why new subnets have relatively little leverage compared to an established subnet in a given functional area. Most likely, your awareness that you wanted to change your behavior was based on the output of the behavior, combined with some other subnet that evaluated the results. So, almost certainly, any attempt at behavior change is going to wind up wired downstream of the behavior itself!

"Okay, okay," you say. "So how do we build a new subnet, upstream of the existing one?" The short answer is that you don't. Instead, you just add new inputs to the existing subnet. This is a much cleaner way to refactor, and it's also a much safer change, less likely to destructively destablize your "program".

In computer programming, to "refactor" a program is to change its structure in such a way that its behavior remains unchanged - to "clean it up", in a sense, but without trying to fix any bugs or add new features. Refactoring yourself is almost the exact opposite: you change your behavior, but without changing your existing mental structures!

You simply feed the "program" new inputs that produce different outputs. The entire subnet structure "downstream" of your intervention point is not changed, at least not directly. The difference in inputs will probably cause some downstream rewiring (as in my Self 2.0 case), but these are not changes that "you" make. Instead, they come about organically, as a result of your built-in ability to rewire your responses.

This might seem like a bit of a paradox. If your system can rewire itself organically to make things run smoothly, how do you ever get into a problem to begin with? Part of the answer is that most of the time, you don't! Most people have thousands upon thousands of behaviors that were wired up for them automatically and which work perfectly, but which they never notice or pay attention to! As for the rest of the answer, I don't want to sidetrack for a detailed discussion, but the short answer is "local optima".

Or in plain English, perhaps a better way to put it is that your subconscious is quite good, but that doesn't keep it from painting itself into a corner on occasion! In particular, the long-term consequences of a "design decision" it makes often don't show up until the wiring is quite entrenched and hard to change because so many downstream things are depending on the original decisions. Once a subnet or set of subnets are sufficiently self-reinforcing, they may no longer even be responsive to external feedback that would tend to change them!

Anyway. Back to the inputs. You need to make a change in the inputs until the output changes. Or as I put it in my email to the person who wrote me the other day, "You have to bring your current insight back into the state of mind you had when you made the original decision. Otherwise, all you're doing is setting up two conflicting networks, not editing the original code." The key then, is to go backward in time and mind, to access the upstream state where the initial parameters of the problem subnet were established.

Unfortunately, however, I've run out of writing time for this evening, so I'm going to have to leave you hanging here. Before I finish explaining how to go back in time and mind, I'm going to need to also explain what you need to take with you when you go, and also what you're looking for. I'll also show you how all this stuff links back to the themes of Self 2.0 and my various articles about making decisions that stick, going beyond the dry theory of subnets and TOTE loops to issues of personality and hopes and fears and meaning and humanity and all that kind of thing.

But first, I wanted to lay the technical groundwork here, so that you will understand the difference between what I'm actually talking about, and all the dozens of crazy theories that people put forth in their comments and blog postings about The Multiple Self.

 Remember what I said back then: if you decide that what I'm saying is something that you already know, you are throwing away your chance to learn something new.

(Note: I wouldn't dream of interfering with anyone's individual choice not to learn, but I do ask that people not bother posting another round of "oh, this is just X" comments. The people who did that the first time can perhaps be excused just once, but anyone doing it this time is simply stroking their ego in public and expecting the rest of us to watch. What's more, their actions distract others from learning, too. Sadly, being the class know-it-all can be just as detrimental to others' learning as being the class clown. However, if you post "I thought this was just like X and then I thought it through and here are the things that are different", or other things that are both thoughtful and helpful to others, then thank you for participating! I look forward to hearing from you.)