プログラミングとは

概要

image

コンピュータは人間の言葉を理解できず、01で記述されたプログラム(命令)の通りに動きます。 ただ、逆に人間は「01で書かれた機械の命令」は理解しすることが苦手です。

プログラミング言語はこの「人間の言葉」と「01で書かれた機械の命令」の中間に存在しています。 人間が「規則性を持ったプログラミング言語」で命令を書き、それを01に変換してコンピュータに実行させます。 このようにすることで、人間が苦労少なくコンピュータに命令を与えることができます。

機械と人間のかけはしとなるプログラミング言語

機械の言葉「01」

私達人間は言葉でものごとを考え、お互いの意思を会話や仕草で伝えます。 程度は違っても動物もこれと同じです。 これらの会話や頭の中での思考に使われる言葉は「 自然言語 」と呼ばれており、日本語や英語は含まれます。

一方、コンピュータ(PC)はこれと全く異なります。 内部の電気信号で命令を実行し、データのやりとりも電気信号を使います。 そのため人間の言葉といった曖昧なものではなく「 電気のON/OFF 」という単純な仕組みを組み合わせることで動いています。 電気の「ONとOFF」という2つの状態は、数字の「 1と0 」に対応付けることができます。 そのため、機械に命令を伝える際は「ON OFF ON」などと書くのではなく「101」と書きます。 機械ができる言葉である01の命令は「 機械語 」と呼ばれています。

これからプログラミングで学ぶような「PCのディスプレイに"Hello"と表示させる」という命令も、 つきつめると全てが「ON/OFF」、つまり「0,1」で構成されています。 ただ、「画面にHelloと出力する」ことを普通の人は機械に01で命令することはできません。

図:人の言葉(自然言語)と機械の言葉(機械語)

image

人が使う自然言語と機械が理解できる機械語の隔たりは大きいです。

なぜプログラムを書くのに日本語ではなく「プログラミング言語」を使うか

人間は機械とは違ってアナログな言葉を通して、ものごとを考えたり、意思疎通をしています。 この人間の言葉は機械が理解できる「01の命令」に比べると、かなり曖昧です。

機械は人間の言葉を理解することが苦手です。 英語をGoogle翻訳で日本語に直すと、少しおかしな結果が返ってくることがあるように、 厳密に内容を理解できない場合が多々あります。 そのため、日本語や英語のような「曖昧な言葉」ではなく、 明確なルールを持った「制限された言葉」である「 プログラミング言語 」を使って人間は機械に命令を伝えます。

例えば料理の手順を自然な言語と、ルールを持った言語で書くとすれば、 以下のような違いとなります。

  • 日本語: 70度の水で、15分間茹でます
  • 料理用のプログラミング言語例: ゆでる 70度 15分

後者のプログラミング言語は、私が文法を「作業 温度 時間」としました。 これであれば、焼いたり揚げたりといった内容も単純になるため、機械が理解しやすいです。

「01」で機械に命令を書くのは人間には難しく、 機械が「人間の言葉」をそのまま理解するのも難しいです。 そのため、人間にも機械にも理解しやすい両者の中間にある「プログラミング言語」を使うわけです。

図:プログラミング言語を介した機械への命令

image

機械は電気信号である「01」しか理解できません。 そのため、「プログラミング言語」で書かれたプログラムを「01」で書かれた命令に変換する必要があります。 この01で書かれた命令のことを「機械語」と呼びます。 機械はこの機械語で書かれた命令を実行します。

図にあるように人間が「機械にHelloと言わせたい」と思ったら、 プログラミング言語で「Hello と出力しろ」と命令を書きます。 上記図の「print(“Hello”)」がその命令です。 この命令のことを「プログラム」や「コード」と呼びます。

この「人間がプログラミング言語で開発し、それを機械が01に変換したうえで実行する」までの流れを「プログラミング」と呼んでいます。 (プログラミング言語で書くまでのみをプログラミングと呼ぶ場合もあります)

機械語への変換方式

プログラミング言語から機械語への変換には大まかに2つの方式があり、 それぞれ「 コンパイル方式 」「 インタプリタ方式 」と呼ばれています。

コンパイル方式はプログラミング言語で書かれた命令を、「コンパイラ」と呼ばれるプログラムで、 プログラムが実行される「前」に機械語に変換します。 そして、その機械語のプログラムを実行するという流れで処理されます。 コンパイル方式を使うプログラミング言語は「 コンパイル型の言語 」と呼ばれます。

一方、インタプリタ方式はプログラムを実行する際に、 「インタプリタ」と呼ばれるプログラムがプログラミング言語の文法を読み取って解釈し、 その場で機械語に変換してプログラムを実行します。 先のコンパイルが事前に全てを機械語に変換したのに対し、 こちらは実行する直前に変換をします。 インタプリタ方式を使うプログラミング言語は「 インタプリタ型の言語 」と呼ばれます。

コンパイル型とインタプリタ型のプログラミング言語には、それぞれ長所と短所があります。 ただ、いずれにせよ"Hello"というテキストを表示するために「0,1 の規則性を勉強して、 0,1を延々と羅列して命令を書く」のと「プログラミング言語で print("Hello")と書く」 ことを比べたら、 どう考えても後者のほうがずっと簡単で効率的です。 そのため機械になんらかの作業をさせる場合は、プログラミング言語を使ってその命令を書きます。