hello, world

20180419

明日4/20(金)より2018年度のシステム開発実践科1年生のJavaの授業が始まる。
どんなプログラミング言語でも、先ずは「hello, world」である。
Brian Kernighan(ブライアン・カーニハン)とDennis Ritchie(デニス・リッチー)の名著「The C Programming Language(邦題:プログラミング言語C)」以来、最初に作るプログラムは、学ぶ言語がCでもJavaでPerlでもRubyでも、とにかく「hello, world」と標準出力することに決まっている。
こんな簡潔でプログラミングのイントロに相応しいプログラムを考案してくれたKernighan & Ritchieという偉大な二人の先人に感謝したい。
しかし、この「hello, world」、真剣に説明しようとすると、なかなか手強いプログラムでもある。
Cの場合、標準出力にはprintf関数を使うわけだが、関数もよく解らない初心者に対し、可変長引数を理解させるのは至難の業だ。
更に、「printf関数を呼び出すにあたり必要となる同関数のプロトタイプ宣言が記述されているstdio.hをインクルードする」という説明を初心者に理解してもらうのは無理な話である。
これがJavaになるともっと厄介だ。
Javaの場合、標準出力にはprintlnメソッドを使うわけだが、「printlnメソッドとは、Systemクラスの静的フィールドであるPrintStreamクラス型のoutが参照しているオブジェクトが持つインスタンスメソッドです」と言ったところで頭の中は?だらけだろう。
この辺りのことについて、初心者向けの市販の書籍では「おまじない」と書いてあることがある。
しかし、これからプロを目指そうという生徒に対し、「おまじない」という非科学的を言葉は使いたくない。
「hello, world」というプログラムの仕組みと奥深さは、そのプログラミング言語の習熟度が上がれば必ず理解できるはずである。
従って、「おまじない」という言葉を使って無理やり刷り込む必要はない。