Marshall Rosenberg (Nonviolent Communication, p. 16):

Long before I reached adulthood, I learned to communicate in an impersonal way that did not require me to reveal what was going on inside myself. When I encountered people or behaviors I either didn’t like or didn’t understand, I would react in terms of their wrongness. If my teachers assigned a task I didn’t want to do, they were “mean” or “unreasonable.” If someone pulled out in front of me in traffic, my reaction would be, “You idiot!” When we speak this language, we think and communicate in terms of what’s wrong with others for behaving in certain ways or, occasionally, what’s wrong with ourselves for not understanding or responding as we would like. Our attention is focused on classifying, analyzing, and determining levels of wrongness rather than on what we and others need and are not getting. Thus […] if my colleague is more concerned about details than I am, he is “picky and compulsive.” On the other hand, if I am more concerned about details than he is, he is “sloppy and disorganized.”

It is my belief that all such analyses of other human beings are tragic expressions of our own values and needs. They are tragic because when we express our values and needs in this form, we increase defensiveness and resistance among the very people whose behaviors are of concern to us. Or, if people do agree to act in harmony with our values, they will likely do so out of fear, guilt, or shame because they concur with our analysis of their wrongness.

For me, the most difficult part in learning to communicate nonviolently has been unlearning this widespread cultural practice of judging, classifying, and criticizing. I knew from my liberal arts background that there are two sides to any argument. But I did not really understand how taking a side, no matter which one, leads to violence and alienation. And I did not understand the depth of the notion that all judgement is self-judgement. (By far the greatest casualty in my past taking of sides was myself, as I heaped blame and judgement on what I saw as my own shortcomings.)

Note a crucial subtlety here: it does not follow that judging and criticizing are wrong. Such a statement would be a paradox, because wrongness is a form of judgement. Instead, I merely choose to avoid engaging in such activities as judging and criticizing, now that I see how they can lead to shame and violence. (Unfortunately, even that last sentence will imply judgement to anyone who is steeped in the prevailing culture of “should”.)

The subtitle of my blog used to be: “Because interesting thoughts deserve to be written down.” I’m now concerned that the word “deserve” implies rightness, which is a form of judgment. So I updated the subtitle accordingly: “Ideas I wanted to remember and share.”

User interfaces all the way down

When we think of user interfaces, we normally think of what’s provided to “end users” of software or devices. But programming languages are also user interfaces, because programmers are people. In this regard, textual programming has been the overwhelmingly dominant user interface for creating software.

We know that different user interface techniques are better and worse for different tasks. For example, text editing is an efficient user interface for writing email. Graphical drag-and-drop interfaces are efficient for creating graphics and illustration. Spreadsheets are efficient for calculating many rows of numbers.

It’s not at all clear that text editing is the best imaginable user interface for creating software. It may be optimal for some of the aspects or tasks that are involved in software creation, but probably not all or even most. For example, it’s relatively clumsy to design, debug, and iterate on graphical front-ends using a textual representation. That’s why Apple and others provide tools like Interface Builder to help with some of these tasks in a more visual way. But even more abstract tasks such as algorithm design may be significantly improved with visual tools for designing, debugging, iterating, and testing. Which specific user interface is most useful depends on the details and purpose of the component being built.

In traditional programming, each component has a purposefully-limited “application programming interface” (API) that defines what the component can do. To a programmer, a component’s application programming interface is also its user interface. That is, the tools that a component provides to a programmer consist of the component’s API plus any accompanying documentation (typically, all in text format).

What if such components — intended for software engineers — also came with purpose-built user interfaces? For example, a component that performs statistical computations could come with user interfaces for inputting data sets, tweaking parameters, and testing outputs. A networking component could come with user interfaces that simulate network performance over a range of conditions and help programmers choose appropriate settings. A component that provides a front-end widget such as a button or slider could provide convenient user interfaces so that engineers can easily customize the widget’s behavior and appearance.

