2XXX年、地球環境と人類を守るべくその管理はスーパーコンピュータに任された。
コンピュータは色々なシミュレートを行ったが、どうやっても同じ結果にたどり着く。
それは、人類がいる限り地球環境が悪化する。そして、地球環境が悪化すれば人類も滅ぶ。
考えに考えたコンピュータは地球と人類の両方を失うより、片方だけでも残すために人類排除に動き出した。
こんにちは、プロクラスの野間です。
よくあるロボットと人間の未来戦争導入物語ですが、
ここでコンピュータには不可能な単語が含まれています。
それは「考える」です。
もちろん、擬人化やプログラムにより意味の解釈として「考える」と表現する症状になってはいるのですが、
コンピュータ自身は考えない・考えられないのです。
●考える種類?
そして、プログラムで「考える」に最も近いものが「条件分岐」と呼ばれるものですが、
- 同じならば
- 同じでないならば
- 同じか小さいならば
- 同じか大きいならば
- 小さい(同じは含まない)ならば
- 大きい(同じは含まない)ならば
OSも言語も関係ありません。たったこれだけ?と、思うかもしれませんが、数値の比較でこれ以外ありますか?
例えば「1の差」がほぼ同じかどうか?と聞かれても、時と場合によりますよね?何の前提条件も無しにこれだけ聞かれれば人によって答えは分かれるでしょう。
ではもう少し増やして「1000の差」だとどうでしょう?私の予想ですが、「1の差」の時よりも「ほぼ同じ」と答える人は減るはずです。ですが、前提条件を加えてみると・・・
報道者:○○氏の10億円の脱税が発覚しました
○○氏:いや9億9999万9000円だ!
これを聞けばおそらく、ほとんどの方が「ほぼ同じやん!」と突っ込みを入れる事でしょう。
さて、この話で誰もが思う事ですが、全ての事柄は前提条件によって変わりますよね。
ここでのそもそもの質問「1の差」がほぼ同じか?自体に無理があります。
ですが、逆に、コンピュータには前提条件が「ありません」。常に単体で「1の差」を比較して結果を出すしかないのです。
だから、曖昧表現は不可能なのです。さて6種類。納得していただけたでしょうか?何か釈然としませんよね?
コンピュータは色々な事をやりますが、それがたった6種類の条件しかないなんて・・・?
Q.文字列の比較は?
A.お忘れですか?文字なんて存在しません。内部では全て文字コードと呼ばれる数値です。
1文字ずつ割り当てられている数値が同じかどうかを比較することで実現しています。Q.言語によってはオブジェクトが同じかを比較可能ですが?
A.これも内部では数値比較になっています。アドレスと呼ばれるものの比較であったり、ID比較、主要プロパティの比較などで行われています。
まぁ最近の言語では色々なものが比較できますが、結論としてコンピュータが数値しか扱えない以上、これだけしかないのです。
これは「考える」とは呼べません。
あくまで「比較」です。
『なぁんだ。じゃぁ、あのお話は不可能なのかぁ』とお思いになるかもしれませんが、チョット待ってください。
もちろん、色々と問題はありますが、コンピュータの部分については「不可能」ではないのです。
●「考える」を考える
コンピュータは比較しか出来ません、だから前提条件を加味できない。
だから、考えられない。
『でも、チェスやオセロ、将棋等、コンピュータとの対戦では考えていますよね?
やっぱり6種類の比較では不可能なのでは????』
思考ルーチンと呼ばれるものですね。
ここで登場するのが「プログラム」です。
唐突ですが、皆さん、WEBサイトで何かの診断をやったことはありませんか?
性格診断や疲労度診断。
設問で、タバコを吸いますか?「はい」/「いいえ」などと進んでいくやつです。
あるいは、書籍などでゲームのように進んでいくもの
「机の上に水のようなものが入ったガラスのコップがおいてある」
1)コップを手に取る→P53のAに進む
2)机をゆすってみる→P130のDに進む
3)他に何かないか探す→P200のBに進む
などと指示に従って読み進めるものなどです。
これが正にプログラムの条件判断です!
まずはWEBサイトの方、内容によって色々な手法がありますが、
わかりやすいのが、「はい」を選んだ数ですね。
健康番組でもあります「はい」が4つ以上ある方は今すぐお医者様に・・・のパターンです。
これは、「はい」を押した回数(←数値ですよね)を数えて、最後に「4と同じか大きいならば」の条件を使います。
次はもっと複雑なパターンの後者(書籍例)
思考ルーチンもこちらに近いものになります。
これは全ての条件が書籍に書かれているわけです。
選択肢はそのまま条件になります。
そして、単純なパターンで説明すると全て別々の結果に進み、交わらないので複数条件の設定が可能になります(=前提条件)
少しやってみましょう。
1.机の上に水のようなものが入ったガラスのコップがおいてある
・コップを手に取る→2に進む
・机をゆすってみる→3に進む
・他に何かないか探す→4に進む
2.ツルッと手が滑って水をこぼしてしまった。
・周りを見る→9に進む
3.水面がゆらめいている。よく見るとコップの表面も濡れているようだ。
つかむときに気を付けないと手を滑らせてしまいそうだ。
・コップを手に取る→2に進む
・他に何かないか探す→4に進む
4.机の下に滑り止め付の軍手がある。
・軍手をはめる→5に進む
・軍手は無視してコップを手に取る→2に進む
・机をゆすってみる→3に進む
5.机の上に水のようなものが入ったガラスのコップがおいてある
・コップを手に取る→6に進む
・他に何かないか探す→8に進む
6.コップを手に取った。
・中身を調べる→7に進む
・周りを見る→8に進む
7.中身はやはり普通の水のようだ
・周りを見る→8に進む
8.水道と隣の部屋への扉がある。
・隣の部屋に進む→???に進む
・水道を調べる→???に進む
9.水道と隣の部屋への扉がある。
・隣の部屋に進む→???に進む
・水道を調べる→???に進む
さて、注目していただきたいのですが、前に何を選択したかによって次の動きが変わっていきます。
将棋などの思考ルーチンも同じです。
将棋の駒をどこに動かしたかによって、次の動きが変わるようになっています。
『え!?全部の駒の配置をここにあるようにプログラムで書くの!?』
はい。全部書きます。
だからプログラムはすごく大変で、ちょっとしたミスが色々な不具合になります。
想像してみてください、ここの例で書きかけのゲームを本1冊になるほど書き進めたとします。
どこか1ヶ所、進む番号を間違えていたら?
長くなると間違えている事に気が付くのが大変です。
あれ?コップ取ってないのに持っていることになってるよ?
さぁ、1冊のどこで番号を間違えたか見つけなければいけません。
その次に、正しくは何番になるのかを探さなければいけません。ひょっとすると新たに作らないといけないかもしれないのです。
ああ恐ろしい・・・
恐ろしい事は無視して、話を戻します。
このゲーム、何を選んだか、どこに進むかは全て「同じならば」判定で出来ることがわかると思います。
そして、番号に飛んで次に進む作業は全て「前提条件」を積みあがている作業になります。
いきなりコップを取ったら水が手に入らないが、軍手を取ってからなら水をゲットできる。
つまり、水を手に入れる前提条件は軍手を手に入れている事です。
何故水が要るのか?などは話を進める事できっとわかるようになっているのでしょう(笑)
如何ですか?
あくまで単体で「次に進む」を繰り返すだけですが、しっかりと結果が変わっていますよね?
もちろん、思考ルーチンは直接全部書かなくても良いような細工を色々と施します。
それがプログラマの腕の見せ所です。
例えば、「ほぼ同じ」を考えてみます。
1000の差が大きいか小さいか。
私なら単純に
10億 / 20億 = 0.5
もしくは桁数を数えて、1桁違ったら差が大きいとか?
このように全ての条件を数値で判定できるようにして、それらを意味のある組み合わせにするのがプログラムになります。
『じゃぁプログラムのチカラでコンピュータが考えられるようになるんですね』
ん?これ、コンピュータ考えていますか?
●役割分担
確かに、一見するとプログラムが動くことによって、コンピュータが考えているように見えますが、
もう一度話を戻してみると、コンピュータがやっているのは「比較だけ」です。
考えているように見えるのはプログラムのおかげです。
そして、コンピュータはプログラムの通りに動いているだけです。
当たり前ですがプログラム自体も考えていません。ではだれが考えるのか?
それはもちろん「人間」が考えます。考えるのはプログラムを組む「人間」が考えるのです。
この時、こんな条件なら、こうする!
を全ての条件考えて書くのがプログラムです。前提条件となる内容を考えるのも、どんな条件が必要かを考えるのも、
その時どんな比較をするのかも、全て人間が考える事です。
最近ではプログラムの記述が進んで、まるで自分で考えて進化しているようなものも出始めていますが、
それすらそうなるようにプログラムされているものです。
コンピュータは単なる道具です。
箸、包丁、のこぎり、歯ブラシ・・・これらと同じものです。
持論ですが、
考えるのは人間の仕事、面倒な事は機械の仕事。
とても大切な役割分担です。
とまぁ、「コンピューターは考えない」「考えるのは人間」ということが言いたかったのですが、お分りいただけましたでしょうか。
それでは、この辺りで失礼します!またー。