これまでに私は、いくつかプログラミング言語の入門書を書いてきました。どの本も、そのプログラミング言語の経験がない読者をターゲットとしたものです。きっと、私の本を読んで、生まれて初めてプログラミングを経験する読者もいるはずです。最初に紹介するサンプルプログラムの内容は、どのようなものがよいでしょうか。いつも悩んでしまいます。実際に紹介したサンプルプログラムをお見せしますので、皆さんのご意見をいただければ幸いです。

毎度おなじみhello worldプログラム

 プログラミング言語の入門書で最初に紹介するサンプルプログラムとしては、俗に「hello worldプログラム」と呼ばれているものが定番です。多くの著者たちが、hello worldプログラムを紹介しています。hello worldプログラムとは、C言語の開発者らが著した「プログラミング言語C(B.W.カーニハン、D.M.リッチー著、石田晴久訳、共立出版刊)」という本の中で、最初に紹介されているサンプルプログラムのことです(リスト1)。

リスト1 これが有名なhello worldプログラム
main()
{
    printf("hello, world\n");
}

 このプログラムを実行すると、画面に「hello, world」と表示されます。ただそれだけのプログラムです。実行結果を目で見て確認でき、最も行数の少ないプログラムを紹介するなら、このようなプログラムにするしかないでしょう。なお、プログラミング言語Cは、二人の共著者の頭文字を取って「K&R」と呼ばれることがあります。K&Rは、C言語の入門書として、現在でも根強い人気がある大ベストセラーです。

Visual Basic 6.0の入門書

 それでは、私が書いたプログラミング入門書で最初に紹介しているサンプルプログラムを紹介しましょう。まず、「プログラミング学習シリーズ Visual Basic(翔泳社刊)」のサンプルプログラムです(図1リスト2)。

図1 Visual Basic 6.0の最初のサンプルプログラムの外観
リスト2 Visual Basic 6.0の最初のサンプルプログラムのコード
Option Explicit

Private Sub Command1_Click()
    Label1.Caption = Str(Val(Text1.Text) + Val(Text2.Text))
End Sub

Private Sub Command2_Click()
    End
End Sub

 Visual Basic 6.0は、その名が示すように、ウインドウの土台であるフォームにテキストボックスやボタンを配置して、プログラムの外観をビジュアルにデザインできるのが特徴です。このサンプルプログラムは、2つのテキストボックスに入力された数値の加算結果を表示するものです。[計算]ボタンをクリックすると加算が行われ、[終了]ボタンをクリックするとプログラムが終了します。

 Visual Basic 6.0でも、K&Rのhello worldプログラムと同様に「hello world」と表示するだけのプログラムを作成できます。私の本で、最初にhello worldプログラムを紹介しなかったのには、理由があります。この本は、プログラミング経験がゼロの読者を対象としています。本の導入部で、「コンピュータは、入力、演算、出力を行うマシンであり、プログラムを書くときには入力、演算、出力を意識することが大事だ」と力説しました。そのため、最初のサンプルプログラムも、入力、演算、出力があるものにしたのです。

Visual C++ 6.0の入門書

 Visual Basic 6.0の入門書の姉妹本として「プログラマ養成入門講座 Visual C++」を書きました。この本で最初に紹介しているサンプルプログラムは、現在時刻に応じて「おはようございます」「こんにちは」または「こんばんは」という文字列を表示するものです(リスト3)。

リスト3 Visual C++ 6.0の最初のサンプルプログラム
#include "windows.h"

int APIENTRY WinMain(HINSTANCE hInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR  lpCmdLine,
                        int nCmdShow )
{
    SYSTEMTIME tm;
    char s[80];
    int iRet;

    // 現在時刻を取得します。
    GetLocalTime(&tm);

    // 表示する文字列を設定します。
    if ((tm.wHour >= 0) && (tm.wHour < 12)) {
        lstrcpy(s, "おはようございます。");
    } else if (tm.wHour < 17) {
        lstrcpy(s, "こんにちは。");
    } else {
        lstrcpy(s, "こんばんは。");
    }

    // メッセージボックスに文字列を表示します。
    iRet = MessageBox(NULL, s, "MsgBox", MB_OK);

    // 正常終了を意味する戻り値を返します。
    return 0;
}

 この本は、C言語の基本文法を理解している読者を対象としています(C++は、C言語に機能を追加したプログラミング言語だからです)。そのため、ちょっと長いサンプルプログラムにしたのです。

 Visual C++ 6.0をご存知の方は、「これはWindows APIを直接呼び出すC言語風のプログラムであり、Visual C++ 6.0ではこういう書き方をしない。MFCを活用するはずだ」と思われるでしょう。いきなりMFC(Visual C++のためのクラスライブラリ)を使うと混乱するので、わざとMFCを使わないプログラムにしたのです。

