[Books] プログラミング関連書籍のご紹介―Java SE 編 (ja)

今回は筆者が使ってきた(一部は今もなお使い続けている)Java関連の参考書籍をご紹介します。Java関係は一度にすべてご紹介できないほど書籍があるので、今回はまずCore JavaとJava SEに関するものを中心に取り上げます。

1. Java入門
まず、筆者が新人研修の教材として当時在籍していた会社から支給された参考書2冊をご紹介します。研修の目的はJavaの基本を学んだ後、講師から出題される「最終課題」をJSPによるサーバーサイドJava開発で実現することでした。
どちらの書籍も、研修担当が類似書籍と比較しながら中身を吟味し採用したものですので、多少なりとも役に立つものでした。
「はじめてのJavaプログラミング」は、筆者が使用したものはJ2SE 1.4対応版で現在発売されている版とは多少異なるかと思いますが、JDKのインストールから丁寧に説明している点は、始めてプログラミングを行う人達への配慮としては適切だと感じています。その他の内容については丁寧に書かれている点(プログラミングのフロー制御など)もあれば、本書だけでは納得のいかない部分もあります。筆者に限って言えば、例外処理(特にキャッチ例外がなぜ存在するのか)やインタフェースによるポリモーフィズムに関する(インタフェースはC++にない概念のため後々まで苦しみました)など、オブジェクト指向の本質については納得のいく説明が得られなかったと感じています。
もう1冊の「JSPハンドブック」については情報量としては十分で、最終課題に取り組む上で大いに役に立ったのは事実です。しかし、Javaに不慣れな人間でもわかるような初歩的な記述ミスがいくつか見られ、サポートページで質問をしても結局回答が得られなかった、少し残念な書籍でもあります。
ここで挙げた2冊は、いずれも著名な洋書の翻訳版より敷居が低いという点で、集合研修には都合がいいと考えています。ただ、すべて独力で習得しようというのであれば、この後紹介する書籍を根気よく取り組んだ方が良い結果が得られるでしょう。

筆者が本当の意味でJavaの入門書として認めている代表格が、これからご紹介する「Javaチュートリアル」と「独習Java」です。どちらの書籍もJavaの基礎から始まって、Java言語仕様を一通り解説する形式をとっています。
どちらも似たような内容なので選択に迷うかと思いますが、筆者の主観では「Javaチュートリアル」の方がより優れていると思います。
筆者はJavaのインタフェースの概念を「独習Java」の該当項目を繰り返し読むことで習得しました。その後「Javaチュートリアル」を手にして、インタフェースについてより簡潔で的を射た説明をしていることを知り、このような判断を下しました。
最新版の「Javaチュートリアル」はJava SE 6(Java言語仕様第3版準拠)を前提に書かれており、文体も「です・ます」調の柔らかいものです。また、執筆者(なぜか女性陣が多い)はいずれもJavaそのものの開発者として深く携わってきた人達ばかりであるため、情報の確度という点でも一日の長があると感じています。
筆者であれば以上の理由から「Javaチュートリアル」を選択しますが、書店で拾い読みして両者を読み比べ、よりご自分に合った方を選ぶのが最良の選択と考えます。内容からして、すべて読み終えた後のスキルレベルは概ね同等かと思われます。

Javaの入門書はコマンドラインツールの利用を前提としたものが多く、実際のJava入門コースでも最初にコマンドラインツールで学習し、その後にEclipseやNetBeansなどのIDEを紹介するケースがほとんどです。しかし、実際の開発の現場ではIDEは使用するのが当然であり、むしろコマンドラインツールを利用するケースの方が稀です(使い方を知っていないと困る場面もありますが、直接触れることは滅多にありません)。
これからご紹介する「創るJava」は、これまでのJava入門コースとは逆説的な発想から生まれた書籍で、初めからNetBeansでJavaを学習するように構成されています。著者のきしだなおきさんも、ご自身のブログで「そろそろIDEよりコマンドラインのほうが理解が深まるという有害な妄想は捨ててはどうか?」と題して、コマンドラインツールとIDEのどちらでJavaを学ぶべきか考察しています(Javaの学習はIDEでさっさと済ませて、その分をアルゴリズム等の学習にあてたほうが良い、など)。本書はきしださんの持論を体現したと言っても良い、ユニークな書籍です。範囲としてはJavaの入門からJava EEの基礎レベルまでと入門書としてはやや広めですが、NetBeansが前提なのでビルド手順だけで途方に暮れるようなことはないでしょう。解説は必要十分ですが、リファレンスとして使うほどのボリュームはなく、またリファレンスを意識した構成でもないため、生粋の学習書と言えます。これからJavaを学習する人達には強くお薦めしますが、研修教材を選定する側としてはパラダイムシフトを要求されることから戸惑いはあるかと思います。

