Sam Gentle.com

Applied philosophy

10 RECURRO ERGO SUM 20 GOTO 10

A year ago, I wrote Computers are special, about the reason why computing is qualitatively different from other disciplines. I said that computers are special because they provide an abstract unit of action which is transformative for the same reason that currency as an abstract unit of value is transformative. I'd like to take another angle on why computers are special, less in terms of relevance or practicality and more in terms of the power of computers as a theoretical construct.

It's common in programming to talk about software vs hardware, without really acknowledging how weird that is. If you're a builder, there's no software vs hardware, no "abstract building" that you make and later on figure out how to implement it in the real world. Sure, there's architecture, but even architects are fundamentally grounded in reality: the laws of physics, the properties of the materials, and the resources available. You can abstract as far as you want, but you can't abstract away the rules of the universe. At least, not in the universe we live in.

With software, on the other hand, you can create the truly abstract. I remember in high school I used to play text-based adventure games where you would type "north", "south", "east", "west", "up" and "down" to move around in 3 dimensions. One day, out of nowhere, I realised that you could have 4-dimensional space by just adding two more words (and an extra level to the array that stored all the world data). And, well, once you're there there's no reason the space needs to be Euclidean, you may as well be in a giant 4d hyperpretzel where you move twice as far in positive directions as negative directions.

I think one of the most difficult things to come to terms with once you get really into software is just how limitless it is. Mostly we use it for fairly mundane stuff because that's where the money is and that's what tends to be most useful. However, the real power of computability theory (and the point I was making in Computers are special) is that with an abstract unit of action you can really do anything, up to and including things that no human could even comprehend in their entire lifetime. There are infinitely many more programs that could be created than there are human thoughts to create them. It's dizzying.

A lot of what programming requires, at a high level, is managing that unbounded complexity. You need to tear big chunks out of the infinite possibilty space and whittle them into useful shapes. A lot of this work is done for you, and there are a great many problems that can be solved just by applying these existing forms, but sometimes you need to make your own. Doing this well is a very curious skill: you need to come up with something imaginary and, in a sense, arbitrary, but it still has to be useful. You can tell the difference between a good idea and a bad one because the useful one helps you with your other ideas.

The most similar thing I can think of is philosophy. I don't know if anyone has a great definition of philosophy, but I think of it as the study of ideas and thinking about ideas. There are lots of jokes of the anything-goes-in-philosophy variety but, as far as I've seen, philosophers are fairly serious about their ideas being useful. Not necessarily useful in terms of helping you do your shopping, but useful in terms of helping you think of or think about other ideas. That might sound circular or useless, but in programming at least you can definitely tell the difference, and useful ideas are amazingly valuable.

It's for this reason that I think of programming as applied philosophy. You create these abstract concepts, these ideas, intended to run on abstract machines that don't (and usually can't) exist in reality. It's no exaggeration to say that you're working directly in idea-space, and your main limitation is how well you can manipulate ideas and keep them clear in your head. Philosophy and mathematics have this quality too, but the difference is that they stop there.

With computers, your concepts leave idea-space and take a physical form. Your abstract machine is implemented on top of a physical machine, the software and the hardware come together, and your ideas turn into reality. That is why computers are special.