Everything is pseudocode
Michael says that everything should be code. If you accept the strong Church-Turing thesis and believe in the principles of digital physics, that the universe is indistinguishable from a computer simulation, then everything is already code.
But Michael means that representing everything as code should make collaboration easier. I argue that pseudocode is better. Do you really want to be reading and writing Java all day long? Because Java is the lingua franca. There is no question that you can express everything in Java, Java being Turing complete, but socially, pseudocode seems far more acceptable. For one thing, pseudocode is perennial.
David Brin also convinced me that natural languages have evolved the way they have, with their quirks and ambiguities, because this provides us with the necessary flexibility to be creative. Try being creative with Java. Bad idea.
Update: Peter Boothe points us to Marvin Minsky’s essay written in 1967, Why programming is a good medium for expressing poorly understood and sloppily formulated ideas.
Isn’t that a problem with Java and not a problem with expressing things in code?
Comment by Peter Boothe — 4/4/2008 @ 11:43
The distinction between code and pseudocode is much smaller if you use Python instead of Java.
Comment by D. Eppstein — 4/4/2008 @ 12:07
Java is certainly a terrible choice, but I think that ambiguities in communication are important. See for example my post Formal definitions are less useful than you think.
Do you really want to be worried about what x=y means?
Pseudocode is better at letting ambiguities through.
Comment by Daniel Lemire — 4/4/2008 @ 14:22
Ambiguity is fine - in the face of ambiguity, it often suffices to simply choose one way or the other and move forwards. Indeed, that’s a large part of how languages like Python and Ruby gain their conciseness. This feels like it relates to Marvin Minsky’s essay “Why Programming Is a Good Medium for Expressing Poorly-Understood and Sloppily-Formulated Ideas”, which points out that our mad desire for precision in all things at all points in programming languages is a cultural artifact, and not necessarily required. I think you are right that Java for all things would be horrible, but an interpreter that took in pseudocode and usually did the right thing would be fantastic! If it occasionally screwed up, that’s fine, as long as the code was as understandable as possible. More things being executable instead of descriptions of an executable sounds like a good way to make lots of progress quickly.
Comment by Peter Boothe — 4/4/2008 @ 18:06
Hi Professor,
I could not reach the PDF you link at the end of your post. May there be a problem with the link?
Best regards
Comment by İsmail Arı — 21/6/2008 @ 16:08