Content note: Rambling and slightly incoherent.

When was the last time you got lost?

It used to be very easy for me to get lost. I have a terrible sense of direction. Now I have an excellent sense of direction. It’s a little black and glass oblong, fits in my pocket. I only really get lost if I’m out of power or data [edit: Or, as I discovered half an hour after writing this, driving and unable to access my phone].

I also tend not to forget commonly available information, because I can just type Google for the information.

It used to be the case that calculating pi was a life’s work. At the conference this weekend were complaining about how using Python it took seconds – sometimes even minutes – to get this sort of approximation.

If I want to think through a line of thought I can write it down and save it for later. Even just considering raw typing speed, this is about three times faster than doing so by hand, but it also offers unprecedented editing capabilities and an essentially unlimited amount of writing space. This allows me to coherently put together more complicated thoughts than I would ever be able to do unaided.

In a very real sense I am vastly more intelligent than someone of even a hundred years ago, let alone a thousand. It’s not that I’m more intelligent in some biological sense (though due to advances in nutrition and healthcare this may be true too), but I am augmented by the world around me and the tools available to me in such a way as to greatly boost my natural capabilities.

There’s a joke in AI circles that artificial Intelligence is whatever hasn’t been done yet [irony: Counter-example to my above claim about forgetting things. Googling for this phrase just turns up irrelevant stuff about AI risk. I had to result to my other source of transactive memory]. If we have figured out how to make a computer do it then it’s just calculating. The same seems to hold true for natural intelligence – once upon a time, a good memory was considered the hallmark of intelligence. Now it’s just a thing you use your computer for.

So we’ve got the useful things the computers do and the actual intelligence that we leave to the humans.

But there is a middle way, and I think that that way is where the really exciting stuff lies.

If you looked at my examples above, you might have noticed that as the bird says, one of these things is not like the others.

When I navigate the computer is doing the work. When I Google, there is art in asking the right question, but answering the question is all the computer’s work.

With writing in order to think through a problem though, the computer isn’t really doing the work. I am. The computer is lending me its capabilities – the ones that aren’t “really” intelligence, but that somehow when you add them to “real” intelligence you get something greater.

Computers are good at many things that we are not. In this case I am more or less using the computer as a working memory, because my working memory is pretty good but still bounded, while the computer’s is effectively infinite (in that it’s finite, but it’s so much larger than mine that I hit my limits in terms of how I can offload to it long before we hit its limits). The result is that the ecosystem of me plus the computer is something greater than the sum of our parts – I can use the computer’s strengths to remove my weaknesses, and the result is something that I could not have produced unaided, and the computer certainly couldn’t have produced.

This is also how I think of Hypothesis.

People talk about Quickcheck, or Hypothesis, finding a bug in their software. This is not correct. Hypothesis does not find bugs, people do. Hypothesis sure helps though.

There is software that finds bugs without you having to do anything other than run it. e.g. static analysis tools fall into this category. This is not what property based testing does. In property based testing you are still the one writing the tests, you are still the one finding the bugs, the computer is just there to help you out at the bits you’re bad at by doing the thing that computers do best: Repeating the same task over and over again really quickly.

When I started this post I thought I was going to be introducing the concept of “transhumanist software tools”. Software tools that work by augmenting human intelligence in order to help us write better software. There are some tools that I think are unambiguously of this style: Property based testing, interactive theorem provers, IDEs (in particular autocomplete).

But I think this is a wrong label. In much the same way that there is no such thing as a functional programming language, I don’t think there’s any such thing as a transhumanist software tool. It’s too fuzzy a category. Is a REPL transhumanist? Is a type system? The answer is obvious: “Kinda?”.

There is such a thing as transhumanist software development though: Software development where we lean heavily on the computer, and think in terms of how we can not just make the computer work for us but also with us.

And I think there’s a lot of potential to explore here. Right now we assume any task is either intrinsically human or is “automation”, where we just want to replace the people doing it with a small shell script, and the middle ground is really under explored.

Computers cannot write software (yet). But sometimes it feels like neither can humans. Perhaps together we can?