Classic Computer Science Problems in Java

正月にManningが全品半額セールをやっていたのでなんとなく購入しておいたものですが、読んでみたら思いの外面白かったです。

シンプルな検索アルゴリズムから後半はクラスタリングニューラルネットワークなどまで、シンプルなJavaプログラムで解説されています。まずはジェネリックフレームワークを作成し、そのフレームワークを使用して具体的な問題を解く、という流れになっており、サンプルコードのシンプルさや、各章の最後にあるエクササイズのほどよい難易度(難しすぎない)もあって、自分で実際に手を動かしてみようという気にさせてくれます。ノリ的には「作って学ぶアルゴリズム」とでもいうような感じです。また、Javaのデータ構造や普段あまり使わない数学関係のライブラリについて復習することができたのも予想外のメリットでした。

一方で、扱っているのはプリミティブなデータ構造やアルゴリズムではなく比較的抽象度の高いもので「Classic Computer Science Problems in Java」というタイトルから想像される内容とは若干異なるイメージを持たれる方もいらっしゃるかもしれません。数学的な知識が必要な箇所もあるのですが、この書籍の範囲外ということで説明は必要最小限に留められています。アルゴリズムの理解そのものについては支障はないとは思うのですが、そのような部分を求めてこの本を読むと肩透かしを食らったような感じになってしまうかもしれません。

なお、このClassic Computer Science ProblemsシリーズはJava版以外にもPython版となぜかSwift版がすでに出ているようです。目次を見る限り扱っているアルゴリズムは同じようなので、これらの言語をお使いの方はそちらを読まれるのが良いかもしれません。

とにかく完成度が高く、読んでいて楽しいエンターテイメント性のある一冊でした。普段ビジネスアプリケーションの開発に従事しているとこのようなアルゴリズムに触れる機会はなかなかないと思うのですが、そういった方にこそおすすめしたい一冊です。