illusions of commonsense perception

Learning is a struggle against “the illusions of commonsense perception” (Maria Popova). When it was obvious that the Earth stood still and the Moon moved, Kepler wrote a novel about traveling to the moon and meeting a civilization who believed, based on their commonsense perception, that the Moon stood still and the Earth moved. If a person can imagine the perspective of a moon-based being, maybe they can see that their belief is tied to their Earthbound context.

The phrase “That’s common sense,” like “That’s obvious,” means “I believe this, and the people I trust all believe this, and I can’t explain it.”

Many people in America have a commonsense notion: “Men have penises and women have vaginas.” It’s all they’ve personally seen. Can you imagine someone with a different perspective? an intersex person, even if you don’t know that you’ve met one?

A woman shaving in dramatic light

This frame is self-fulfilling. Any one who is intersex ain’t gonna tell you about it, when you are sure that’s not a thing. Common sense shapes our perspective of the world in multiple ways: in what we can perceive, and in what people show us.

Especially if you have power! Then people extra show you what you want to see and nothing else. Power inhibits perception.

Common sense is contextual. In the Midwest, obviously everybody drives. (Scientifically, it’s incredibly dangerous.) In embedded device drivers, obviously you test your software thoroughly, and statically typed languages are superior. In web apps for ad campaigns, obviously that’s all a waste of time. Can we imagine situations where people have different perspectives?

If you imagine someone with a different perspective, then you can gain insight into your own perspective. You might get more accurate theories — be able to predict eclipses, which a lifetime of seeing the moon come up at night can’t prepare you for. You might see that your perspective isn’t true everywhere, and that you could move — maybe not to the moon, but to a city where there’s a community of queer or genderfluid people (and maybe even public transport). Or to a team that treats testing differently, where you can expand your experience.

But this kind of imagination takes work. Was it useful to the average human in 1600 to know that the Earth revolves around the sun? Heck, is it to the average person today? It isn’t directly relevant to my daily life, but I believe it by default, because everyone around me does. Most of the commonsense beliefs we grow up with aren’t worth questioning.

It takes effort, research, emotional energy and brainspace to adopt new frames. We can’t all do it for everything. Some of us learn that the gender binary is nonsense. Some of us learn many programming languages. Some of us study astronomy.

When you meet a person who still holds an outdated notion, it doesn’t mean they’re an idiot. It means they haven’t taken the effort to break this one yet. We can’t all understand everything. And most of the time we don’t need to. It’s a bonus when someone does break out of the default beliefs.

When you do gain new understanding and alter the beliefs you started with, it stays with you forever. Wisdom comes with age, or with accumulation of shattered assumptions.

Kepler understood this, and he worked to make it easier for people to understand that maybe Earth isn’t the only place in the universe, and therefore not the center of the universe. Thank you to people who share their stories, lowering the effort it takes me to realize that a belief that’s been good enough for this long, is not good enough for everyone.

The next architecture book you must read

Today, another tweet about “how can I write the cleanest, best architected code?” gets piles of book references in response.

Yes, we want to be good at writing code. We want to write the best code. The best code for what? “Writing code” is an abstraction, like a transitive verb without an object. I can’t just “write code,” I must “write code to….”

The work is software development is not typing, it is making decisions. To make those decisions, we have to understand the details of code and technology, yes. We also have to understand the context and purpose, what we are writing the code to do.

My advice for “What should I read in order to write better code?” is usually, a book or magazine or internal memos about the business. Better is having conversations about the business with the experts inside your company, and to do that well, you need the vocabulary.

We need both the specific technical understanding and the business understanding. It’s so much easier to push for technical understanding. Because the business understanding is specific to each context. I can’t make a wide-audience tweet recommending a book, you have to find that closer-in.

Supplement Twitter with kitchen conversations or internal Slack channels that give you a broader perspective on the purpose of your work in the specific context you work in.

Zooming in and zooming out

Inner coherence vs usefulness

Around 1900, when modernist art was emerging, art historians talked about the significance of art in context: the painting is not complete without the beholder.

Before that, the beholder wasn’t so important. People looked for art to express some universal truth through beauty.

Before cultures and artists considered the role of the beholder, they made art that didn’t need you. The art has inner coherence.

A lot of software development aims for inner coherence. Code that is elegant, that is well-designed and admirable on its own.

I used to like that, too. But now I want to think about code only in context. Software is incomplete without use.

If my code is full of feature flags and deprecated fields for backwards compatibility, that’s a sign that it is used. The history of the software is right there to see. I don’t want to hide that history; I want to make it very clear so that I can work within it.

My job isn’t to change code, it’s to change systems, so that we can adapt and grow increasingly useful instead of obsolete.

This old painting may be beautiful, but it doesn’t affect me the way Gustav Klimt’s work does. (some drawings, NSFW) He was one of the early modernist artists to speak of contextual, rather than universal, truths.

Within our teams, contextual truths have the most power. In my software, it’s a contextual coherence of its larger system that I care about.