Today’s software is built with one graphical interface for end users and many layers of textual programming below. The vision here is for an alternate programming environment that consists of arbitrary many layers of rich user interfaces — each interface intended for those who are using that component. Lower-level interfaces (e.g. memory allocation or signal processing) would be designed for engineers who are dealing with those layers; higher-level interfaces (e.g. graphics or widget libraries) would be designed for engineers dealing with those components; and finally, the top-most interface would be the traditional one that end users of the software product actually see and use.

What prevents this vision from unfolding? Perhaps the most significant factor is the difficulty and cost of building rich user interfaces. This is a chicken-and-egg problem: building rich user interfaces is hard, in part, because we are using text editors to do it! So the first steps forward would be slow and clumsy, as we start building richer components without good tools to do so. However, over time, as we use the tool to build the tool, we would expect to start receiving dividends. (This is analogous to how the C language was built by repeatedly compiling with earlier, less capable versions of C.)

Of course, there is also no guarantee that this richer programming system would actually make software more cost-effective, high quality, fun, or other desirable qualities. It’s easy to imagine that software engineers steeped in the current system may never be as efficient in a less text-heavy environment. Perhaps this whole idea has already been tried and failed.

Yet improving the user interface of each component clearly makes the whole system more humane. It provides an opportunity to augment the logical-verbal-dominated software engineering process with a fuller range of human visual, kinesthetic, social, and emotional skills. Who knows where that might lead?

A brief history of this blog post

(As I currently understand it.)

The universe exploded into being and some billions of years later the Sun and Earth formed. Through a series of highly improbable events, molecules coalesced into simple replicating life forms, which later coalesced into a mitochondria-powered cell and began to evolve in many directions. Asteroid impacts, global climate fluctuations, and the yearly and daily cycles of Earth influenced evolution by repeatedly creating and destroying ecological niches, thereby creating selective pressure for evolutionary inventiveness and adaptivity. The resulting inventiveness mechanisms such as DNA and sexual reproduction and the increasing competition between species colluded to speed up the evolution process exponentially over time.

Eventually, tool-building emerged as an inventiveness method that could evolve more rapidly than biological traits. Projectile weapons and fire were discovered as particularly effective tools for obtaining food energy. That extra energy made it possible to power much larger brains. Those brains were capable of keeping track of ever larger social networks so that ever larger groups could coordinate mutually beneficial activities such as large-game hunting and reciprocally helping others during times of scarcity. As humans exercised their skills in cooperation and creativity, they began to harness new forms of energy such as wind and oil and to tackle ever more complex activities such as industrial manufacturing and global trade.

As human communities reached billions of members, they began to grapple for the first time with the problems of excess rather than scarcity. The small planet’s climate and ecosystems began straining to support the ever-expanding human species. A few people held inordinate power over many. Obesity became a leading disease. Amid all this wealth, the continuing existence of poverty and inequality became increasingly uncomfortable. And those whose basic needs had now been met began to search for their purpose and calling in life.

Some found that the meaning in their lives was increasingly at odds with cultural habits that originated in times of scarcity, such as physical and emotional violence, race and gender stereotyping, and striving for career advancement. They began to believe that right and wrong are simplistic concepts and they began to practice new ways of living that are driven by the quest for authenticity and compassion rather than the avoidance of blame and judgement. Some of these practices, such as meditation, gratitude, and forgiveness, had ancient roots but experienced a resurgence as their efficacy was demonstrated separate from mythology and religion.

As more people engaged in such practices and collaborated with ever wider social circles via global information technologies, communities began to find new ways to tackle the extremely complex problems facing the human race. Using techniques such as self-management and a focus on deeper purpose, some organizations began to reach unprecedented levels of effectiveness and adaptivity, evolving in much the same way (but orders of magnitude faster) as tool technology and biological organisms evolved before them.

At that point, one such person engaged in some such pursuits read some books and decided that it might bring joy to write a blog post about it.

When ego meets enlightenment

“One of the great dangers of transformational work is that the ego attempts to sidestep deep psychological work by leaping into the transcendent too soon. This is because the ego always fancies itself much more ‘advanced’ than it actually is. How many first-year novices have persuaded themselves that they are just about ready for sainthood? How many meditation students have been certain that they attained enlightenment in record-breaking time?”

-Riso & Hudson, The Wisdom of the Enneagram (p. 10)