多くの人にコンピュータサイエンスを知ってもらおうという「13才からのコンピュータサイエンス」シリーズ。前回の「コンピュータって何だろう編(1)」に続いて、今回はコンピュータとは何なのかを解説します。これは2017年6月に「吉祥寺白熱教室」で講演した内容を4回に分けて公開するうちの第2回です。

古い対数表の写真。

この対数表のような数表は、文明を支える大事なインフラでしたが、人間コンピュータにとっては大変な作業でした。これを自動化したいという願いが、情報機械としてのコンピュータの開発の原動力となりました。

 

「情報」とは、正しい判断の助けになる知識

「コンピュータって何だろう編(1)」の最後では、コンピュータの本質的な機能を導き出しました。つまり、プログラムという情報を与えると、それに従って情報を作る。プログラムを変えると、違う動きをして、違う情報を作り出す。このような特徴を持ったものがコンピュータです。コンピュータは、機械であっても、人間のような生き物であっても「情報を作っていて、情報によって動いているもの」はコンピュータとして考えることができます。いろいろなコンピュータがありますが、それらを原理的に同じものとして扱うという点が、コンピュータサイエンスの面白いところです。

 

情報とは何でしょうか?「判断の助けになる知識」が情報です。

情報情報と連呼していますが、それでは情報って何なんでしょうか?

ここでは、情報を「判断の助けになる知識」と定義します。いくら情報っぽい知識であっても、それが何等かの判断の助けにならないのであれば、それはただのでデータです。データには資料的な価値しかないことになります。

情報というのは使われて判断の助けになるもだということは、判断が求められる局面において、必要な情報が無ければ、間違った判断をしてしまう可能性があるということです。

例えばどんな判断なのか、日常的な例で申し上げます。道が別れていて、右に行くか左に行くか。右に行くととんかつ屋さんがあり、左に行くとうどん屋さんがあると知っていれば、その場に応じて正しい判断ができます。なので、右に行くと何がある、左に行くと何がある、これは情報ですね。何もなければ当てずっぽうで行くしかない。間違った判断をしてしまうかもしれない。

同じように、ある商品を前にして、これを買うのか買わないのか、買うべきか買わないべきか。

もしくは、今日傘を持っていくべきか持っていかないべきか。この場合は、天気予報という情報があると正しい判断を下すことができます。ただ、今日一日中家にいるよという人にとっては、そういう判断する必要がそもそもないので、「今日雨になりますよ」というのは情報とは言えません。

財布に今日いくらお金を入れて出かけるか。正しい判断を下すためには、今日は飲み会があるのかないのか、突発的にお金を使わなきゃいけないのかいけないのか、そういった情報が必要です。

これから何をするのかというのを決める上で助けになる知識が情報であり、情報があると正しい行動が取りやすくなる。そんな価値のある知識が情報です。

 

情報の大切さ

たとえば、大航海時代。航海の成功に必要なのは、勇気や運、腕前にくわえて、情報でした。天体の位置と時間から、船の位置を計算するのです。その計算は難しいので、前もっていろんなパターンの数値を計算しておいた数表が役立ちました。

 

情報がなぜ大事なのか、そのお話しを続けます。

この後の話にも繋がるのですが、世界史における欧州の大航海時代を例に挙げます。

欧州人が活発に海原を超えていく時代があったわけですが、そのような航海は常に危険に満ちていました。航海を成功して、目的を達成して帰ってきて、ちゃんと人生を生き抜くために何が必要だったかというと、もちろん、勇気も必要、運も必要、腕前も必要ですけど、情報が大事でした。

例えば安全に航海するために必要な情報の一つに、自分の船の現在地があります。簡単そうに見えて、この情報を得るのは実に困難でした。地球上の位置といえば緯度と経度ですが、緯度は天体の高さなどを計測することで知ることができます。緯度の算出は昔からできたのですが、経度を知ることは大変難しかった。どのように難しいかは詳しく説明しませんが、こちらの記事に少し書いています。経度の算出には正確な時計が必要だったのですが、それが難しかったのです。

関連記事:

 

それでは緯度・経度の算出方法を簡単にまとめます。まずスライド下にあるような六分儀を使って太陽や月の高さを測り、もしくは夜だったら北極星の高さを測ります。そして出発地の時刻と現在地の時刻を計測します。緯度・経度は原理的にはこれらの数値から計算することができますが、忙しい遠洋航海中の船の上でそこまで計算するのはちょっと無理です。ですので、スライドに示しているような数表を作っていました。これさえあれば、船上で緯度・経度を自力で計算する必要はなくなります。天体の位置や時刻から、数表の中の見るべき箇所が決まるのですが、その箇所に現在地計算の結果が載っているのですね。

