Thursday, May 17, 2007
Posted by Jeff Lipshaw
James Grimmelmann (NYLS) has posted a sequel over at PrawfsBlawg to his earlier post on the similarities and differences between programming language and the language of law. There is a lot to chew on, and I agree and disagree in part.
1. Both disciplines do, as James notes, invoke issues of language. Moreover, both invoke a translation from putatively less precise words and sentences to those designed to accomplish certain ends.
2. James recognizes the limits of the parallel, but I think those limits are deeper than show up in the post. The closest analog (no pun intended) to programming language is not the discourse of a courtroom, but the construction of a contract or a code (think Internal Revenue Code or Securities Act of 1933 and its regulations). The parallel is that both lawyers and programmers seek to map their symbols onto a discrete reality, and seek to have the program operate to accomplish the intended result. Both have the possibility of internal and external bugs. I have written (unfortunately) complex contracts with the equivalent of inescapable feedback loops. I have also written drafts of contracts that worked internally, but failed fully to map the intended deal. I am sure the same can be said of legislation. I know both flaws can occur in programming.
3. Here are a bunch of problems with the parallel in no particular order:
- There is no equivalent in programming language of a perlocutionary act - that is, a sentence that imparts meaning to the recipient beyond the illocutionary act.
- There is no equivalent in programming language to the issue of "family resemblances" ("shew the children a game, etc." in Wittgenstein). Ambiguity and inconsistency is a hallmark of language itself, not just of law.
- Programming language is a wholly deductive formal system. There is no mystery, if we have premises A, B, and C, due to the rigid rules of inference, what the conclusion will be. Wittgenstein also showed that language invoked inductive rule-following, in which there is a leap to the conclusion that is not determinate by language alone. That is to say that our language is based on mutually understood bedrock concepts that infuse the words with meaning, rather than the other way around.
- Programming language is not the language of compromise or agreement. That is to say, the human beings who desire the program may disagree as to what the program was intended to accomplish, but the program itself can only serve one master. Legal language, on the other hand, involves speech acts (indeed, performatives) intended to accomplish the expression of a mutual intention. The combination of the inherent imprecision of language (the fact of family resemblances between words and meanings), the role of rule-following, and exigencies of human desire, I have contended, are what give rise to ex post opportunism in hard cases. Programs, like logic, cannot be opportunistic; they just are what they are.