Forgiveness

It's a real burden to drag your past failures around with you. Dwelling on things you did wrong can't really do anything to change them. In fact, nothing can change the past, so there's really questionable benefit to thinking about how you would if you could. You may as well dream about superpowers for all the good it will do.

But, in the words of Santayana, those who cannot remember the past are condemned to repeat it. If we let go of our failures, how can we learn from them? If we could just forget our mistakes and move on, I'm sure it would feel good, but what would stop us from just making the same mistakes again? I think this problem makes it difficult to truly let go of failures, because you know deep down that your failures were necessary for you to learn. Forget the failures, forget the lesson.

The issue with failure, though, is that it often has a moral or normative dimension. Sometimes a failure shoulds you: it's not just that you would have acted differently in retrospect, or that the outcome wasn't ideal, it's that you did the wrong thing, and you should have done the right thing. This feeling is negative and dangerous, but at times I think it can be correct to feel bad about something, to recognise that something you did was not just suboptimal but wrong.

So what we need is a way to tease apart these two components, to keep the lessons learned from doing wrong without carrying around guilt or shame. I think the answer to this is forgiveness. Forgiveness is a powerful idea because it ties those two halves together; you can't really forgive yourself without acknowledging what you did wrong, and you can't really forgive yourself without letting go of the past. You need both to forgive: the acknowledgement and the release.

I see forgiveness as an important alternative to atonement. Atonement holds on to the past, pretending it can be changed or fixed, and by doing that stops you from accepting and learning from your mistakes. Forgiveness acknowledges those mistakes, accepts them, and lets them stay in the past where they belong.

Sixth Sense

Sixth Sense mockup

I had an interesting idea the other day. Mapping software has given us so much in the way of concrete information about where and what things are that there's not terribly much room for mystery or coincidence. This is kind of like something I was saying in Control: if you always choose where you're going, and you know what you'll find when you get there, what mechanism do you have for finding something unexpected? It'd be neat to go the other way and make an app that adds some surprise and intrigue back into your journeys.

Here's how it would work: you're walking along, minding when your own business. Suddenly, your phone buzzes, you look at it and Sixth Sense comes up, nothing but a screen with a pulsing sphere on it. You start walking and the sphere shrinks - no buzz. You turn around, the sphere grows, it buzzes again. You keep following the buzzes, wandering through back alleys, until you suddenly see a giant spray-painted mural on the wall. The app buzzes cheerily and disappears, leaving you alone with the cool street art you just found.

Of course, pulling your phone out and even opening the app at all is optional. You could just leave it in your pocket and let the buzzes guide you as you wander around. In that sense it would be like you had an extra sense that guides you towards interesting and hidden things. A sense of curiosity.

Satisfaction

A tongue that looks like a boolean logic gate

It's nice to strive for something, to have a goal, some place you want to get to or some thing you want to do. But what happens when you get there? At first, perhaps, you feel satisfied with yourself, but before too long there's a new thing on the horizon, and you find another goal to strive for.

Perhaps the answer is to stop striving, to learn to accept things as they are. What if you could stop having goals and just be? There are definitely belief systems that advocate this, and there's something to be said for it. If you need to achieve something to feel satisfied, and when you achieve something you need to achieve something else, then, by induction, you will always feel unsatisfied. If you can stop the need, then you can break that cycle.

But something about that solution seems incomplete to me. This process of finding and fixing a problem is satisfying, much as it would be nice to pretend it isn't. It feels good to see something not as it should be and set it right, up to and including putting yourself in a situation where something's not right just so you can fix it. And what is a goal but something that you decide it would be right to complete?

My belief is that the danger isn't striving or looking for problems, but your attitude towards those problems. If you are unhappy until your problems are solved, of course you will be unhappy forever. The trick isn't to no longer have problems, the trick is to be happy with having problems, happy with being a work-in-progress, and happy that you haven't achieved all of your goals. In other words, to enjoy the process of satisfaction rather than the state of being satisfied.

I would even go so far as to say that we need problems. A surprising corollary of the idea that solving a problem is satisfying is that, if we ran out of problems, we could never be satisfied. If that good feeling we get from putting something right is important to us, it would be a very scary state of affairs to discover that there's nothing left to fix.

The Tower of Babel

A tower that looks like a lambda

In the biblical story of Babel, humanity united to build a tower so tall it would reach the heavens. This was, of course, blasphemy. The divine punishment was to break apart the people, who were working in harmony in the same language, and scatter them to separate places with incompatible languages. In a sense, though, punishment is the wrong word; it was a strategic action. The reason the builders were separated was because they were too powerful together. Their shared language and shared effort made them powerful enough to challenge the gods.

In the early days of computers, everything was just written in the machine language of the machine you ran it on. In a way, there was no meaningful difference between your code and anyone else's; it was all just instructions in one place. Later on, when we invented the first programming languages, it was often still necessary to modify the code to make it work on your computer. Source code in those days was shared, not because of any ideological attachment to open source, just because it was more practical. The idea of distributing binaries hadn't really been invented.

I can only imagine what it was like in the early days of Unix. Multiple people collaborating on a single machine for the first time, modifying each others' code, building the universe from the inside, making up the rules as they went. Back then there was no part of the system that was off limits, no part that wasn't yours. When Doug McIlroy came up with the idea for pipes, Ken Thompson wrote them into a bunch of major utilities that evening, and the next day Unix had pipes, simple as that. Who today can come up with a new idea and implement it in their favourite software that evening? How did we lose that power?

At some point our work fractured, like the tribes of Babel, into thousands of different individual efforts, each isolated from the others. People lost the ability or the desire to modify each others' code, and just wrote their own code around or on top of it. And with that we lost the ability to go middle-out: to make the whole system better by solving problems from end to end. Instead of fixing our mistakes, we built on top of them over and over again, constructing something much less like a tower than a rubbish dump. The fact that we are still using the same metaphors, the same systems, the same tools that were invented in the 70s at Bell Labs is at once a testament to their vision and a condemnation of our own.

And the worst thing is, this is all computing's fault. The transcendent part of computer science is universal computation: you can make a computer out of anything that passes a fairly low bar of complexity, and that computer can do anything that any other computer can do. I can make a computer out of transistors, sure, but also out of cogs, steam valves, or a mechanical loom. It really doesn't matter what the materials are; once you cross that threshold you're in for the whole thing.

The dark and terrible consequence of this is that if your current computing environment sucks, instead of fixing it, you can just build a new computer out of it. Remember, anything complex enough can be a computer, and that's equally true of knitting as it is of a crappy programming language, framework or operating system. You don't need to fix it, you can just build on top of it.

But by going so often to this well, we have babelised ourselves. Each of these sub-environments we have built exists in its own universe, separate from the others. Today it's commonplace, even expected, that if you are working with some external code you treat it as a black box; if it doesn't work the way you expect, don't change it, just build a layer on top of it. But we're smothered in layers, divided by them, isolated by them. If we ever hope to return to those halcyon days, to build our Tower of Babel that can challenge the gods, we need to come together again.

Struthio camelus

Struthio camelus