――あるいは How to be an Computer Otaku
(ascii.PC 2001 年9月号)
山形浩生
今回は、ちょっと本業が忙しくて、これも残業のあいまに書いているのだ。やれやれ。で、今回から、コンピュータの中身に入っていこう。でもちょっと理屈っぽいので、覚悟してね。
前回、コンピュータはさびしいんだ、という話をした。そしてそれを理解してもらうための話として、暗い箱の中に一人閉じこめられ、外から言われた通りに動くだけの女の子、というものを考えてもらった(ぼくは男女平等主義者なので女性にも労働機会をあげるのだ)。でも、これはただのたとえ話じゃない。コンピュータの本質がここにある。いまのあらゆるコンピュータの基礎になっている、チューリングマシンという仮想的な機械があるんだけれど、それはまさにこういう仕組みでできているんだから。
これを考案したのは、コンピュータ五聖人の一人と言われるアラン・チューリングだ。といっても、もちろんかれが実際に女の子を閉じこめたわけじゃない(それはサドとかスキナーという別の有名人たちで、またぜんぜん別の実験)。それにチューリングはゲイだったから、どうせ閉じこめるなら男の子がいいと思っただろう。あくまでも理論上の話。
チューリングマシンの仕組みは簡単だ。
こんだけ。この機械の「状態」ってなんだ? えーと、それはややこしいので、まあものを覚えている状態とか、基本動作、くらいに考えておいて。
で、この人は「計算できるものはすべて、このチューリングマシンで計算できる」ということを証明した。ただし、時間がどのくらいかかるかはわからない。さらに、紙テープの長さは無限に必要、という条件はつくけれど。あとはこの機械をつくって、いろんなことの計算の仕方を考えればいいだけだ。
そして世の中のかなりの部分は計算でできる。表計算ソフトでの収支計算(いま、残業でやってるのがこれなのデス)をするのは明らかに計算だけれど、画面にエロ画像を表示する(してます)のも計算だし、MP3とかの音楽ファイルの演奏(してます)も計算だ。コンピュータにとって、そのすべては一つの数字から別の数字への変換だ。
たとえばコンピュータの画面を虫眼鏡でみてやろう。それは小さなつぶつぶでできている。そのつぶつぶの色によって数字をつけて(白ならゼロ、黒なら1、緑なら2とかね)、左上から並べると、何万桁のすごい数字が一つできあがる。ここで真っ黒な画面を一面緑に変えるには、11111111...となっていた数字を222222....に変える、という計算をすればいい。
そしてこの計算方法がアルゴリズムだ。ふつう、アルゴリズムといったら、計算にあたって「こうすれば必ず答えが出ます」という考え方。それを機械にわかるような形に書き直してやると、これがプログラム/ソフトウェアになる。
でもこの人がさらに証明したことがある。世の中には計算できないものもある、ということ。そしてある計算式がが計算できるかどうかは、やってみないとわかんない、ということだ。
つまりプログラムで思い通りの結果が出るかどうかは、実はやってみないとわからない。「バグ」ってきいたことがあるだろう。これは、計算式を処理してみたら思い通りの答えが出ませんでした、という場合だ。まちがった答えが出たり、いつまでたっても答えが出なかったり。でも原理的に、事前にそれを(すべて)見つけるのは不可能なんだ。これはいまのコンピュータが本質的に持つ限界だ。コンピュータが未だに思い通りに動いてくれない(ことがある)のは、そんなところにも理由がある。てなところで財務モデルが計算を終えてくれたので、ちょっと残業に戻るから一休み。げ、売り上げが今後30年間ずっとゼロ!! こんな馬鹿な。噂をすればなんとやら、これがバグの見本だ。
(休憩)
さてモデルのバグがとれたようだ。で、抽象的な理屈はわかったとして、それを現実のコンピュータと結びつけてやろう。
まず、部屋の中の女の子にあたるのがプロセッサとかCPUとか言われるもの。さらに女の子の仕事がテキパキはやければはやいほど、この機械ははやく動く。その速度を表すのが、よく出てくる「クロック速度」とかいうやつ。「デュロンの700MHz」とか「ペンティアムIIIの800MHz」なんてのがカタログに書いてある。この数字のほうは、一秒間に何回一定の仕事ができるかというのを表す数字だ。同じプロセッサであれば、この数字は大きければ大きいほどいい。でもちがうプロセッサだと、この数字を比べるだけじゃダメだ。
そしてもう一つ。この長い紙テープにあたるのが、メモリだ。無限大の紙テープがあれば、チューリングマシンはなんでも計算できる。でも、実際には無限のテープは用意できない。そして紙テープの長さが有限なら、計算できないことも出てくる。
この紙テープが、メモリにあたる。その長さをあらわしているのが、「メモリ128MB」とかいう数字だ。Mは上にも出てきたけれど、「メガ」で一〇〇万をあらわす。Bはバイトの略で、紙テープのコマのことだと思ってくれ。この数字も、ほかの条件が同じなら、大きいにこしたことはない。ただしもちろん、「自分のやる仕事には32MBで十分」ということはある。そこはそれ世間的な相場ってやつがあるわけだ。昔のコンピュータは非力だったしメモリも高かったから、ずっと少ないメモリでやりくりしていた。昔、ぼくが20年前にはじめて作ったコンピュータのメモリは2KB(キロバイト)。キロって言うのは千だ。いまぼくがこれを書いているコンピュータのメモリは192MBだから、かつての10万倍にもなったわけだ。でもコンピュータの基本的な仕組みは、いまのコンピュータも、20年前にぼくが作っていたやつも、さらに60年前にアラン・チューリングが考えたやつも、実は何も変わっちゃいない。
だからぼくがコンピュータを見るとき、なんとなく箱の中で一人でしゃかりきに働いてる女の子と、ながーいテープが見える。ふだんは結構暇そうだけれど、こっちが急にブラウザをたちあげて、ワープロ使いながらすさまじい財務計算なんかさせると、その子があたふたして「わーっ、テープが足りない!」とあせあせしているのがなんとなく見える。その子の仕事のつまり具合なんかを考えながら、「まあちょっと待ってやるか」とか「これ以上仕事をつっこんだら倒れるな」と配慮してやるのも、ちょっとやったほうがいいかもしれない。車だって、エンジンあまりぶんまわしすぎるとかわいそうだ、というのがある。コンピュータも同じこと。
ちなみにチューリングは、箱の中の子にこだわりがあったみたい。これまたとても有名なチューリングテスト、というやつがある。この先コンピュータが賢くなっていったとき、それに知能があるかをどうやって判断すればいいのか? チューリングの答え:そいつを、部屋の中に入れて、小さな窓を開ける。外からいろいろ質問をすると、中の存在が答える。そしてその返事が人間のものか機械のものか区別がつかなかったら、それは知能があるものと考えよう、というテストだ。何かと部屋に閉じこめたがるのね。
実は最近の人工知能は、生意気にもチューリングテストにあっさり合格できるそうだ。一方、本物の人間どもがチューリングテストでボロボロ落っこちる(情けない)。だって最近の大学生なんて、人の質問にまともに返事できないんだもん。まあここから、人間なんて実は大した知能を持っていないと見るか、それともチューリングテストが不十分だというふうに見るかは、あなたの見方しだい。
でも話がずれた。
さて、もしあらゆるコンピュータがチューリングマシンをもとにしてるんなら、なんでコンピュータにはいろいろ種類があるんだろうか。やれウィンドウズだ、やれマックだ、とかいうのはなんだろう。あるいは同じウィンドウズでも、いろいろペンティアムだアスロンだってのはなんだろう。
実はいちばん簡単なチューリングマシンというのは、あまりに単純でそのままじゃ使いにくい。だから、いくつかの基本動作をあらかじめ組み合わせて、定食メニューみたいにまとめて用意しておくわけだ。そして、そのまとめ方にはいろいろある。ごく限られたメニューしか用意しないというやりかたもあるし、いろんな場合を想定していろんなメニューを用意する、という考え方もある。たとえばタマネギを刻むとき、「半分に切れ」というのと「輪切りにしろ」というの「賽の目に刻め」というのを別メニューで用意する、という考え方がある。一方で「切る」というメニューしか用意しない考え方もある。「賽の目に刻め」というのは、「切る」を100回くらい実行すればいい。メニューがいろいろあると融通はきく。でもメニューが増えすぎると、使う側がメニューを選ぶのに迷って時間もかかる。メニューが少ないと、ユーザが自分で「えーとみじん切りにするにはどうすればいいかな」と考える必要が出てくるけれど、でも機械のほうは単純で高速にできる。どっちがいいか? それは使う人によってちがってくるわけ。
計算機でも同じこと。電卓にはふつう+-×÷のボタンがある。でも×のボタンっているかな。たとえば100倍しろ、というのはつまり、同じモノを100回足せ、というのと同じことだから、+のボタンをすごく押しやすくして×のボタンはつくらないという考え方もある。そんな具合に、環境やユーザに応じて、いろんな考え方がある。プロセッサやコンピュータにいろいろちがいがあるのは、そういうまとめかたのちがいだ。
そして、まとめるのもいろいろレベルがある。さっき言った、ペンティアムだのアスロンだのパワーPCだの言うのは、いちばん下のプロセッサのまとめ方。その上に、それを紙テープなんかとどう組み合わせるか、というまとめ方がある。その上に、ウィンドウズだのマックOSだのといったまとめ方があって、その上に……コンピュータを理解するというのは、そういうレベルのちがいと、それぞれのレベルでのいろんなまとめかたの発想をなんとなく理解する、ということでもある。
さて、ここまで読んで「なぜ女の子は一人なの? 人数増やせばもっと仕事がこなせるんじゃない?」と思ったあなたはえらい。それが「マルチプロセッサ」とかいう考え方なんだけれど……でもこれは、思ったほどはうまく行かない。
こう、仕事をうまく並行して動かすのは結構難しいんだ。大きめの仕事をした人ならわかると思う。人の手配は結構面倒だ。手配の電話や調整の時間で自分でやったほうがはやいケースがままある。そして人がそろっても、仕事量が見積もり通りじゃなかったり、作業分担でもめたり。さらに人海戦術でこなせる部分は、実は結構少ない。肝心なところは、だれか一人が徹夜して仕上げるしかない場合が多い(って、オレのことか)。
コンピュータも同じ問題をかかえる。仕事を並行してできるよう割り振るのはむずかしい。それをやるにはだれかが管理職の仕事をやってスケジューリングするしかないし、それも結構うまくいかない。そういうスケジューリングをしている間に、一人でシャコシャコ仕事をこなしたほうが早い場合も多い。さらにかなりの部分は片方の子が一人でやるしかない。人を二倍にしても、能率は倍にはならないのだ。
そういう意味で、コンピュータの仕事も結構人間的ではあるんだ。こんど、仕事を押しつけられて一人で残業させられているときには、コンピュータを見てその子の身になってあげてほしい。ヘタに集団作業するより、お互いこうして一人で仕事をこなす方が能率いいんだよな、と思ってあげよう(そうでも思わなきゃこんな残業やってられますかいな、まったく)。
おお、こんどはモデルがきれいな数字を出してくれた。よしよし。というわけで今回は(原稿も残業も)これでおしまい。次回は、もう一段上のまとまりの話をしようね。じゃまた。
前の号 次の号
ASCII.pc Top YAMAGATA Hirooトップ