コンピューターが動く仕組みについて学んでいきましょう。
この記事では、コンピューターが動くこまかい仕組みではなく、プログラミングをおこなう上で大切な知識にしぼってお伝えしていきます。
プログラミングを学んでいく中で、コンピューターの仕組みを知らないと、必ずどこかで行きづまります。
なぜ行きづまるのかというと、抽象的な概念がでてきた時、その内容はコンピューターの仕組みを知っていなければ理解することができないからです。
しかし、コンピューターの仕組みについて理解をしようとしても、わかりやすい教材がないことも多いのが現状です。
もうすこし具体的な表現をすると、専門的すぎる内容や、逆に浅すぎる内容の情報が多いのです。
結果として、適切な材料を選ぶことができないことから、プログラミングに対する理解も深まらないという悪循環になっていると感じています。
そこで、この記事では、プログラミングを学ぶ上で押さえておくべきコンピューターの知識を、必要な部分に絞ってお伝えしていきます。
プログラミングで挫折をしないためにも、この記事を読んでコンピューターの仕組みをざっくりと理解していきましょう。
コンピューターを理解する上で知っておくべき3つの要素(パーツ)
まず、コンピューターを理解するために、コンピューターを構成する3つの要素をおさえましょう。
コンピューターを構成する3つのパーツとは、CPU、メモリ、I/O(入出力装置)です。
Iがinput、Oがoutputを示しており、キーボード、ディスプレイ、ハードディスクなど、パソコンに繋げられている全ての機械がI/Oです。
机の例でコンピューターを理解しよう
コンピューターを理解するために、具体例を使って考えてみましょう。
コンピューターを、仕事机に例えてみます。
そうすると、コンピューターと仕事机の関係はこのようになります。
補足メモリ:机の上(作業空間)
CPU:作業する人の頭(頭脳)
I/O:引き出し(筆記用具やノート類)
宿題をするときには、引き出しからノートと教科書を取り出して、それを机の上に広げ、問題を解いてノートに答えを書きこんでいくと思います。
コンピューターもこれと同じで、ハードディスクからプログラムを実行(メモリにプログラムを展開)して、CPUがメモリからデータを取り出し、演算をして結果をメモリに書きこんでいきます。
コンピューターを理解する上で押さえておくべきポイント
次に、上記の机の例を使いながら、コンピューターを理解する上で押さえておくべきポイント、言い換えれば、コンピューターの特徴について学んでいきましょう。
いくつかポイントがありますが、仕事机とコンピューターを重ね合わせながら整理していき、イメージを膨らませていきましょう。
1 プログラムを実行するためには(机の上で作業をするためには)、プログラム(ノート)をメモリ(机の上)に出さないといけない
筆記用具を使って計算をするためには、ノートを机の上に広げなければいけません。
コンピューターも同じです。画像の解析ソフトや、文書作成ソフトなどをコンピューター上で実行するためには、ハードディスクからプログラムを実行し、そのプログラムをメモリに展開する必要があるのです。
ちなみに、ウィンドウズやマックの電源をいれると自動的にデスクトップ画面を表示してくれるのは、予めメモリにプログラムがセットされているからです。
つまり、パソコンの電源を入れることによって、メモリに格納されているプログラムが実行され、ディスプレイにデスクトップ画面が表示されるのです。
2 メモリの容量には制限がある(一度に何十冊もノートを広げることはできない)
次に、メモリの容量には制限があるということを押さえておきましょう。
複数のプログラムを実行するということは、実行している全てのプログラムがメモリ上にコピーされているということです。
パソコンの動きが重い、という場合は、メモリの容量オーバーであることが多いのです(机の上に山のように書類があると、整理がつかずに効率が落ちるのと同じです)。
3 演算をするのはCPU(頭を使って計算をするのは脳)、メモリにはデータを格納することはできる(ノートに答えを書くことはできる)が、演算をすることはできない(机の上のノートが勝手に計算はしてくれない)
小学生の時に勉強した計算ドリルを思い出してみましょう。
1ページに20個の計算問題があるとします。この計算をするのは、(当たり前の話ですが)あなた自身ですよね。勝手に答えが書き込まれるということはありません。
コンピューターもこれと同じであり、メモリが演算をすることはできません。演算(何かの処理)をすることができるのはCPUだけです。
4 CPUは、上から順番にメモリ上のデータを読み取って実行し、結果をメモリに書きこんでいく(計算ドリルは上の問題から順番に解かれていく)
上記の3とも関係してきますが、計算ドリルに20問の問題があった時、20問全ての問題を頭の中で計算して、結果を一気に書き込んでいくということはできないですよね(記憶力が良い人であればできるかもしれませんが。)
まず一行目の問題を頭の中で解き(CPUが演算をして)、その結果を計算ドリル(メモリ)に書き込み、その上で次の問題に取り組むはずです。
コンピューターもこれと同じです。CPUは演算をすることができますが、一度に大量のデータを記憶しておくことはできません。
上から順番に命令(計算ドリルの問題)を読み込み、計算を行い、結果を計算ドリルに書き込むのです。
5 CPUは解く順番を変えることもできる(計算ドリルを解く順番を変えることができる)
CPUは、メモリに書きこまれたデータ(プログラム)を、上から順番に読みこんでいく(計算ドリルを上から順番に解いていく)のですが、解く順番を変えることもできます。
ただし、CPUが自分で考えて問題を解く順番を変えることはできません。
計算ドリルで例えると、それぞれの問題に難易度が書かれているイメージです。
例えば難易度が3段階に分かれていたとすると、まずは難易度が1の問題に取り組み、次に難易度が2の問題に取りくみ、最後に難易度が3の問題に取り組む、というイメージです。
CPUもこれと同じです、メモリに(正確には、Pythonプログラムにおいて)データを読み込んでいくためのルールが書かれています。
つまり、プログラムに命令を読み込むルールを決めておけば(すなわち、ププログラミングにおいてその指示をすれば)、ルールに応じて柔軟に命令・データを読み出して実行する順番を変えることができるのです。
6 CPU(頭脳)が直接I/O(引き出しの中にあるノート)にアクセスすることはできない
ノートを見るためには、ノートを机の上に広げなければいけません。
ノートを広げることなくノートの中身を見ることはできないですよね。
コンピューターもこれと同じです。CPUがI/Oに直接アクセスすることはできません。CPUが認識することができるのは、メモリに格納されているデータだけです。
メモリを飛び越えてI/Oにアクセスすることはできないということを押さえておきましょう。
ここまでで紹介した内容が、コンピューターを理解する上で押さえておきたい特徴です。
これらの点を押さえた上で、コンピューターとプログラムの関係について理解を深めていきましょう。
コンピューターでプログラムを実行するとは?
問題集を机の上に広げるということが、プログラムを実行するということですが、この点についてもうすこし突っ込んで理解していきましょう。
ここに、画像を編集するプログラムがあったとします。
このプログラムは、ボタンをクリックすることによって、画像の色を変えたり、大きさを変えたりすることができます。
人が直接メモリに対して「この画像の色を変えてくれ」と指示することは非常に難易度が高いので、それを簡単にするために画像編集ソフト(プログラム)があったとしましょう。
この画像編集ソフトをを実行することによって、画像を編集するプログラムがメモリに読み込まれ、それがCPUによって実行されます。
実行されると、画像編集ソフトは、人間とメモリの間に入って、お互いの情報を取り持つような役割を果たします。
つまり、人が「画像を大きくする」というボタンを押したら、画像編集プログラムがそれを理解し、メモリに画像を大きくする命令を書き込みます。
この時のポイントは、画像編集プログラムがメモリに書き込む内容は、CPUが理解できる内容、ということです。
つまり、人が「画像を大きくする」ボタンを押すと、プログラムがそれを理解して、メモリの中に「画像を大きくする」という命令を書き込み、CPUがその命令を読み取って、実際に画像の大きさを変更した結果をメモリに返すのです。
全てのプログラムは、このような仕組みで動いています。
プログラムを実行すると、メモリの中に人間とメモリに書き込むデータを取り持ってくれる仲介人が生まれる。というイメージです。
Pythonプログラムを実行するとは?
画像解析プログラムの例を見た後は、主題であるPythonプログラムの実行に移っていきましょう。
Pythonプログラムを実行するということは、先程の例で、画像編集プログラムを実行するということとほとんど同じです。
Pythonプログラムを実行することで、Pythonプログラムがメモリに読み込まれ、コードを受け取るスタンバイが始まります。
人が書いたコードを実行してPythonプログラムに渡すと、Pythonプログラムがそれをメモリに格納するのです。メモリに格納されるときには、CPUが読み取れる内容になっています。
そして、CPUはメモリに書き込まれた情報を順番に読み取っていき、演算を行い、結果をメモリに書き込み、Pythonプログラムがその結果を画面に出力するのです。
ポイントは、メモリがどう使われているか
さて、ここまでCPU、メモリ、I/Oという形で説明をしてきましたが、私達がプログラミングを学ぶ上で押さえておくべき部分はどこになるのでしょうか?
正解はメモリです。
私達が書いたプログラムは、Pythonプログラムが解釈してメモリに格納します。
つまり、Pytonがメモリにどのようにデータを格納していくのか、という点を押さえることが、プログラミングを理解する上で非常に大切なのです。
逆に言うと、Pythonプログラムを実行してエラーが出た時というのは、Pythonプログラムがメモリにデータを格納できなかった場合なのです。
つまり、Pythonプログラムがメモリにどのように格納されているのかを知ることが、プログラミングを理解する上で非常に重要になるのです。
コンピューターが動く仕組みを学んだあとは
メモリに対する理解を深めていきましょう。メモリとアドレスという記事で詳しく説明していますので、是非とも参考にして下さい。