iOS_の画像

プログラムってつまり何をしているの?~コンピュータとプログラム概論:第1回~

こんにちは、炭山水です。今日は「プログラムってつまりコンピュータの中で何してるの?」という話をしようと思います。

この記事を読んでほしい人と今日どこまで話すか

・コードを書く!動く!楽しい!の段階をクリアした方
・nullとは?thisってなんじゃい?インスタンスって何、クラスじゃダメなの?みたいなところで躓き始めた方
・物事を理解したうえで前に進みたい方

このあたりの方を対象に、今日はひとまず「ふたつの整数型変数を足し算するってことすると、コンピュータの中ではどんなことが起こっているのか」あたりまでをお話しできたらなと思います。

プログラムがコンピュータに対してしていること

語弊を恐れずに言います。

少なくとも
・WindowsやMacOS
・LinuxとかUnixとか
・AndroidやiOSスマホ用OSとか
こういったもんの上に限って言えば、

プログラムとはCPU(演算装置)を使ったメモリ(主記憶装置)上の値の操作手順である

です。

iOS の画像

CPUもメモリもコンピュータの中にある部品の一つです。メモリの上にデータとか画像とかwebページとかそういった様々なものが展開されて、ほかの部品がいろいろやることで画面に表示がされたりするわけです。※いろいろ、の部分はこのシリーズでは触れません。

では順番に、各部品の説明からプログラムへつなげていこうかと思います。

メモリのデータは「番地(アドレス)」を使って管理する

まずメモリから話していきますね。プログラムはまだ出てきません。

先述のとおり、メモリには様々なデータが置いてあるわけですが、これは「番地(アドレス)」と呼ばれる、データの置き場所を示す番号を指定することで、データを読んだり書いたりできます。

iOS の画像 (2)

データを読んだり書いたりするのは?どの部品?そう、CPUです。次はCPUの話をしますね。

CPUの(主な)できること

CPUにもいろいろありますが、とりあえず例としてこういうことができます。
・○○番地から値を読み取る
・○○番地へ値を書き込む
・CPUに読み込んだ値同士で演算する(足したり引いたり他いろいろ)

iOS の画像 (1)

んでまあ、ぶっちゃけこれだけあればアプリケーションを作ることは理屈の上では可能です。

可能なのですが、ぶっちゃけ現実的ではありません。めんどくさいとかいう次元ではないです。

例えば、データの置き場所は番号管理されてて整理しにくいという問題がありますね。「会員のIDは52743番地から順番に格納されています」とか言われましても…と思いませんか?会員ID取得処理をするときには52743番地にあるということを知らないといけないとか地獄のプロジェクトだと思いませんか?

こういったことをもうちょっと人間が整理しやすいように「プログラミング言語」というものがあります。やっと出てきましたね、プログラム。

一例としてさっき書いた「データの置き場所番号で管理するのめんどくさくない…?」に対しての対処について話しますね。そう、「変数」です。

「変数」によってデータの置き場所に名前を付ける

int hoge = 10;
int fuga = 15;
print(hoge + fuga);

プログラミング言語は適当です(笑)。普段何気なくこんな雰囲気のコード書いているとは思いますが、「コンパイラ」「実行環境」とか「スクリプト実行環境」とか呼ばれているものを使ってCPUにこれをやらせると、CPUは、

1. int型の整数が入るだけの場所をメモリ上に確保して10という値を格納する。その格納場所へは番地(アドレス)を意識することなくhogeという名前で読み書きしに行くことができる。
2. int型の整数が入るだけの場所をメモリ上に確保して15という値を格納する。その格納場所へは番地(アドレス)を意識することなくfugaという名前で読み書きしに行くことができる。
3. hoge,fugaという名前で読みに行った番地(アドレス)に入っている整数を足し算し、出力をする。

iOS の画像 (3)

こんなことをするわけです。

今日のまとめ

・プログラムとはCPUを使ったメモリ上の値の操作手順である。

・CPUをそのまま使おうと思うと手間かかりすぎてやってらんない。例えば番地(アドレス)をそのまま使うとか。

・データの格納場所を扱いやすくするという点においては、プログラムは「変数」という名前を活用することでCPUやメモリを人間が扱うのを少し楽にしてくれる。

おわりに

この記事は「勉強するキッカケ」を目的としています。

「オブジェクト指向」とか「Nullってなんだ」とか、そういう抽象的な概念をちゃんと抽象的なまま捉えられればそれに越したことはないのですが、簡単なことではないです。

まずはざっくりでもいいから「で、具体的には何をしてるんだい」ということを知っていただいて、理解を進める切り口になればいいなと思って筆を執りました。
※ つまり、理解しやすくするためにかなり端折った記述になっています。

このあたりの内容をざっくり理解にとどめておいて、またプロダクトの開発に戻るもよし、もしもっと知識を深めたいと思ったら関連知識の書籍に手を出すもよし、継続的な学習の支援になれば筆者としてはうれしく思います。

今回は変数くらいの話にとどめました。わかってる方はお気づきかと思いますが、まだまだ説明しておきたいことは山ほどあります。ので頑張って続きを書こうと思う次第です。

直近で書こうかなぁと思ってるのは、冒頭にも書いた、
・nullって結局なんなんだよ
・インスタンスって結局何者?
・thisってつまりどういうこと?自分自身?
こういうネタかな。

ご挨拶とお願い

多くの方に読んでいただきたいので、取り立てて有料記事にするつもりはありませんが、実入りがあるとシリーズ続きへのやる気にもつながりますので、投げ銭などご支援いただけますと幸いです。

また、Twitterなどでも絡んでいただければ嬉しいです。

@tan3_sugarless

ここまで読んでいただいてありがとうございました。これからも炭山水をよろしくお願いいたしますm( _ _ )m

この記事が気に入ったらサポートをしてみませんか?