最初のプログラムとして "Hello, world." は適切か?

K&R以来の伝統からか、どのようなプログラム言語でも最初に書くプログラムは "Hello, world." と相場が決まっているフシがある。K&R冒頭で紹介されている、Cで書かれたオリジナルの "Hello, world." は、たとえばこんな感じのプログラム。

#include <stdio.h>

int main(int argc, char *argv[])
{
  printf("Hello, world.\n");
}

昨今では某エロゲーのタイトルにもなるくらい "Hello, world." というプログラムの知名度は高く、入門用のサンプル教材としては大抵これを書いてみせているように思われる。


で、自分のプログラム歴を振り返ってみて、自分が最初に書いたプログラムが "Hello, world." だったかといえば、そうではない。


私が最初に打ち込んで動かしたプログラムは、漫画「ゲームセンターあらし」の原作者として知られる、すがやみつる先生の名著「こんにちはマイコン」*1で、さとるの指導のもとあらしが制作にチャレンジする「足し算ゲーム」である。

二つの値とそれを合計した値を入力し、答えが合っていれば正解である旨が表示されて終了、間違っていれば間違いである旨がメッセージとして表示され答えの再入力を促すという、非常にシンプルなプログラムだ。小学校3年生の終わりぐらいに打ち込んだそのプログラムは、

10 INPUT A
20 INPUT B
30 C=A+B
40 INPUT D
50 IF C=D THEN PRINT "セイカイ":GOTO 80
60 PRINT "マチガイ"
70 GOTO 40
80 END

…のようなもので、20年も前のことながらプログラムコードの一字一句に至るまで記憶しているわけだが、このプログラム、今よく見ると最初に組むプログラムとしては実に挑戦的な内容になっている。というのは、

入力 コンソールからの入力を要求している 行10,20,40
演算 複数の変数を項として取り、基礎的な四則演算を行っている 行30
記憶 演算結果を変数に保存する代入式がある 行30
制御 IF文を使用した条件分岐がある 行50
出力 結果をコンソールに出力する処理がある 行50,60

…のように、「コンピュータの五大機能」と呼ばれるものがすべて盛り込まれた、極めて良質な教材サンプルとなっているのだ。「コンピュータのプログラムで何が出来るのか?」という点に関して言えば、すべてこのプログラムの延長線上で考えることが可能になる。きっと、すがやみつる先生も考えたのだろう。


これに対し、"Hello, world." はといえば、やっていることは出力のみで、そのコードだけから「プログラムで何が出来るのか」を予備知識無しでイメージしろ、というのは初めての人にとって困難であるかもしれない。"Hello, world." は「プログラムという世界の全体像」を俯瞰するには、あまりにも盛り込まれた要素が少なすぎるように思える。

他の言語によるプログラムを経験している者に対しては、「C(あるいはその他の言語)で書くとこんな感じになりますよ」というイメージを伝える役には立つかもしれない。しかし、「最初にプログラムの世界を紹介する」サンプルとしては、意外と不出来なプログラムではないのか、と思えてきたわけなんだが。



コンピュータについて全く予備知識が無く、周囲に訊くことのできる人もいなかった小学校3年生当時の自分に「足し算ゲーム」のプログラムが理解できたわけだから、プログラムの学習というのは結構簡単なものだと思うのだが、世間ではそうではないらしい。

プログラマーになれる人なれない人 - kagamihogeの日記
【元ネタの匿名ダイアリー】http://anond.hatelabo.jp/20070523230747

うーん…案外プログラムの学習というのは、頭が柔軟な子供のうちに始めてしまったほうが良いのかもしれない。

*1:ゲームセンターあらし」の主人公あらしがゲームを作ることを目標に、当時NECから発売されていた PC-6001 を教材としてBASIC言語を学ぶ、という漫画。若年層向けのプログラム入門書としては、現在に至るまで最も評価されるべき名著と思うのだがどうだろう?