Give constructive proofs of your ideas

In computer science, whenever you have an idea, it's relatively easy to implement it and show that it works. You should do this; it's one of the great advantages of programming, that we can give constructive proofs for our ideas.

Physics and philosophy require heavy machinery or control over society to implement their ideas; but to implement an idea about programming just requires that you have a computer and time. That's part of why I chose computer science as a specialty.

The alternative is to just tell people about your ideas, and try to convince them that they'll work. But this is a frustrating way to spend your time: You can't tell people anything. They'll misunderstand you, and even if they understand you, they have their own ideas that will conflict with your idea in large or small ways. The more radical and interesting your idea is, the less useful it will be to just tell someone about it.

People don't change their minds easily. It's natural to think that if you just express your idea well enough, you'll be able to persuade people that your idea is good, and then they'll invest their time and treasure in bringing your idea to fruition. But that's something of a misguided instinct.

Fortunately, you can also prove that your idea works by implementing it. Your idea is unrefutable, then: Just look at the code, and run it, and see what it does.

This is related to do-ocracy and open source development practices which encourage you to develop a change rather than just ask the maintainers to do it for you. Such approaches are enabled by the fact that, in computer science, implementation requires no more special resources than persuasion.

And, of course, if your idea is useful, then it's useful to have an implementation of your idea. This is a much better reward for your investment of time. If you spend all your time explaining your idea instead of implementing it, at the end all you'll have is a bunch of explanations and blog posts.

I'm a hypocrite, perhaps, in writing this post instead of implementing it. But this is a post about culture, about society, about the process of carrying out computer science. To implement this post I'd need to create and run my own society which follows this principle; that's not something I can practically do; at the very least I'd need to convince other people to join that society. To implement an idea in computer science doesn't require persuading anyone.

In a culture which implemented this post, as few obstacles as possible would be put in the way of implementation. One obstacle is when computer resources or configurations are only accessible to privileged users. Computers let us multiplex resources so that anyone can create their own system without asking for permission, but restrictions on this ability, whether social or technical in origin, can break this principle. Then, to implement an idea, you need to first persuade someone else to let you implement the idea; that sacrifices one of the core advantages of computers.

Another obstacle is bans on using implementations of ideas that haven't been accepted as good. If a culture or organization requires that only accepted ideas can be used, then to implement a new idea carries the heavy risk that your implementation will be useless if it doesn't end up persuading anyone. In a less restrictive culture, if one implements an idea, one can use it; that's a good property to have.

A good idea is sometimes non-obvious and counter to existing principles. To explain an idea to someone, then, you'll have to spend time toning it down, crafting analogies, and doing other things to create a bridge between your idea and conventional thought. This can be frustrating, especially if it fails; other people just may not have the background required to understand your idea without the powerful explanatory force of a real implementation.

Explaining your idea in conventional terms means compromising it. Compromise can be good, of course (to say that is a compromise in itself!). But it can ruin the purity of your idea, and reduce it to something half-new-and-revolutionary, half-old-and-pragmatic, something which is no longer a good idea. And if you persuade people that a watered-down Y is good, you might implement Y instead of your original idea X.

Implementation is also powerfully clarifying. An idea which seems completely counter to existing notions, may fit in nicely as an incremental improvement when it's actually implemented. Among other benefits, that will make persuasion much easier.

And what if your idea is a bad one? Most ideas are good ideas, in some way for some scenario. A good computer scientist can find the interesting core in any idea; you will become a good computer scientist, at least for your idea, in the process of implementing it.

Persuading others can be useful. But there's a stock phrase, sometimes deployed as part of arguments over contentious topics: "This is not constructive". Persuading others of an idea is not part of a constructive proof for the idea. Take advantage of the nature of the computer science field, and prove your ideas constructively.