技術書の読み方を考えつつ、『ドメイン駆動設計』を位置づける。
はじめに 〜1冊目の本〜
あなたは技術書をどのくらい読んでいるでしょうか?多い人は月何冊も読んでいるでしょうし、もう何年も読んでいないという人もいるでしょう*1。あるいは、「買っているけど読んでいない」ということもあるかもしれませんね。私にも積んでしまっている本があります。
技術書はすでにかなりの数が出版されており、その数は増え続けています。経験を積んだ方であれば、「自分にとって必要な本を見抜く眼」を持っているものですが、これから学ぼうとする方にとっては、読んだ方がよさそうな本の数も値段も絶望的かもしれません。このエントリの目的の1つに、『ドメイン駆動設計』の紹介があることは否定しませんが、それ以上に、「技術書の読み方」について考えてみたいと思います。
仕事としてプログラミングに携わる人であれば、「退職するまでに1冊も読まない人」はおそらくいないでしょう。手がけることになるプログラミング言語について、少なくとも1冊はその言語の入門書を読むことになるからです。あなたがまだ新人のJavaプログラマで、最初に読むべき1冊を探しているのであれば、結城さんの次の本がオススメです。
- 作者: 結城浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2005/10/26
- メディア: 大型本
- 購入: 6人 クリック: 159回
- この商品を含むブログ (57件) を見る
- 作者: 結城浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2005/10/26
- メディア: 大型本
- 購入: 12人 クリック: 175回
- この商品を含むブログ (51件) を見る
2冊目の本 〜より美しく〜
自分のやりたい処理がとりあえず実装できるようになっても、プログラマとしてはまだ足りません。コードは書くものであると同時に、読まれるものでもあるからです。美しいコード、あるいは読みやすいコードを書く、という観点から考えると、やはり古典はこの1冊でしょう。
- 作者: マーチンファウラー,Martin Fowler,児玉公信,平澤章,友野晶夫,梅沢真史
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/05
- メディア: 単行本
- 購入: 94人 クリック: 3,091回
- この商品を含むブログ (312件) を見る
このくらいの本になると、入門書と違って、「ちょっとよくわからない」場所が出て来るかもしれません。そういう場所を適度に飛ばしつつ、全体をとらえる読み方が求められるようになってきます。「難しい」という感想は思考の停止です。何が理解を妨げているのかを正しく分析することが大切ですね。入門から中級への橋渡しをしてくれる本も何冊も出ていますので、そういう本を読んで補うという戦略もあると思います。
3冊目の本 〜ユーザのために〜
「必要な処理がきれいに書けるようになりました」という状態になったところで、ぜひ読んでいただきたいのが、『ドメイン駆動設計』、通称DDD(Domain-Driven Design)です*2。
- 作者: エリック・エヴァンス,今関剛,和智右桂,牧野祐子
- 出版社/メーカー: 翔泳社
- 発売日: 2011/04/09
- メディア: 大型本
- 購入: 19人 クリック: 1,360回
- この商品を含むブログ (131件) を見る
扱っている内容に抽象的なものが多く、英語として見ると比較的難しめで、かつ500ページ超の防弾仕様であることから、原書を読むにはなかなか敷居が高い本でした。それにもかかわらず、長いこと翻訳が出版されずにいたためか、位置づけについて変にこじらせてしまったところがあるように思います。現実には、実に真っ当なことが体系立てて書かれている良書です。「オブジェクト指向とかを好きな人が読む本」と敬遠しないで下さい。本当に大切なのは、例えば「リポジトリクラスを作るかどうか」ではなく、ユーザの業務のとらえ方にどこまで添うことができるか、どこまで言葉を丁寧に扱うかといった、もっと抽象的で普遍的な部分です。
読書、という観点で考えると、「ドメインモデルを反映したソフトウェアを作る」という観点から、いくつかのエントリポイントが提供されます。
その先に
この辺りから、読みたい本、読むべき本は少しずつ拡散していきます。いくつか例を挙げましょう。
- きれいなコードという意味では、アンクルボブの『Clean Code アジャイルソフトウェア達人の技』も有名です。また現実のコードをどのようにリファクタリングしていくか、という観点を学ぶ上では『レガシーコード改善ガイド (Object Oriented SELECTION)』は必読です。
- 言語に関する中級以上の知識が必要なのであれば、『Effective Java 第2版 (The Java Series)』はとりあえず抑えておくべき本でしょう。
- デザインパターンについてもっと網羅的に知りたいと思えば、結城さんの『増補改訂版Java言語で学ぶデザインパターン入門』があります。もちろん、原典(『オブジェクト指向における再利用のためのデザインパターン』)を読むのもいいでしょう。あるいは一歩進んで『アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技』も読む価値のある本です*4。
- ソフトウェアを作るプロジェクトというものがどういうものなのか、ある程度体系的に見たいということであれば、『Ship It! ソフトウェアプロジェクト 成功のための達人式ガイドブック』がありますし、一歩進んで、アジャイル系の開発プラクティスを詳しく知りたいとなれば、『アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~』などが良書として有名です。
- プログラマの心がけという意味では、最近ですと『プログラマが知るべき97のこと』(通称「きのこ本」)が話題になっていますね。
読むべき本の量に圧倒されないように、最初は「まず5冊だけ読む」あるいは「まず10冊だけ読む」と決めて、各カテゴリから1冊ずつ選んで読んでみるというのがいいと思います。その時に大切なのは、入門書を何冊も買ってしまわないこと。本屋に行けば、同一ジャンルの入門書が何冊も並んでいますが、全てを読む必要はありません。同系の入門書を3冊買うなら、後の2冊のお金は、もう一歩上の本に振り分けた方が有益でしょう。
何かについてある程度深く知りたいと思うと、1冊読めば十分ということはなく、関係する本を何冊か読まなければいけなくなっていくと思います。良書と呼ばれる本には1冊1冊に価値がありますが、特定分野の本を何冊か読むことで見えて来るものもあります。重要なのは目的意識を持って本に取り組むこと、読んだ本を自分の中に位置づけていくことですね。さらに、巻末に必ず付いている参考文献一覧も、著者がどういう本の中にその本を位置づけているかを理解する上での参考になります。流行を追いかけることもある程度は必要ですが、自分なりの読書マップを作りながら、「自分が興味を持っている分野」を組み立てていくような読み方が大切なのだと思います。中級以上の本を5冊〜10冊読み終わる頃には、少し世界の見え方が変わってくるはずです。