ハトと人間が話せたら。
コンピュータはなんだかすごい!と、多くの人が思っています。
確かにいろいろすごいのですが、エンジニアが「すごい!」と考えていることと、利用者が「すごい!」と思っていることの聞にはけっこうな隔たりがあります。
こ少しだけ、コンピュータの構造のお話をしましょう。
講義などをしていて、受講者の方が一般的にコンピュータに対して抱いているイメージは「とにかく間違えない!」「速い!」というものです。
ここにすでに誤解があります。
コンピュータはけっこう間違えるのです。
「えっ、でもそれってバグがあるからじゃないの? バグさえなければ、コンピュータは間違えないでしょ?」とおっしゃる方もいます。
バグというのは、ハードウェア(機械) やソフトウェア(機械を動かすための情報)を設計・開発するときのミスのことで、確かにバグがあると正しく動作してくれません。
しかし、ここで触れておきたいのはもう少し本質的な、構造上の問題です。
例えば、そうですねコンピュータは2進数しか扱えなかったですよね。
数字を10個使って世界を認識している人間と、数字を2個しか使わずに世界を認識しているコンピュータでは、見ている風景が違います。
ハトと人間が話せたらどうでしょう?(ドリトル先生みたいですが)けっこう話がはずむでしょうか? 私は難しいんじゃないかなあ、と思います。
ハトは赤外線を視覚情報として感知することができます。
可視光線しか見えない人間とは、同じものを見ていても、脳裏に浮かんでいるイメージが違うのです。
人間には雲しか見えなくても、透過率の高い赤外線を認識できるハトは、雲の先を見通しているかもしれません。
このように、「見えているものの違う2種類の存在」の間ではコミュニケーションが難しいのです。
なんだか、別れかけの恋人同士みたいです。
ハトは話が合わなければほうっておけばいいのですが、コンピュータはそうもいきません。
そもそも「人の役に立てよう!」と考えて作られた機械なのですから、コミュニケーションしないわけにいきません。
そうすると、2人の聞で「翻訳」が行われるわけです。
「翻訳」はどこの世界でも普通に行われていますが、TVなど見ていると同時通訳の人がとっても苦労している場面に出くわします。
例えば、エスキモーは(雪の中で暮らしてますから)「白」という色を100種類くらいに細分化しているそうですが、他の多くの人にとって白は白で、せいぜいいくつかのバリエーションを思いつく程度です。
「絶対に翻訳できない言葉」というのが出てきちゃうわけです。
コンピュータと人間の聞に立ちはだかる「2進数と叩進数のカベ」も同様です。
2進数と10進数はほんらい違うものですから、「基数変換」という翻訳を行う際、必ずしも正確な翻訳にならない可能性があります。
試しに、もしお持ちの方がいたら、Excel(有名な表計算ソフト)に「=(1.1-10.1)」ごと打ち込んで計算をさせてみましょう。
小学生でも解ける問題ですよね。
Excel はちゃんと0にしてくれましたか? 他にもこんな例があります。
1÷3=0.3333333……循環小数というやつですね。
したがって、0.3333333……×3=0.99999999……が成り立ちます。
すると、1÷3×3=0.9999999……???これは、先にも述べたようにコンピュータが「2進数でしかものを考えられない」ため、10進数と2進数を行ったり来たりすることで生じる誤差です。
専門のプログラマはこういう誤差があることを常に念頭において仕事をすることが求められます。
でも、念頭に置いたからこそ起こってしまったインシデントもあるのです。
サラミ法という詐欺の手法をご存じでしょうか? 銀行のプログラムなどに不正介入して、「1人の口座から1 円」といったようにちまちま搾取するやり方です。
サラミソーセージのように「薄く、薄く」というわけです。
1人の被害はちょっとですが、100 万人から搾取すればクラッカには大金が入ります。
この犯罪が行われたとき、利用者よりもコンピュータの専門家の方が気づくのが遅れました。
専門家には「1円くらいの誤差はシステムの仕様によっては生じるな」という先入観があったのです。