Overkill – Java as a First Programming Language

Matthias Endler

オーバーキル ― 初めてのプログラミング言語としてのJava

先日、近所に住む学生と初めてのプログラミング体験について話しました。学校でJavaから学び始めたそうですが、すぐに散々なことになったようです。

私たちの多くはBASICPascalのような言語でプログラミングを覚えました。オブジェクト指向もなければ、高度なファイル入出力もなく、モジュール化もほとんどありませんでした……それでも素晴らしい環境でした。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が必要なんだ」などと最初から説明する人はいないでしょう。まずは全体像を説明したいのです。コンピュータに役立つことをさせるための基本的な考え方を。そうしなければ、初心者を萎縮させ、自分にはプログラミングの才能がないと思い込ませてしまいます。プログラミングは楽しいものであり、その第一歩が最も重要です。だからこそ、不要な抽象化の層でその体験を台無しにしないでください。

リンク

原文は Matthias Endler により に公開されました。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。