最もタメになる「初心者用言語」は Java

なんだか楽しそうだったので・・・
最もタメになる「初心者用言語」は JavaScript。 - IT戦記
最もタメになる「初心者用言語」は Python! - 西尾泰和のはてなダイアリー
最もタメになる「初心者用言語」はC++ - おびなたのはてな日記"

サンプル

まずこいつを見てくれ。こいつをどう思う?

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

import sun.nio.cs.ext.MS932;


/**
 * 「hoge.txt」っていうテキストファイルの中身を出力するよ。
 */
public class Main {

    public static void main(String[] args) {
       
        // Fileオブジェクトを作る
        File file = new File( "hoge.txt" );
       
        // Fileオブジェクトからファイル入力ストリームを作る
        FileInputStream fileInputStream;
        try {
            fileInputStream = new FileInputStream( file );
        } catch (FileNotFoundException e) {
            System.err.println( "ファイルがないです><" );
            return;
        }
       
       
        // 「MS932」という文字コードを表す定数オブジェクトを取得する。
        Charset ms932 = MS932.defaultCharset();
       
        InputStreamReader inputStreamReader = null;
        BufferedReader bufferedReader = null;
        try {
           
            // 文字列リーダーを作る。(材料は入力ストリームと文字コード)
            inputStreamReader = new InputStreamReader( fileInputStream, ms932 );
            // バッファリング機能を備えた文字列リーダーを作る。
            bufferedReader = new BufferedReader( inputStreamReader );
           
            // BufferedReader#readLine() が null を返すまで
            // (ストリームの終わりに到達するまで)繰り返し
            for( String line = bufferedReader.readLine(); line != null;
                    line = bufferedReader.readLine() ) {
                // 標準出力に出力
                System.out.println(line);
            }
        } catch (IOException e) {
           
            System.err.println( "ファイル入力エラーです><" + e.getMessage() );
           
        }finally{
           
            // BufferedReaderを閉じる
            if( bufferedReader != null ) {
                try{
                    bufferedReader.close();
                }catch(IOException e){}
            }
           
            // InputStreamReaderを閉じる
            if( inputStreamReader != null ) {
                try{
                    inputStreamReader.close();
                }catch(IOException e){}
            }
           
            // ファイル入力ストリームを閉じる
            try{
                fileInputStream.close();
            }catch(IOException e){}
        }
    }
}

すごく・・・長いです。

Javaは長い

長いですね。
読むのもイヤになります。
Rubyなら三行で書けるのに。

f = open( "hoge.txt" )
f.each {|line| print line}
f.close

Rubyならこれだけのコード量でいいのに、あんな冗長なコードを書かないとファイルの中身すら見れないなんてヒドい!とても初心者にはお勧めできない!!」
「そんなことはないよ。逆だよ」

長いのは優しさだよ

Javaソースコードは長いですが、初心者がソースを追うときに手がかりがいっぱいあるのは良いことです。見たことのないクラスが出てきても、ソースファイルの上の方でimport宣言されているので、JavaDocを引くのが簡単なのです。JavaDocを見れば日本語の説明があるという「安心感」は、初心者にとって一番大切だと思います。

プログラミングを始めてみた頃のことを思い返すと、最初は右も左もわからなくて、本屋に行っても何を買ったらいいのかわからないし、JavaHouseに相談しても質問の仕方が悪いとボコボコにされるしで、もう怖くて怖くて引きこもるしかなかったです。そんな状況で日本語のJavaDocがあったのは本当に心強かったです。

楽しくはないけど

最初のうちは具体的なコードとJavaDocと言語仕様を何回も見て、自分のできる範囲でコツコツと経験値を貯めていくのが一番です。地道にコツコツと勉強したり実践したりするうちに、見たことのあるクラスが増えてきて、レベルが少しずつ上がってきます。はぐれメタルはなかなか出てこないし、地道な積み重ねなので、あまり楽しくはないかもしれません。
仕事でプログラムを書く場合、初心者にとって一番タメになるのは「ぶっちゃけ、プログラミングなんて簡単には覚えらんないし、楽しいことばかりでもないよ。」という現実だと思います。
そんなわけで、入り口だけ優しい言語よりも、見るからに厳しくて大変な道のりなんだけど、コツコツやれば何とかモノにできるし、地道な旅をサポートしてくれる心強い環境が整っているJavaが初心者のタメになるに一票。

最後に

   ∧_∧
  ( ´∀`)< ぬるぽ

追記

間違ってました!
こちらで詳しく書かれていますが
MS932.defaultCharset()はMS932が取得できるとは限らない。

        Charset ms932 = MS932.defaultCharset();

って書いても「MS932」は取得できません。MS932の親クラスである Charset.defaultCharset() が呼ばれるだけでした。文字コードを明示的に取得するには

        Charset ms932 = Charset.forName("MS932");

ってやるのがいいみたいです。