法律とプログラミングは未定義動作の扱いが異なる
法律とプログラミングがとても共通部分があるのに一見すごく違うのは何故なのか考えてたのだがすごく根幹の部分で違いがあることに気づいた。 プログラミングでは「未定義のコードを実行すると鼻から悪魔が飛び出す」という表現で「未定義のことをやってはいけない」とする。 一方法律は、人間が原則自由に行動できることを前提とし、支障のあるところだけ制限するためのものなので「未定義のことはやってよい」なのだ。 #未定義動作 有能なプログラマほど「定義は何か」を気にするのだが、条文を見ても検索しても発見できなかったり、果ては「法学者の間でも意見が分かれている」という記述にたどり着いて、なんじゃそりゃーとなる。 その定義が問題になるような事態が発生したら、法廷に行けばよい。
この感覚はよくわかる。一方で契約書の場合は未定義は脆弱性になるので出来るだけきちんと定義してつぶす、という意味ではプログラミングと契約書(特に英文)はよく似てる。
契約の場合「脆弱性を潰す=相手の自由を制限する」
契約書をどこまで細かく書くかは、どこまで相手の自由を制限したいかに依存するもので正解はない。
契約は、民法で定義されている規定値をオーバーライドするためのもの。
何も書かなくても問題ない。コンビニで物を買う時に売買契約書を交わさないが、売買契約は発生している。
これは「テストをどれくらい書けばいいんですか」と同じだなと思った。リスクを回避したい分だけ書く。
実際には契約で完全に縛るというよりは ... shall be mutually agreed とかにして外部定義として運用に投げる、ということもするので、全てを厳密に定義するというよりは未定義を悪用されないように漏れをつぶしておく、というイメージですかねえ。
重要なところだけテストでカバーするみたいな感じですね!
困ったら運用に任せて逃げるあたりも似てるかもしれません...
API仕様には「できるルール」が書かれているため、何かをできるプログラムを作る際には、関係のあるAPIを調べておけばよいのですが、「できないルール」集の法律に、ある事柄が引っかからないかを調べるには全部を知っておかないといけないというイメージが苦手意識なのかな?と思いました。(法律を読んでいて、「ただし、」以降に自分のやりたいことが書いてあった場合の安心感はすごい。)
プログラムの「書いてあることはやってよいこと」と法律の「書いてあることはやってはいけないこと」が逆であることによって、自分のやろうとしていることがやってよいのかどうか確認するまでのコストが大きく違う。
「法律で禁止されていない」ということを知るまでのコストが高い
何かよい方法はあるのか?