Javaの参考書をまとめて書評する

Javaを書く機会がもう当分なさそうなので、持っていたJavaの参考書は自炊して電子化したり後輩にあげたりして全部処分した。今まで技術書の読書記録的なものはつけてこなかったので、忘れないうちにこれまでに読んだJavaの参考書をまとめて書評してみた。

やさしいJava

やさしいJava 第5版 (「やさしい」シリーズ)

やさしいJava 第5版 (「やさしい」シリーズ)

C言語でいうところの はじめてのC に相当する入門書。厳密さや詳しさよりも分かりやすさを優先して書かれているので、プログラミングそのものが初心者で、まずはJavaの基本文法を気軽に身につけたいという人にはおすすめな参考書。

やさしいJava 活用編

やさしいJava 活用編 第4版 (「やさしい」シリーズ)

やさしいJava 活用編 第4版 (「やさしい」シリーズ)

上述の「やさしいJava」の続編。広く浅くJavaでできる様々なことが解説されているが、Swing(JavaでGUIを開発するためのライブラリ)なんて使う機会が一生ないかもしれないし、やりたいことが決まっているなら本書よりもそれ専門の参考書にあたった方がいいと思う。

Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

僕の場合、入門書レベルの参考書だけを読み終えて、すぐに本書を手に取ってしまったのだが、今から思えば本書はもう少しJavaの理解度を上げてから読んだほうが、もっとデザインパターンのありがたみが身に沁みたんだろうなと思う。本書を読み始める前に、ある程度の開発経験がないと深く理解することは難しい気がする。目安としては、一度の開発で自分一人で実装したコードの行数が2000行を超えるようになってから本書を手に取る、といった感じだろうか。それまでの期間は、例えば結城浩さんの Java言語プログラミングレッスン でも読んだり、あるいは参考になりそうなWebの記事でも見つけてサーバとクライアントで通信してデータベースを更新するようなシステム(例えばチャットシステムとか)でも作ったりしていた方が実践的な知識が身について勉強になると思う。ネットワーク通信とDBアクセスを行うシステムを一人で作り上げると俺ってもう一人前のプログラマじゃんみたいな全能感(錯覚)を味わうことができるのでオススメである。

ある程度の開発を経験したうえで本書を読むと、大規模で複雑なシステムの開発であっても拡張性の高い設計を実現するためにはどうしたらいいのかという指針になって、その後の開発において大変参考になると思う。それぞれのパターンのサンプルコードを書写するのもいいが、それよりも各章の内容を理解したうえで、そのパターンを使うことで上手い設計にできるのはどういうケースかを考えて、自分で例題を作って自分で実際に実装してみる、とかやった方がサンプルコードをただ単に書写するよりも深い理解が得られて、後々そのパターンを使うべき場面に出会った時に高い確率でそのパターンの適用方法を思いつけるようになるんじゃないだろうか。

Java言語で学ぶデザインパターン入門 マルチスレッド編

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編

増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編

結城浩さんの参考書といえばどれも分かりやすいことで有名だが、そのなかでも本書は個人的に最高の良書のうちの一つだと思う。書籍名には「デザインパターン」と入っているが、実際のところはパターンの解説書というよりはJavaにおけるマルチスレッド・プログラミングの入門書といった感じだった。Javaにおけるマルチスレッドの知識がほとんどゼロの状態で読み始めても、マルチスレッドの使い方を徐々に紹介しつつ、その技術を使ったパターンを紹介していく、という流れで、本書を読み進めていくうちに自然とマルチスレッドにおける実装方法やjava.util.concurrentパッケージの使い方が身についていく。CallableインターフェースやFutureの使い方も紹介されていて、本書を読了すればJavaにおけるマルチスレッドの基本がひと通り身につくと思う。

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

Java並行処理プログラミング ―その「基盤」と「最新API」を究める―

