Universal Computing

Computer programming is a profoundly general form of creative expression.

On one hand, you can program “practical” systems for getting things done. On the other hand, you can also program visual art, music, games and simulations.

Practical systems can be modest – forms, information plumbing, automations. Or they can be transformative, breakthrough innovations that change society.

Either way, the act of programming is beneficial for the programmer.

Writing a program and running it is explicitly expressing a system, making a prediction about its behavior, and getting immediate feedback.

Each time you explicitly describe a system, simulate it, and see the effect of what you described in action, you strengthen your ability to intuit about the behavior of systems.

”Out of the box”, humans are very poor at intuitively reasoning about the relationship between the description of a system and its effective behavior. And they are many times worse at this when high scale and compound effects are involved.

This is a shame, because many hard and important problems that face society are systems problems across categories like society itself (e.g. economics), nature (climate change), theory (reasoning about the origins of life), and technology (medicine, information and communication systems, etc).

More negative than the rest of this post, but worth mentioning:

A non-trivial amount of the suffering of being a member of society comes from being outnumbered by peers who navigate their world with incoherent models of reality in their head from a lifetime of trying to use their stock intuition facilities on problems they are unequipped to understand. Or perhaps you are one of them.

People want to express themselves creatively, and they want to be equipped to understand and effectively navigate the world they find themselves in.

This may be an opportunity…

Might we be able to create a better life for ourselves and our peers if we can give them compelling and approachable tools to express themselves and strengthen their reasoning abilities – effectively, their sanity – in the process?

”Universal Computing” is a movement to act on this opportunity. Here are some of its values:

  • Create a universal toolset – a language and virtual machine – that’s approachable for everyone, and suitable for everything from one-off scripts, to distributed systems, to art, to hard-realtime embedded systems.
  • Strive to afford users the maximum capabilities of their target system, with tools of irreducible simplicity.
  • Use thoughtful design, immediate feedback and interactivity to make the toolset understandable.
  • Remove complications such that even the most “sophisticated” software (think distributed databases or realtime embedded systems) is simple to express.
  • Encourage both reuse and “creating your own”. Reuse is encouraged by freedom, effectiveness, and generality. “Creating your own” is encouraged by fun and the pursuit of mastery. This goes for everything from “libraries” to languages, computers and operating systems.
  • Make fragmentation harder than interoperability, megacosms harder than microcosms, formality harder than play, and gluttonous consumption harder than creation and sharing.

I’m working on creating the tools of Universal Computing. More about that will be written in a post to follow this one.

If you are interested in participating, write me at dan (at) dscanlon.com or follow me on X @danscan.