Hello World

最近の入門用の書籍を見ていると、コードの書き方は丁寧に書かれている反面、「どうして動くの?」という部分が根本的に抜けている気がします。
それは知らなくともプログラムを作れるという時代の流れなのかもしれません。
実際にソフトウェア開発の現場では知らなくとも困らないことも多いでしょう。
ですが、本当にそれでよいのでしょうか?

この講座はそんな観点からプログラムを学んでみようと試行錯誤して書いていきます。

Hello World

初めて書くプログラムは何かといえば、「Hello World」が伝統です。
C言語による伝統のソースコードは次のようになります。

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("Hello, World!\n");
    return 0;
}

この伝統的なソースコードには様々な基本事項が詰まっているのですが、

    printf("Hello, World!\n");

以外は全てオマジナイと考え、この1文を考えます。
上のようなコードを書き、一定の手続きをとった後に実行すれば「Hello World!」と出力されるのです。

高級言語

高級言語(こうきゅうげんご)、またの名を高水準言語(こうすいじゅんげんご)は、狭義ではプログラミング言語のうち、機械語アセンブリ言語以外のもの。この場合、アセンブリ言語を低級言語(低水準言語)という。

http://ja.wikipedia.org/wiki/%E9%AB%98%E7%B4%9A%E8%A8%80%E8%AA%9E

C言語は高級言語(高水準言語)と呼ばれます。
コンピュータに何かをさせたい場合、コンピュータが理解できる形でなければコンピュータはそれを実行できません。
また、ひとくくりにコンピュータとされがちですが、中身はメーカーや機種によってまったく異なると言っても過言ではありません。
さらにコンピュータの世界は0と1のみで構成されており、「文字を出力しろ!」と人語で命令しても実行できません。
以前はプログラムと言えば、このような0と1のみの構成で作成されるような難解な代物であり、「文字を出力しろ!」という動作をコンピュータが理解できる形に翻訳していく作業でした。
当然ながらそれは非常に難しく、そしてミスも多くなり、うまく動かない場合は、その0と1の羅列を「文字を出力しろ!」という意味であるか翻訳しなおさなければなりませんでした。

つまり、
・プログラムは人が理解しやすいほうが良い
・コンピュータが理解しやすい形には自動的に変換できると便利だ
ということになります。
そんな歴史から生まれたのが、高級言語(高水準言語)です。
高級言語では、プログラムを人が比較的に簡単に読める形で記述します。
再度、HelloWorldのコードを見てみましょう。

    printf("Hello, World!\n");

なんとなくですが、Hello,World!という文字が出力されるような気がしませんか?
fってなに?\nってなに?;って?括弧は?などという疑問はあるかもしれませんが、それは記述の為のルールに過ぎません。
Javaでは、

    System.out.print("Hello, World!\n");

と記述します。
別の高級言語では

    「Hello, World!」と出力する。

と記述するかもしれません(実際にそのような言語もあります。)
そのようなルール(規格)を定めたのが、C言語でありJava言語であるのです。

コンパイル

さて、我々が勉強するのは高級言語であることは解ってちょっと安心したかと思います。
ここで我々の書いたHello Worldがコンピュータで実行されるまでを簡単に理解しておきましょう。
前述したように我々の書いたHelloWorldはコンピュータは理解できません。
理解できるように変換することを、コンパイル(Compile)と呼びます。
そして作成されたコンピュータが実行可能な状態のものを実行ファイルとかプログラムと呼びます。
これらの実行ファイル(プログラム)は規定の手続きを踏むことにより、コンピュータで実行させることができるのです。
HelloWorldであればコマンド プロンプトから実行ファイル名を指定してEnterを押すことで実行されます。

このようにコンパイルを行うプログラムをコンパイラ(Compiler)と呼びます。
あれ?と思った方は鋭い!
そう、コンパイラもまたプログラムなのです。
高級言語で書かれたコードを機械語(コンピュータが実行可能な形式)に置き換えるプログラムなのです。