java.util.concurrentパッケージの作者ダグ・リーが書いたJava並列処理プログラミングにおけるバイブル。かなり難しいの内容だが、非常に詳細に書かれている。Javaプログラマが並列処理について学ぶ場合、まずは上述の 増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 を読んで並列処理の基本を理解して、後は実際に開発を行いながら、内部処理に関してなど、よく分からないと感じた部分について必要に応じて本書を辞書的に使って知識を補う、といった感じで進めていくのが良いのではないだろうか。

Effective Java

EFFECTIVE JAVA 第2版 (The Java Series)

EFFECTIVE JAVA 第2版 (The Java Series)

Rubyでいうところの メタプログラミングRuby に相当する参考書。メタプログラミングRuby はくだけた文体で書かれていて読みやすい一方で、本書は文章が堅くて読みづらい印象だった。とはいえJavaプログラマであれば必読の一冊なので、読書会に参加するなり社内で勉強会をするなりしてひと通りの内容は理解しておいた方がいい。本書を読了しているかどうかで書くコードの質が全然違ってくると思う。Enumにメソッドを定義してシングルトンパターンを実装したり、EnumSetでビット演算したりしていて面白かった。版元であったピアソン桐原が技術書から撤退したため絶版となっていたが、先日、丸善出版から再出版されることになり復活した。

Javaネットワークプログラミング 第2版

Javaネットワークプログラミング 第2版

Javaネットワークプログラミング 第2版

  • 作者: エリオット・ラスティハロルド,Elliotte Rusty Harold,戸松豊和,田和勝
  • 出版社/メーカー: オライリー・ジャパン
  • 発売日: 2001/10
  • メディア: 単行本
  • 購入: 2人 クリック: 13回
  • この商品を含むブログ (8件) を見る

かなり分厚く、しかも内容が古かったこともあり(JDK1.4対応)、途中で読むのを止めてしまった。Javaにおけるネットワークプログラミングに関しては、本書を読むよりも参考になりそうなWebの記事でも見つけて、GETとPOSTにだけ対応した簡易的なWebサーバでも自分で実装したほうが勉強になると思う。

基礎からのサーブレット/JSP

基礎からのサーブレット/JSP 第3版 (基礎からのシリーズ)

基礎からのサーブレット/JSP 第3版 (基礎からのシリーズ)

Webアプリケーションの開発において、MVCにおけるビューやコントローラの部分を実装するのにサーブレットやJSPの知識もひと通りは把握しておきたいと思って買った本。別に本書でなくてはならない理由も特にないので、似たような内容のサーブレット/JSP本のなかから、Amazonのレビューでも参考にして分かりやすそうなものをどれでもいいから一冊選んで読んでおいた方がいいと思う。

定本Javaプログラマのためのアルゴリズムとデータ構造

定本Javaプログラマのためのアルゴリズムとデータ構造

定本Javaプログラマのためのアルゴリズムとデータ構造

今から思えば C言語による最新アルゴリズム事典 なんかを読んだほうが良かったのかもしれないなと思う。サンプルコードを読みながらアルゴリズムを自分で実装してみる際に、C言語ですべてを自力で実装するよりは、Javaで書いたほうがアルゴリズムとデータ構造の学習において本質的ではない部分の処理を実装する際にやや楽ができるんじゃないかと思い本書を選んだわけだが、アルゴリズムとデータ構造の入門書といえば C言語による最新アルゴリズム事典 が定番らしいということを最後まで読み終えた後で知り、なんとなく損した気分になった。

アルゴリズムを学ぶ場合、本に書かれているサンプルコードをそのまま書写してもあまり学習効率は良くないと思う。僕の場合、当時 Ruby を勉強中だったので、Rubyの学習も兼ねて Java で書かれたアルゴリズムのサンプルコードを Ruby に翻訳しながら書くようにした。結果的に、ただ書写するよりも Ruby に変換するという一手間をいれることで自分の中で咀嚼することができてアルゴリズムの理解度も高まった気がする。

