Thursday, January 04, 2007

Full Brain Programming

A Geek's Take on Multi-Hemispheric Neurology and Software Development

The Brain

The human brain is separated into two distinct hemispheres, split down the middle front-to-back. Anyone familiar with basic biology will have seen this on cross section diagrams, as well as the generalized labels of specialization for the two halves. While it's true that the functions of higher consciousness within the neocortical regions of the respective hemispheres differ, it's also important to note the operative similarities and redundancy in the design as well.

Each half is equally paired to sensory stimuli as provided by taste, smell, sight, touch, and sound, as well as input from the limbic and primitive sub-areas of the brain which process and filter reactions to those stimuli before insertion into consciousness. The redundancy is not perfect, however, in that the signals received are those generated by a fixed half of the body directly wired into the respective hemisphere. The simultaneity of the combined experiences prevent this from being a disorienting experience however (since anything we hear with one ear is generally heard with both, for example) and is reassembled into a single contiguous phenomenon, leveraging hemispheric disparities to be able to proved depth perception and rudimentary echolocation, etc.

The real divergence comes when one reaches the frontal lobes. These portions are responsible for housing operations dealing with conscious thought and complex reasoning, doing so with a high degree of specialization. The right tends more toward the spatial, intuitive, abstract, emotional and creative tasks, while the left provides language, critical and logical thought, and temporal referentiality (chronological awareness). These are not separations of "personalities" inherently conflicted with one another, nor a contest of dominance within which there is any "proper" way to think or behave. Personality is a construct expressed across both sets of functions, and what matters to the personality matters equally within them, in their own ways.

Hemispheric (Un)Cooperation

But they don't communicate very well with each other. Which is not to say that there is an inhibition or implicit miscommunication which will confound information as it crosses between the the two. There is also, to borrow hardware design terminology, no latency or bandwidth restrictions on the communications bus. This bus takes the form of the corpus callosum, a dense bundle of nervous (meaning "of nerves," not "anxious or excitable") fibers whose only duty is to provide a channel by which information and data may be exchanged.