こうした数表は、まさに大航海時代を支える超重要インフラで、たくさんたくさん作られていました。そしてそんな数表を作る仕事をしていたのが、前回記事で紹介した人間コンピュータたちだったのです。前回記事で1600年代にコンピュータがいたと言っているのは、こういった数表を作るために大量に、計算ができる人たちが必要とされていたからです。それがコンピュータの始まりでした。

 

情報を作り、情報で動く

数表の計算は、人間コンピュータがやっていました。計算してほしい問題を与えると、決められた計算方法に従って数表の一部の答えを出すお仕事です。

それでは、人間コンピュータの働きである「情報を作り、情報で動く」を図式化したのが上の図です。

大航海時代の例では、「計算してほしい問題」は、「時刻が何々で、何々の天体がどのような高さにあった時に、経度を計算せよ」というように表現できます。そして具体的な問題は時刻や天体の位置といった情報として与えられます。

そして人間コンピュータが計算を行います。ちなみにこの写真では日本式のそろばん使ってますけど、大航海時代の欧州にもそろばんはありました。そして計算している最中には、頭の中に「まずこれをこうする、次にこれをする」といった計算方法があります。アルゴリズムですね。そして計算方法に従って導きだされた結果が、求める情報です。

ここで大事なのは、まず「計算してほしい問題」は情報として与えられているという点。ものとして与えているわけではありません。もし紙に書いてあったとしても、それがどんな紙なのかは重要ではないということは、重要なのは書いてある内容、つまり情報だということを示しています。

このように入力は情報ですが、このプロセスから出てくるものも情報です。これも、この例ではたまたま本という形式で出力していますが、違う形式で、例えば石に刻んだものであっても、同じ価値を持つとすれば、やはりこれは、出てきたものは本ではなくて情報ということです。

さらに計算方法。次はこれやってその次にはこれ、など一連の作業の流れを記述した計算方法も情報です。

数表作りでも、「情報を作り、情報で動く」というコンピュータの特長が役立っています。このときのコンピュータは人間です。

つまり、人間コンピュータは、材料となる情報から、結果となる情報を作るという作業をしています。さらに、人間コンピュータの頭の中にある計算方法を変更すると、同じ入力情報に対して違う出力情報を出すことになるはずです。つまり、情報によって、人間コンピュータの動作を変えることが出来るということです。計算方法というのは、現代のコンピュータ用語ではプログラムということになります。コンピュータはプログラムという情報によって動いているということです。

材料となる情報(入力情報)から、結果となる情報(出力情報)を作ったのです。

そして計算方法が、プログラムにあたります。

 

「情報を作り、情報で動く」のいろいろな例

これは数表作りの例ですが、コンピュータがやっていることは全て「情報を作り、情報で動く」で説明できます。いくつか例を見てみましょう。

「情報を作り、情報で動く」というコンピュータの働きを、例を使って説明しました。ただ、先ほどの例は算数的な計算の例。例えば小学校で習う筆算のプロセスを分解しても先ほどの例と同じ構造になるのですが、「コンピュータって計算の他にも色々やってるじゃないですか」と思われた読者も多いと思います。なので、計算ぽくないほかの例を挙げてみます。

 

スマートフォン操作と「情報を作り、情報で動く」

スマートフォンのタッチパネルを操作して、画面の表示が変わる、という例を考えます。これも、情報を作り、情報によって動くコンピュータが実現しています。

例えば、皆さんが毎日のように操作しているスマートフォン。画面上でタップすると何かが起こります。何か画像が出てくる、もしくはアプリが起動するでもいいのですが、それがどのように行われているかを考えてみます。これは計算っぽくないですが「情報を作り、情報によって動く」という作業である点は変わりません。

まず画面をタップすると、「画面のどこどこがタップされましたよ」という情報が、タッチパネルからコンピュータに入ってきます。コンピュータは実行中のプログラムに沿って、情報を作っています。例えば画像を表示するという作業の場合は、「画面上のどこの点はどの色でどれくらいの明るさ、この隣の点は何色で何の明るさ」といった情報が出力となります。それがディスプレイに送られてその通りにピクセルの明るさを操作すると、人間ユーザにはそれが画面上の絵になって見えています。

