プログラムがどう動くのかを図解入りで分かりやすく解説した 『プログラムはなぜ動くのか』 。2001年の初版から2007年の第2版を経て、2021年に待望の改訂第3版が出版された。初版から20年、変わったことと変わらないことなどを著者の矢沢久雄さんに聞いた。今回は2回目。(聞き手は、「日経の本ラジオ」パーソナリティの尾上真也)
コンピューターの中心CPUは2進数の世界
尾上真也・「日経の本ラジオ」パーソナリティ(以下、尾上) 本書は難しい教科書的な本ではなくて、各章の冒頭にクイズがあったり、コラムでトピックスが紹介されたりしていますね。コラムで書かれていたCPUと2進数について教えてください。
矢沢久雄(以下、矢沢) 自動車の中心にエンジンがあるように、コンピューターの中心にはCPUという装置があります。ボンネットの中を見るときのようにデスクトップパソコンの蓋を開けると、ど真ん中に鎮座していて、車のエンジンと同じように熱くなっています。ものすごいスピードで電気が飛び交っているから熱が出るんです。それで扇風機を頭にかぶって、その上に鉄の板で蓋をしています。
プログラムの解釈と実行、計算をしているのがCPUです。そこを中心にコンピューターの仕組みを見ましょう。自分が書いたプログラムがCPUによって解釈、実行されているという意識を持つことが大事です。
そして、もう1つ大事なのが2進数です。コンピューターを使うときは10進数と2進数とで頭を切り分けなければなりません。コンピューターの蓋を閉めて使っているときはキーボードが0から9の10進数で、プログラムを書いているときも10進数でいいのですが、蓋を開けて中を見たらそこにあるのは2進数の世界。電線1本1本で数値の1桁を伝えていて、その1桁は0から9の10進数ではなくて、0と1の2進数です。自分が作ったプログラムが動いているとき、中は2進数になっているとイメージすることが大切です。
尾上 CPUと2進数はどこかでつながっているのですか。
矢沢 新人研修でパソコンの分解実習をやるときは、CPUを取り外してみます。するとCPUの裏側には剣山みたいにピンがたくさん立っていて、1本1本のピンが2進数の1桁を伝えています。パソコンの32ビットや64ビットといった言葉を聞いたことがあると思いますが、64ビットなら、そのCPUの裏についているピンの中の64本を使って64桁の2進数を同時に処理しています。64桁からはみ出した場合は2回に分けて計算するか、はみ出した分が消えてしまいます。
尾上 CPUを動かすためには2進数という考え方が必要なのですね。
矢沢 メモリーやディスクなどの記憶する装置でも、中に入っているデータの形式はみんな2進数ですから、2通りというのは表現しやすいんですよ。電気はオンかオフかを0と1で表せて、ハードディスクは磁石ですからSとN。それから光ディスク、CDやDVD、ブルーレイは反射するかしないか。仕組みのところで10進数と2進数の相性が悪い部分があると思いも寄らない現象が起きたりして、そういうことも2進数を意識しているとすんなり理解できます。
尾上 0.1を100回足すみたいな話ですね。
矢沢 そうですね。10進数で表せる単純なことでも2進数だとできなくて、循環小数の途中で打ち切って誤差が出るなんてことがあるのですが、そこは中が2進数だからしょうがないと思えるかどうかなんですよ。それではコンピューターは正確に表せないんじゃないかと思われるかもしれませんが、人間が使っている10進数で何でも正確に表せるかといえば、そうじゃない。3分の1は0.333333…で、どこかで打ち切るじゃないですか。2進数だと10進数と合わない部分があるから、必然的に誤差が出ます。
普段は10進数でいいけど、コンピューターやプログラムの中の部分を考えるときは、2進数だと意識することがポイントです。
メモリーとディスクの、長所と短所
尾上 次にメモリーとディスクの関係について教えてください。
矢沢 コンピューターは演算装置で、記憶するためにメモリーが必要です。オン・オフで記録しているメモリーとディスク装置の2つがあります。なぜ2つあるのかというと、コンピューターに限らず技術全般には長所と短所があるということがカギになります。メモリーとディスクはどちらもデータを記憶するという目的は一緒で、メモリーのほうはスピードが速く、ディスクのほうは遅いけど容量が大きい。コンピューターのメインメモリーは基本的に電源を切ったらデータは消えるが、ディスクは消えない。長所を生かして短所を補完するために、同じ目的の装置がコンピューターの中でいくつか使われているという意識も重要です。
尾上 メモリーはコンピューターに処理させる作業用のデータを保持していて、ディスクは必ずしもそのときに処理しないデータを保管するというイメージでしょうか。
矢沢 はい、メモリーが作業場で、ディスクが保管場所みたいな感じです。
長所と短所という考え方は大切で、短所だけのもの、例えばフロッピーディスクは消えていき、今存在するものは長所と短所があるから残っているという考え方もポイントになりますね。
OSとアプリケーションの関係とは
尾上 女子高生にOSを説明するコラムもありますね。
矢沢 今の女子高生はスマホを使いこなしていますし、AndroidやiOSがあることや、コンピューターにはハードウエアとソフトウエアがあることも分かっているでしょう。
ただ、プログラミングではハードウエアをダイレクトにコントロールするプログラムを書くことはほとんどありません。ハードウエアとソフトウエアの間にあるのがOSで、我々が書いているプログラムはOSを応用したアプリケーション。今はみんなアプリが何か分かっていると思いますが、アプリが「応用」の意味だということはあまり意識されていないでしょう。
尾上 アプリが応用ですか。
矢沢 OSが基本ソフトウエアだから、その上で動いているのは応用ソフトウエアで、それをアプリというわけです。
尾上 ハードウエアを動かすプログラムは、簡単に作れるものではないんですね。
矢沢 ハードウエアのメーカーに近いところなら作るかもしれませんね。今、ハードウエアはほとんど同じ仕様で、基本的なOSは一緒だから、アプリが重要なのです。OSを通してハードウエアを使っているという意識でプログラミングしてほしいですね。ハードウエアとソフトウエアの間にワンクッション入っているという意識が大事です。
構成/佐々木恵美