オーバーキル ― 初めてのプログラミング言語としてのJava
原文は Matthias Endler により に公開されました。 このブログを購読する
最近、近所の学生と初めてのプログラミング体験について話した。彼は学校でJavaを学び始めたのだが、それはすぐにひどいものだったことがわかった。
私たちの多くはBASICやPascalのような言語でプログラミングを学んだ。オブジェクト指向もなければ、高度なファイル入出力も、モジュール化もほとんどなかった……それでも素晴らしかった。BASICなら、ただこう書けばよかった。
PRINT "HELLO WORLD"これで完了だ。これは実際に動くプログラムであり、基本的かつ何度も出てくる課題、すなわち画面にテキストを出力するという問題を解決していた。
同じことをJavaでやろうとすると、こう書かなければならない。
public class Main {
public static void main (String[] args) {
System.out.println("Hello, world!");
}
}考えうる最も簡単な作業を達成するのに、どれだけのプログラミング知識が必要かわかるだろうか?このプログラムを初心者に説明すると、こんなふうに聞こえるだろう。
文字列配列を唯一の引数として受け取りvoidを返すmainメソッドを含むMainクラスを作成し、
PrintStreamクラスのoutオブジェクトのprintlnメソッドを使って、テキストを唯一の引数として渡します。
——どうか括弧を忘れないでほしい。そうすれば、最初の数時間のプログラミングが最高に楽しいものになることは間違いない。
さて、代替案は何だろうか?BASICはもう誰も書きたがらないことは認めよう。グラフィックス用のまともな標準ライブラリがなく(Javaにもないのだが)、スケーラビリティにも乏しいからだ。言語はクリーンで分かりやすいものでなければならない。数値計算には十分速く、堅苦しいC系の括弧言語ほど冗長であってはならない(C++派のみなさん、すみません)。学習曲線はなだらかで、すぐにフィードバックが得られるべきだ(コンパイル言語はこの点でしばしばダメだ)。クリーンなコードを促し、ベストプラクティスが報われるものであるべきだ。そうしたすべてを備えた言語が一つある。Pythonだ。
しかもPythonにはさらに多くのものがある。ほぼあらゆることを手助けしてくれる何百ものライブラリ、主要なIDEへの優れた統合(EclipseのPyDevやIDLEなど)、正確でエレガントな構文だ。
先ほどのプログラムをPythonで書くとこうなる。
print("Hello World")この時点では、オブジェクト指向やスコープ、関数の引数について知る必要はない。面倒な準備や雑務もない。確かにインタプリタ言語ではあるが、初心者にとってそれが致命的な欠点になることはない。
まだ納得できないなら、Javaでテキストを出力したり整形したりするのは上級者にとっては比較的簡単だが、恐ろしいのはファイル入力からだ。
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class fileIO {
public static void main(String[] args) {
String filename = "test.txt", line;
try {
BufferedReader myFile =
new BufferedReader(new FileReader(filename));
while ( ( line = myFile.readLine()) != null) {
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}「おいおい、ファイル入出力はもともと複雑なんだ。そういうものだろ」と言う声が聞こえてきそうだ。それは確かに……内部的にはそうだ。しかし初心者には簡単なインターフェースが与えられるべきだ。Pythonがそのやり方を示している。
file = open("test.txt")
text = file.read()
print(text);このコードは、処理がどのように動くかという自然な理解と完全に一致している。「コンピュータがファイルを開き、読み込み、そして表示する」。5歳の子どもでも理解できる。たとえ内部的にはまさにそう動いていたとしても、「ファイルを読む前に、FileReader上で動作するBufferedReaderが必要なんだ……」などと説明し始める人はいないだろう。まずは大局を説明したいのだ。コンピュータに役立つことをさせるための基本原理を。そうしなければ、初心者を苛立たせ、自分はプログラミングに向いていないと思い込ませてしまうことになる。プログラミングは楽しいものであり、始めの一歩が最も肝心なのだ。だから、不要な抽象化の層でその体験を台無しにしてはいけない。
リンク
記事をランダムに読む
コメント
ログインしてコメントする