こうして考えますと、「どこどこがタップされましたよ」という情報に基いて、「画面のどこどこの点をどれくらいの明るさにしてください」情報を作っていて、その実際にやっているのはコンピュータがプログラムに沿ってやっている、という構造です。

 

ATMと「情報を作り、情報で動く」

ATMにカードを入れて暗証番号と金額をボタン入力すると、お金が出てきます。これも、ATMの中のコンピュータが「情報を作り、情報によって動く」をやっているからできることです。

ほかの例として次はコンビニなどに置いてあるATMを考えます。

まずお客さんがATMに行って、カードを差し込んで、暗証番号を入れて、引き出したい金額を入れます。すると、ATMという機械はカードから読み取った情報(カード番号)、お客さんが入力した情報(暗証番号、引き出し金額)をコンピュータに渡します。コンピュータはプログラムに沿って、このお客さんはお金を出してほしいそうだが、本当にお金を出していいんでしたっけ、いいんですね、という判断を下します。判断結果という情報を、お金を渡す指示としてATMに渡しています。コンピュータはそこまでしかやっていなくて、実際にお金を出すのはATMがやっている、という構造になっています。

 

ATMのコンピュータだけでは、お金を出していいかどうかの判断ができません。ですから、ATMのコンピュータは、ネットワークを介して、銀行のコンピュータとやりとりしています。銀行コンピュータが出金可と判断したときだけ、ATMコンピュータは出金指示を出すのです。

この例で行われている作業は実はATMだけで完結していません。ATMの中のコンピュータは、単独では「このお客さんの要望どおりにお金を出金してよいか?」という判断ができませんので、ネットワークを介して銀行のコンピュータに尋ねます。銀行にあるコンピュータは、うんいいよと、口座のお金はこっちで減らしときますからいいですよ、などと返す。

 

いろいろな機械の中ではたらくコンピュータたち

スマートフォンやATMそのものは、コンピュータではありません。コンピュータは、いろんな機械の中で、情報を扱う仕事をしているのです。

「情報を作り、情報で動く」というコンピュータの働きを、幾つかの例で説明しました。これらの例のように、コンピュータの働きを分解して考えると、コンピュータが働く様々な場面で実際に「情報を作り、情報で動く」が起こっていることがわかるかと思います。

こんな風にコンピュータの働きをしっかり考えることはあまりないと思います。多くの人は、スマホ=コンピュータ、ATM=コンピュータと思ってしまっているかもしれないんですが、もう少し分解して考えたほうがコンピュータを理解しやすい、ということを言いたかったのです。

わたしたちが生活する今の社会では、色々な機械の中でコンピュータが情報を扱うお仕事をしています。だからこそ、色々なところにコンピュータがあるけども、コンピュータそのものを見ることが少ないんです。コンピュータが何してるのかっていうのはその、機械全体のしていることと一体化していることが多いので、結構わかりにくいのではないかなと思っています。

 

コンピュータは「情報機械」

わたしたちが使っているコンピュータは、プログラムに従って情報を作る、という仕事に必要な仕組みでできています。画面やタッチパネル、キーボード、マウス、ネットワークは、コンピュータとやりとりするための仕組みですが、コンピュータの一部ではないのです。

これで「コンピュータって何だろう編」は終わりです。

私たちが使っているコンピュータの本質を知ってもらうために、人間コンピュータや蒸気機関式コンピュータなど様々な種類のコンピュータのお話をしました。今、使っている半導体式のコンピュータの例として、手のひらに乗るくらいのサイズの教育用のコンピュータ「ラズベリーパイ」を出していますが、このようにわたしたちの社会では色々な大きさの様々なコンピュータがあります。それらに共通しているのは、プログラムに従って情報を作るという機能です。

そして多くの場合、コンピュータには、外部と情報をやりとりするための様々な装置が付随しています。例えば画面やタッチパネル、キーボード、マウス、ネットワーク。これらは全てコンピュータと人間がやり取りするために必要ですが、コンピュータの中核機能とは違います。ラズベリーパイでも端子がいっぱい見えていますし、色々な機器を接続して便利に使うことができます。コンピュータっていうのはそうやって、色々な機器に対して情報を指示することができるのが便利さの源泉なのですが、その分、コンピュータのコアの部分というのはちょっと見えにくくなっています。

今回はそんな、あまり意識されないコンピュータの本質を説明しました。

 

次は「プログラミングって何だろう編」に続きます。

 

(かながわグローバルIT研究所 森岡剛)