そういえば Perl や Ruby のようなスクリプト言語でソースコードが書かれたアルゴリズムの参考書というものはあまり見かけたことがないので、スクリプト言語で開発している人たちであってもアルゴリズムを学ぶ際にはC言語やJavaで書かれた参考書を読むことになるんだと思う。

アルゴリズムとデータ構造の学習に関しては、本書のような入門書を何でもいいからまずは一冊読んで、基本的なアルゴリズムをひと通り理解することがまず第一歩だと思う。それを終えてまだ余力がある・もっと深く学びたいと感じるようであれば 珠玉のプログラミング や、あるいは アリ本 を手に取ると良いのではないだろうか。

テスト駆動開発入門

テスト駆動開発入門

テスト駆動開発入門

  • 作者: ケントベック,Kent Beck,長瀬嘉秀,テクノロジックアート
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2003/09
  • メディア: 単行本
  • 購入: 45人 クリック: 1,058回
  • この商品を含むブログ (161件) を見る

Javaとは直接関係のない本書だが、ソースコードはJavaで書かれている。TDDそのものについては学んだほうがいいと思うが、わざわざ本書まで読む必要はないかなと思った。しかもピアソン桐原が版元であるため現状では絶版になっている。値上がりしている本書の中古を買うよりも車窓からのTDDなどを参考にTDDの流儀に則ってスタックの実装なんかをやってみれば十分ではないだろうか。

Spring3入門

Spring3入門 ――Javaフレームワーク・より良い設計とアーキテクチャ

Spring3入門 ――Javaフレームワーク・より良い設計とアーキテクチャ

会社で所属していたプロジェクトにSpring Frameworkを導入するために読んだ一冊。日本語で書かれたSpring Frameworkの参考書のなかでは本書は最も詳しく解説しているいものだと思うのだが、本書を読み終えただけでは大規模開発にSpring Frameworkを適用できるだけのレベルにまでは到底達しなかった。他の書籍なんかも調べて読んでみたりもしたのだが、それほど詳しく書いてあるものも見つからず、結局、公式サイトのReference Documentation ばかりを読んでいた。Reference Documentation は本家だけあって非常に詳しく解説されており、もしこのドキュメントが公開されていなかったらSpring Frameworkの採用を諦めていただろうなと思う。

個人的にSpring Frameworkはあまり好きにはなれなかったが、Spring MVC/Rooなんかを使うとかなりRailsっぽい感じで開発ができるようになるらしい。Spring FrameworkはJavaEEのJAX-RSなどと並んでJavaによるアプリケーション開発の代表的なフレームワークなので、もう少し詳細に書かれた日本語の参考書があるとJavaで開発している人たちにとって大きな助けになるのになと思った。ちなみに、Java言語のフレームワークであるSpring FrameworkとRailsのプリローダであ るSpringとは一切関係がないので注意が必要である。

Java仮想マシン仕様

Java仮想マシン仕様 (The Java series)

Java仮想マシン仕様 (The Java series)

  • 作者: ティムリンドホルム,フランクイェリン,Tim Lindholm,Frank Yellin,村上雅章
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2001/05
  • メディア: 単行本
  • 購入: 5人 クリック: 98回
  • この商品を含むブログ (34件) を見る

Java言語では、コンパイル結果のクラスファイルがひとつのメソッドで65536 (216) バイト以上だとエラーになる。所属していたプロジェクトでこの問題が発生した際に、原因を調べて解決策を考えるためにバイトコードを読む必要に迫られ、JVMの開発を担当していた同僚に貸してもらって辞書的に使った参考書。JVM開発者たちの間ではバイブル的な立ち位置にある参考書らしい。JVM開発者ならずとも、CGLib のようなバイトコードを扱うライブラリを使用する場合などにも参考になりそうなことが非常に詳しく解説されていたので、それ系のことに興味がある人は是非とも入手して一読しておいた方がいいのではないだろうか。