Javaの入門書

 現在のIT企業の中には、新人さんにJavaを勉強させているところが多くあります。Javaは、とても機能が豊富なので、初めてプログラミングを学ぶ人は、面食らってしまうかもしれません。私は、ちょっと遠回りしても、アセンブラ、C言語、Javaの順に学ばせるのがいいのになぁ...と思いつつ(Javaは、C++をベースにしたプログラミング言語なので、あらかじめシンプルなC言語を学んでおけば理解が容易です)、現場ではいきなりJavaなので、「プログラマ養成入門講座Java(翔泳社刊)」を書きました。最初に紹介したサンプルプログラムは、2つの数値の加算結果を画面に表示するものです(リスト4)。

リスト4 Javaの最初のサンプルプログラム
public class Sample1
{
    public static void main(String args[])
    {
        int a, b, c;

        a = 123;
        b = 456;
        c = a + b;
        System.out.println(c);
    }
}

 このプログラムは、キーボードから2つの数値を入力するのではなく、プログラムの中に123と456という数値を書いておき、それらの加算結果を求めます。「こんなプログラムは、ナンセンスだ!」と思われるでしょう。キーボード入力を行わなかったのには、理由があります。Javaは、キーボード入力を行う際に、いくつかのクラスライブラリを使い、さらに例外処理(エラー処理)も書かなければならないからです。そんな複雑なプログラムを、初めてプログラミングを学ぶ人に示すわけにはいきません。

C#の入門書

 C#(シーシャープ)は、Javaと同様にC++をベースとしたプログラミング言語です。C#の入門書「標準C#入門(ソフトバンクキリエイティブ刊)」で最初に紹介しているサンプルプログラムは、社員を表すクラスを定義したものです(リスト5)。

リスト5 C#の最初のサンプルプログラム
class Shain
{
    string shimei;    // 氏名を表すデータ
    int jikyu;        // 時給を表すデータ
    int jikan;        // 時間を表すデータ

    // 時給×時間で給与の値を得る処理
    int GetKyuyo()
    {
        return jikyu * jikan;
    }
}

 このサンプルプログラムには、これまで紹介してきたプログラムと大きな違いがあります。それは、このままでは動作しないということです。Shainクラスを利用するメインルーチン(C#では、mainメソッドと呼びます)を作成しないと動作しません。C#をマスターするには、データと処理をまとめたクラスのイメージをつかむことがポイントとなります。そこで、クラスとは何かを説明するためのサンプルプログラムにしたのです。

C言語の入門書

 K&Rという大ベストセラーに負けじと、私もC言語の入門書「C言語で学ぶプログラミング基礎の基礎(ナツメ社刊)」を書きました。最初に紹介したサンプルプログラムは、キーボードから入力された2つの数値の四則演算結果を画面に表示するものです(リスト6)。

リスト6 C言語の最初のサンプルプログラム
#include 

void keisan(int a, int b);

int main(int argc, char* argv[])
{
    int a, b;

    scanf("%d", &a);
    scanf("%d", &b);
    keisan(a, b);

    return 0;
}

void keisan(int a, int b)
{
    int tasu, hiku, kakeru, waru;

    tasu = a + b;
    hiku = a - b;
    kakeru = a * b;
    waru = a / b;

    printf("%d\n", tasu);
    printf("%d\n", hiku);
    printf("%d\n", kakeru);
    printf("%d\n", waru);

    return;
}

 この本は、プログラミング経験がゼロの読者を対象にしています。そうでありながら、かなり長いサンプルプログラムを最初に持ってきたのは、「中途半端はやめよう」と思ったからです。しかし、最初のプログラムでありながら、説明に多くのページ数を割くこととなってしまいました。丁寧に説明しているので、きっと理解してもらえると思っています。整数の除算で小数点以下がカットされることや、ゼロ除算を体験することもできます。あれこれ盛り込んだので、いきなり挫折してしまう読者がいるのでは、という心配もありますが。

 今後、新たにプログラミング言語の入門書を書くことになったら、最初に紹介するサンプルプログラムを何にしましょうか。あれこれ悩まず、hello worldプログラムにすればいいのかなぁ...。