2. Javaを学ぶ
入門書を終えたら、Javaの原典「プログラミング言語Java」に取り組むと良いと思います。本書はJavaの父・ジェームズ・ゴスリングらが共同で執筆したJavaの解説書で、入門書ではカバーしきれない細部まで丁寧に解説しています。版を重ねるごとに解説(あるいは翻訳)が改善していますが、さすがに入門書に比べると敷居が高いのは否めません。しかし、Java入門書を卒業したプログラマにとっては決して難しい内容ではないと思います。Javaをじっくり学ぶのに適した信頼できる1冊であり、その網羅性を生かしてリファレンス的な使い方をするのも悪くないと思います。
なお、本書の最新版はJava言語仕様第3版(JLS3)、具体的にはJava SE 6に合わせた記述となっています。本書の改訂はJava言語仕様の全面改訂と概ね同じ時期に行われてきており、現在の版はJLS3の実装であるJava SE 6をターゲットとしています。Java SE 7はJLS3の追加仕様として公開されているため、少なくともJava SE 7向けに本書が改訂されることはなく、おそらくはJava SE 8~9の頃に改訂されることになるでしょう。

C++関連書籍ご紹介のところでも題名だけ触れましたが、「Effective Java」という良書があります。Javaの達人ジョシュア・ブロックが「Effective C++」の構成をヒントに、Javaプログラムにおける良いコード・悪いコードを「~すべき」「~すべきでない」という切り口でテンポ良くまとめています。
ジョシュア・ブロックという人物は、かつてSunに所属し、Javaの黎明期からJava SEのコアAPI(身近な例ではCollectionフレームワークの設計・実装や国際化対応)に深く携わった人物です。現在はOracle(旧Sun)を離れGoogleにてAndroidのAPI開発に携わっていると聞きます。彼が長い経験から導き出したJavaプログラミングのあるべき姿をトピックごとの読み切り形式で会得することが出来る有益な本で、Javaプログラマとしてはぜひ手元に置いておきたい1冊です。
なお、「Effective Java」は改訂の際にJava言語仕様第3版(特にジェネリックス)に対応するため、旧版から重要なものを含めいくつかのトピックを削っています。できれば初版と第2版の両方を揃え、ジョシュア・ブロックの英知を少しでも多く取り入れたいものです。
※実際に手に取るとわかりますが、比較的ページ数の少ない本です。挫折しにくいのも本書のメリットかも知れません。

「Effective Java」同様に各章数ページ読み切り形式の書籍として、「Javaスタイルブック」もお薦めします。同じプログラムの作法を綴った書籍ですが、より具体的に「コーディング規約」について「~すべき」または「~すべきでない」とまとめています。これ自体がコーディング規約と言っても良いくらいですので(ページ数も少ないです)、場合によってはプロジェクトの予算でメンバー全員分を購入しても良いかも知れません。
筆者もいくつものソフトウェア開発プロジェクトに携わってきて、様々なコーディング規約を見てきましたが、あまり本質的でないところばかり規約化して、重要なところが所々抜け落ちているような中途半端な規約(そのようなものを規約と言うべきかはさておき)がほとんどでした。政治的な理由で独自の規約を作らなければならない立場の方々にも本書を一読して頂き、本書のように有益なコーディング規約を作成して頂ければと思います。
もっとも、Oracle(旧Sun)が「Code Conventions for the Java Programming Language」というドキュメントを配布しています。これをダウンロードして(必要であれば翻訳した上で)
プロジェクトメンバーに配布した方が手っ取り早いかも知れません。

3. Javaをより深く
Javaは無数のAPIがあり多方面で活用されていますが、Javaの言語仕様自体を極めるのであれば「Java言語仕様」(原著略称のJLSで呼ばれることも多い)は必携でしょう。本書を先頭から読むのは無謀ですが、リファレンスとしては非常に重宝します。仕様書そのものであるため(誤訳でなければ)内容には絶対的な信頼感があります。「Java言語仕様」はJDK1.0の時に初版、J2DK1.2の時に第2版、JDK6の時に第3版がそれぞれ出ています。なお、英語版ですが本書のオンライン版を無償で手に入れることができます。オンライン版ではJDK7に対応した改訂版(Java SE 7 Edition)も存在します。
もう1つの仕様書として「Java仮想マシン仕様」があります。こちらはJava VMの仕様になり、クラスファイルのフォーマットやJava VMのニーモニックなど、かなり深い内容になっています。「Java仮想マシン仕様」はJDK1.0の時に初版、J2DK1.2の時に第2版がでています。JDK6まではすべて言語仕様の変更のみであり、仮想マシン仕様は基本的に変更はありません。JDK7ではJSR-292のJava VM拡張(InvokeDynamic)が含まれるため仮想マシン仕様に変更があります。こちらも英語版ですがオンライン版が無償で提供されています。JDK7に対応した改訂版(Java SE 7 Edition)も公開されています。

Java関連の書籍は1回の投稿では紹介しきれないため、今回はJava SEを中心に紹介しました。次回はJava EEの書籍をご紹介します