The difficulty in exchanging that data is based on differing APIs: the right hemisphere has no mechanism to appreciate the number 5, although it can be familiar with the shape and sound of it, and spatial groupings which miraculously come to the same total when counted. Similarly, the left hemisphere cannot comprehend the color yellow other than as a word (non-pictorially), wavelength of light, or hexadecimal RGB representation (my favorite tends a little more toward the golden variety with a touch more red/less green, an #FFED00). How then is it possible for a word to evoke spacial concepts, or for creative concepts to be placed within the logical structures required by software development?

It's interesting to note here that complex structures are almost always based on abstract spatial relationships rather than strict logic, and it is the rigidity of rules in the medium in which they are represented which forces them to appear complex. Most accountants are left-handed, showing a clear preference for the abstract processing capabilities of the right hemisphere - meaning they're also cut from the more emotional and creative fabric of society, directly opposite of the bean-counter exactitude embodied by the more simple and stereotypical book-keep the word "accountant" usually invokes. Real rules of accounting are difficult for us right-hander folk to grasp at a glance because we make the mistake of attempting to process them solely in within the logical realm of the left hemisphere, rather than correctly mapping them into their true spatial connotations on the right.

How does one establish this ability to do that translation if the two halves don't speak the same neurological language?

Memory & Concurrency

The first way is through the parallelism of experience, mentioned briefly earlier, and then through concurrency of processing.

Memory is stored across the entire brain as coordinated by the hippocampus (found in the limbic system atop the brain stem). Even though there are very different types of memory we'll treat them under the generic class name here just to be easier on the science. An event/experience or concept is stored in the brain the same way it is initially represented, as a series of impulses in a variety of locations. The memory is committed to long term storage as this impulse pattern is reinforced by branching of the synapses, which is literal physical growth and extrusion on the dendrites of neurons. The formation or reinforcement of the connections created by this growth make it more probable that subsequent stimulation in similar areas will reproduce a similar pattern or portion thereof, like the path-of-least-resistance in any electrical circuit. Trigger cells, regular neurons which just happen to fill this particular role during the memory formation, are then specifically assigned to be the gateway to the reproduction of the pattern in its entirety. The number and strength of the connections to the trigger help determine the likelihood and ease with which it can be remembered. Thus all habit and practice in the brain changes its shape, and does consume massive amounts of resources from the bloodstream; it's OK to be tired if all you've done all day is think really hard.

Since the experience takes place in both hemispheres simultaneously, there is a temporal coordination: a time-index which can be used to reproduce coinciding patterns. Returning to the example of color, a child knows what ____ is long before it knows what "yellow" is. Putting the two together is a matter of hearing the word at the same time the color is physically present, in enough different contexts (different objects of the same color, different textures and materials, smells, etc.) that the color stands out as the sole common right-brain event which overlaps with all of the times the funny-looking big person has been making the same new sound with their face. Once this gels and is well practiced, remembering and interacting with the stored fact in a variety of partial contexts becomes easier because the whole pattern is subconsciously reiterated. Largely through the acquisition of language, the process of learning simultaneously with both halves of the brain becomes a simple habit.

Once enough patterns are stored in this fashion, dwelling on their recall while exploring new territory creates the opportunities for the synthesis of new associations based on the discoveries of either hemisphere, still effective across the whole because they've coincided temporally once again.

The Full Brain

How then to use this to the advantage of a software developer or any discipline requiring interaction with highly-complex systems? Making the most of the specialization of both halves must be done by engaging each of them fully in the task at hand through the channels in which they are most apt.

For me, I'm barely able to function when I crack open a new API regardless of whether or not I'm already familiar with the language. The features and structures required by the unfamiliar interfaces have to be walked through, step by step, module by module until I can grasp them categorically and generically. Even then it takes a fair amount of practice within that framework before it becomes comfortable and intuitive, which it manages to do all at once with enough of the right kind of exposure: it just clicks. It is then that an analog for the logical structures has been created, and I can leverage the spatial navigational strengths of the right hemisphere to make my way around the program seemingly blindfolded.

The spatial mapping happens piece by piece, understanding the code as its general "physical shape" (patterns of line lengths or syntax highlighting), its relative position within its containing file (amount of code above vs. below), and more nebulously it's "flavor." This is an intentional synaesthetic translation of logic into kinds of phantom sensations: how the code makes me feel regarding its elegance and efficiency, the degree to which it needs to reach out to other modules vs. self-containment/sufficiency, etc. These become aspects of spatiality, but not something that can be drawn well or represented in three-dimensions because it is abstract enough to be not so constrained. The process may sound exotic, but happens largely unconsciously, and most developers do it to some degree or another.

Once a portion is in place, others then build off of it by using it as a point of reference, and soon the entirety of the application has a feel to it as well as a virtual expansive layout. The whole of this "abstractification" is like defining a subroutine - a simple function which stands in for a body of logic and can be comprehended simply by identifying the name of that function in the future. This allows for a higher-level overview, essentially zooming out on the granularity of the code all the way to an architectural flow diagram. It's the reason those things are ever drawn in the first place, and these methods of whole-brain analysis are the key for reverse engineering or developing the visual/logical relationships which result in a usable, maintainable product without overloading the mind. Which means, for you non programmers out there, we have some secret tricks we do to make all the gobbledygook into something meaningful; participation in this field is not an automatic indicator of intelligence or even aptitude (just take a look over at TheDailyWTF, which celebrates "Curious Perversions in Information Technology").

The conclusion? Try bringing the unconscious analysis to the foreground and more intentionally leverage the kinesthetic aptitudes. There are several ways of doing this and even artificially jump-starting it (diagramming with a non-dominant hand, for instance). Perhaps in a future article I'll explore exercises and tests designed around that, but for now this should be enough food for thought to expand your universe just a little more. And if not, it was a free read.

1 comment:

Anonymous said...

I have been roaming the internet to see if there is any material available on "Right brainers and software development". I am happy I came across your article. I grasped quite a few points you were trying to say, but I am waiting for the spatial representation to slowly emerge for this article :) I have taken a printout and will be going thrugh it multiple times.

My goal in searching the web on such articles is to see what techniques/strategies exist to make right brainers work well in this field. Like you too, I can barely function when I crack open a new API while my left brained collegaues seem to have no such problem. This initial phase is also the most tormenting to me as I can't get work done. But, I know that once the spatial representation of the code/system forms in my brain, nothing can stop me.