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.)