この記事は、絵でわかる プログラムとは何か(1)~コンピューターの原理から~ の最初に読んでいただくべき記事です。
この記事のポイント
- コンピューターは計算機、プログラムは計算指示書。
- コンピューターで処理されるものは、全て数値化されている。
- コンピューターはとにかく速く計算処理ができる。
- 数値を、10進数ではなく2進数で扱って、シンプルに処理する。
プログラムとは何か?
プログラムとは何か?
一言で答えるなら、それは「コンピューターへの指示書」です。
プログラムは、英語では program という単語で、その語源は pro(前) + gram(書) 。コンピューターへの指示を前もって書いたものが program なのです。
でも、その答えでは「コンピューターとは何か?」がわかっていないと実際とは全然違ったイメージになるかもしれません。
コンピューターとは何か?
コンピューターは計算機
では、コンピューターとは何かというと、つまるところ「計算機」になります。
計算機と言うと、電卓のイメージで、すごくショボい感じがしてしまうかもしれませんが、あれこそがコンピューターの本来の姿なのです。
実際、コンピューターは、英語では、“computer” という単語です。これは、compute(計算する)という単語と、○○するヤツ(人や物)を表す -er がくっついた単語で、計算するヤツ = 計算機 という意味なのです。
ちなみに、電卓は英語で “calculator” と言って、 “computer” と区別されます。
calculate も「計算する」と訳されますが、 calculate は「数字を使って見積もる」というニュアンスなのに対し、compute は「1つの結論(値)を出す」というニュアンスです。数は手段か目的かという違いです。
しかし、私たちの知っているコンピューターは、電卓のような計算機と違って、数字以外の文字を扱えたり、写真や音声、動画も使えたり、ゲームができたりもします。そしてそれらは、電卓でするような、足し算や引き算などの計算とはかけ離れたことのように思えます。
様々なデータを数値化して計算
実はコンピューターの内部で、これらの画面表示や音の再生は、全て数値に置き換えられたデータの集まりになっているのです。
そして、文字を変換したり、写真を加工したり、音楽や動画を再生したり、ゲームでキャラクターを操作したり、という私たちがよく経験するコンピューターの動作は全て、数値の変化によるものです。
元となる文字や画像や音声などから置き換えられた数値(入力データ)を、目的ごとのプログラムで指定された計算によって、別の数値(出力データ)に置き換える処理が、コンピューターの中でものすごい速さで繰り返された結果なのです。
コンピューターは単純計算を超高速で繰り返す
そのプログラムで指定された、複雑にみえる計算も、分解すれば、多数の足し算や引き算などの単純な計算の繰り返しに過ぎません。
コンピューターがすごいのは、電卓と同じような計算を、1つの計算あたり約0.000000001秒という超高速で、 プログラムで指定された順番どおりに、 連続してできるところなのです。(つまり、1秒間あたり約10億通りの計算をこなせるということです。)
コンピューター誕生の時代(19世紀~20世紀前半)
計算の繰り返しがめんどい
元々、コンピューターが作られたのは、足し算や引き算といった数値の計算や、暗号の読み書き(文章変換)のような、数ステップでできる単純作業を、とにかくたくさん繰り返したい時に、人力でやるんじゃなくて機械で自動的にできるようにしたい、という動機からでした。
1個や2個なら人力作業でもいいけれど、100個のデータに対して、同じような作業を100個分、繰り返すのなら、人間より機械にやらせた方がいいよね? という発想です。
単純な計算
例えば、最も単純な計算の代名詞は何か?と聞かれれば、多くの人が、この足し算を思い浮かべるかと思います。
1 + 1 = 2
でも、これよりももっと単純な計算だってありますよね?
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
これら3つと先の1つを含めた全4パターンの単純計算だけでも、もし「これらをランダムに100回繰り返し解きなさい」と言われたら、相当大変です。
0 の重要性
0 を含めたこれらの計算は、数学が苦手な人ほど「こんな簡単な計算は、計算のうちに入んないよ」と思うかもしれません。でも逆に、数学を深く理解している人ほど、その重要性を理解しています。例えば、小さい数字から順に4つの式を並べてみましょう。
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 2
こうやって並べて見ると、この 4 行の中に、0 は 5 回、1 は 6 回、出てきました。2 は最後の最後にやっと 1 回、出てきました。0 は、“最も小さい数字”という特殊性を持つだけでなく、“足しても数字を大きくしない”、“足した結果は足す前と同じ”など、0 にしかない様々な特殊性を持った、無視できない数字なのです。
その 0 が持つ、もう一つの重要な特殊性が、“桁を増やして、すべての数を表せる”ということです。
2以降の数字ができるまで
1, 2, …
ここで、ちょっと空想してみてください。数字や数学を知らない大昔の人が、あなたの前で今、まさに「どんどん大きな数の計算をできるようにしよう」としているとします。
大昔の人: 「よし! まず、一個を表す数字を “1” としよう!」
大昔の人: 「次に、もう一個増えたら、それを“2” として表そうかな…」
そして、“2”という数字を初めて作り出して、手を止めました。
大昔の人:「!」
大昔の人:「そうか!どんどん大きな数を考えていくためには、どんどん新たな数字を作り続けなければならないのか…」
桁ができるまで
大昔の人は「大きな数を表すためには、その数の分だけ新たに数字が必要になるのではないか?」と不安になっています。例えば、百を表すためには、それまでに百種類の数字を作らなければならないと。
一、二、三、四、五、六、七、八、九、十、・・・、廿、・・・、百、・・・
でも、現代に生きるあなたは「数字は 0 ~ 9 の十個だけあれば良くて、それ以降は、10 の位、100 の位、…と桁を増やしていくだけで大丈夫!」ということがわかっています。例えば、百を表すためには 1 と 0 の 2 種類の数字だけで、100 と表せます。それを大昔の人に教えてあげましょう。
1、2、3、4、5、6、7、8、9、10、・・・、20、・・・、100、・・・
あなた:「数字は 0 ~ 9 だけあればいいんだよ。9 の次は 10、10 の次は 11、…、99 の次は 100 、…って桁を増やせば、大きな数も、9 までの十種類の数字だけで表せるんだから。」
大昔の人:「なるほど、数字は十個でいいんだね。でも、その考えでいったら、桁さえ増やしていけば、もっと数字は少なくてもいいんじゃない? 例えば 0 と 1 の二つの数字だけでも、1 + 1 = 10 (二), 10 (二) + 10 (二) = 100 (四) みたいに、1 より大きな数字は桁を増やして表せるんだから。」
あなた:「うーん、でも数字の数が少ないとそれだけどんどん桁を増やさないといけなくなるし、やっぱり手の指の数と同じ十個がちょうどいいんだと思うよ。」
こうして人類は、0 ~ 9 の数字を使ってどんな数でも表せるようになりました。実際には、あなたは大昔にはいませんでしたが、大昔の人がずっと考え続けて、結局そうなったようです。
再びコンピューター誕生の時代へ
指十本で一桁のコンピューター?
それから時代は、先ほどの単純作業の100回繰り返しを自動化する方法を考える時代に変わります。
自動化を考える人:「単純な足し算でも、機械にやらせるのは難しいな。10本の指まで区別させることはできても、さらに桁を増やしていこうとすると、どうしても複雑になる。」
(しばらくして…)
自動化を考える人:「ふー、9 の次に桁を増やすこと自体はなんとかできた。でも、10本も指があるとやっぱり機械が複雑になるな。待てよ、なんで指10本必要なんだ? 機械は人間じゃないんだから、指1本でもいいんじゃないか? 桁を増やすこともできるようになったし。」
指一本で一桁(二進数)のコンピューター
こうしてできたのが指一本で一桁を表す(指が下向きなら 0、上向きなら 1)、計算機です。
十本の指は数字じゃなくて桁を表すようになったので、十本指なら十桁ですが、十にこだわる必要はなく、この方式で何本でも(何桁でも)計算できるようになりました。
このように、0 と 1 の二個の数字だけで数を表す方式を“二進数(binary)”と言います。
それに対して、普段私たちが使っている 0 ~ 9 の十個の数字だけで数を表す方式を“十進数(decimal)”と言います。
二進数については、「しくみかん」でわかりやすく説明しています。
この記事のまとめ
コンピューターは計算機、プログラムは計算指示書です。コンピューターで処理されるものは、全て数値化され、数値の計算によって処理されています。その数値計算をとにかく速くできるのが、コンピューターです。数値計算を10進数で行えば、人間にとってはわかりやすいですが、計算処理が複雑になります。計算処理を最も単純化できる2進数は、人間にとってはわかりにくくても、超高速で計算できるコンピューターには、ちょうど適していました。
次は、電気のオン/オフをリレーする回路 に進みましょう。
この記事は、絵でわかる プログラムとは何か(1)~コンピューターの原理から~ の一記事です。
コンピューターのしくみ全体を理解したい場合は、以下の2コースがお勧めです。
日本全国 オンラインレッスン にも対応しています。
知りたいことだけ単発で聞きたい場合は、 オンラインサポート をご利用ください。