プログラムはコンピュータに対する命令
プログラムはコンピュータに対する命令文です。私たちは、プログラムを使ってコンピュータを動かす必要があります。
そして、プログラムは日本語や英語とはまったく違うルールでできています。なぜなら、コンピュータは日本語や英語を理解することができないどころか、「0か1」しか理解できないからです。
ですので、極端な話、プログラムは「100101111011….」みたいな、0と1の羅列で書かなくてはいけないのです。
ただ、これではあまりにも大変なので、実際は、「0と1よりはもう少し人間の言語に近い表現でプログラムを書いて、それを0と1の羅列に変換する」ということを行っています。
プログラムについての基礎的な理解に不安のある方は、本記事を読み進める前に以下の記事をご覧ください。
低級(低水準)言語と高級(高水準)言語
プログラムを書く時に使う言語を、プログラミング言語やプログラム言語とよびます。プログラミング言語はものすごい種類があり、プログラムの目的に応じて使い分けます。
プログラミング言語には「低級言語」や「低水準言語」と呼ばれるものがあり、またその対義語として「高級言語」や「高水準言語」と呼ばれるものもあります。
低級、と聞くと「雑魚そう」と思われるかもしれませんが、ここでいう低級というのはそういう意味ではなく、「コンピュータに近い」という意味です。
コンピュータが理解しやすい(すなわち人間が理解しにくい)と、低級。
人間が理解しやすい(すなわちコンピュータが理解しにくい)と、高級。
そんな感じです。
低級言語/低水準言語
機械語
低級言語の代表例は、機械語、すなわち0と1の羅列です。
当たり前ですが、人間の言語(日本語や英語)からはかけ離れた言語であり、機械語を直接プログラミングすることは極めて困難です。
アセンブリ言語
機械語よりも少しだけ高級な言語として、アセンブリ言語というものがあります。
アセンブリ言語だと、ギリギリ人間がプログラミングできるレベルになります。
とはいえ、やはり人間には理解しづらい言語であり、アセンブリ言語でプログラミングをするのは相当特殊な状況に限られます。
ちなみに、アセンブリ言語で「1+1を計算するプログラム」を書くとすると、以下のようなイメージになります(アセンブリ言語の種類によって異なりますので、あくまでイメージです)。
PROG START
LD GR0,A
ADDA GR0,B
ST GR0,ANS
RET
A DC 1
B DC 1
ANS DS 1
END
高級言語/高水準言語
アセンブリ言語を更に高級にすると、ようやく高級言語や高水準言語と呼べる言語になります。
いわゆる「プログラミング言語」としてプログラミングスクールで教えられていたりする以下のような言語は、全て高級言語になります。
- Python
- Java
- C言語
- PHP
- Swift
普通の人にとっては、高級言語も相当理解しづらいものではありますが、コンピュータの世界でいえばかなり人間寄りなのです。
ちなみに、高級言語で「1+1を計算するプログラム」を書くとすると、以下のようなイメージになります(言語の種類によって異なりますので、あくまでイメージです)。
A = 1
B = 1
ANS = A + B
比較的低級な高級言語、と、比較的高級な高級言語
高級言語の中にも、比較的低級なものと比較的高級なものが存在します。
比較的低級な高級言語の代表例はC言語です。古くから存在するプログラミング言語は比較的低級で、逆に歴史の浅い言語は比較的高級な傾向にあります。
比較的低級な言語は、文法が複雑で習得の難易度が高いことが多いです。従って、C言語などの比較的低級な言語からプログラミングの勉強を始めることは、あまり推奨されないこともあります。(ちなみに、私が初めて触れたプログラミング言語はC++で、これがかなり難解でした…)
高級言語をどうやって機械語に変換するか
実際のシステム開発において使うプログラミング言語は、ほぼすべてが高級言語です。
ただし、コンピュータが理解できるのはあくまで機械語のみです。ですから、高級言語で書かれたプログラムは、いずれにしても機械語に変換しなければなりません。
変換のやり方は色々ありますが、例えば高級言語を一旦アセンブリ言語に変換して、それをさらに機械語に変換するやり方があります(この変換は、プログラムが自動的にやってくれます)。