dreamin' blog

Ruby on Railsの作者であるDHHは、2012年に投稿されたブログポストの中では5つの技術書を紹介しています。タイトルは『The five programming books that meant most to me』。

日本語でいうと「私がもっとも参考になった技術書 5選」といったところでしょうか?
どのような本を選んだのかと、その本に関するエピソードや読み方?のようなものを書いていきます。

5つの本は以下になります。名著と呼ばれるものが並んでいますね。

ちなみにどの順番に読むべき?というtwitterの質問にも答えています。

『Smalltalkベストプラクティス』 『リファクタリング』 『ライトついてますか』 『PoEAA』『DDD』 の順番のようです。

ちなみに私は 『DDD』『リファクタリング』『PoEAA』『ライトついてますか』『Smalltalkベストプラクティス』の順番で読みました。最初にDDDに手を出したのは今思っても難解だったなと思います。若手がDDDを好んで読む傾向にあるようですが、それより先に読むべき本があるのになぁといつも思ってしまいます 笑

それではDHHの読むべきおすすめ順に筆者の感想や書評も交えつつ見ていきましょう。
※ 引用部分の()内の翻訳は筆者が機械翻訳を参考にしながら翻訳したものです。

Smalltalkベストプラクティス

オブジェクト指向の考え方にプラスして、Smalltalkで使うイディオムなどエレガントな書き方などが解説されています。解決したい問題に対して、こういう書き方をする良いという引き出し増やせる本ですね。特にSmalltalkやRubyのような表現力が豊かな言語にはこのようなタイプは打ってつけな気がします。

デザインパターンやオブジェクト指向の原則を重視したタイプ本よりも、このような現実問題に対する答えを導いてくれる本の方が私も好きです。これの他の言語版があれば読みたいなぁ。
とはいうものの、どんな言語を使っている方にもおすすめできる一冊であることは間違いありません。

DHHもこのように評価しています。

Incredibly practical advice for what constitutes good OO code. It’s done in Smalltalk, but the principles are mostly universal. Probably my favorite nuts’n’bolts of programming design book. Very granular.

(何が良いオブジェクト指向のコードを構成するかについて、信じられないほど実用的なアドバイスです。Smalltalk で書かれていますが、原則はほとんど普遍的です。プログラミングデザインの本の中では、おそらく一番好きな本です。非常に細かい。)

The five programming books that meant most to me – Signal v. Noise

リファクタリング

The fundamental before/after book.[...] The trick to reading this book is to carefully read through every single refactoring pattern and then try to apply it on your code base (you don’t have to commit if it doesn’t fix things). You can’t just blow through it or you won’t really learn it.

(基本的なビフォーアフターの本です。(中略)この本を読むコツは、リファクタリングのパターンをひとつひとつ丁寧に読み通し、自分のコードベースに適用してみることです(修正できない場合はコミットする必要はありません)。この本を読んでも、ただ読み通すだけでは、本当の意味での学習にはなりません。)

The five programming books that meant most to me – Signal v. Noise

私自身はこの本にかなり思い入れがありまして、時折読み直したくなります。
リファクタリング自体はこの本を読む前からやっていました。でも、この本と出会って優秀な先輩にペアプロしてもらっているような感覚があったのです。僕は虜になってこの本にある内容をじっくりと学習しました。また所属していたチームのメンバーでもRubyエディションの輪読会をやりました。議論があることでさらに理解が深まりました。これも読書会がおすすめの本です。

私はリファクタリングをした際のコミットメッセージにリファクタリングカタログの名前を利用することが多くあります。Extract XXX methods to YYY Class といった感じですね。(Rubyの場合はmethod)

この本を読もうとしたとき、現在では3つの選択肢があります。
第一版はJava、第二版はJavaScript、そして前述のRubyエディションはRubyで学ぶことができます。おすすめは第二版のJavaScriptですが、得意な言語で学べるのはとても良いことだと思います。


↑第二版JavaScript


↑第一版Java


↑Rubyエディション、プレミアがついて高いです。 復刊運動も展開されているので、無理して買う必要はないと思います。

ライト、ついてますか

プログラミングを仕事でやる上では、問題解決をするのではなく、問題発見をすることはとても大事です。DHHも以下のように評価しています。

Nothing has increased my programming productivity more than being able to restate hard problems as simple ones.

(難しい問題をシンプルな問題として復元できることほど、私のプログラミングの生産性を向上させてくれるものはありません。)

The five programming books that meant most to me – Signal v. Noise

ときに型破りな手法を盛り込んででも、支持を得たRailsの作者らしい言葉ですね。

この本の共著者のワンバーグやトムデマルコ本は今でもとても人気があります。私も今彼らの本を一つ一つ読んでいっている段階です。
wikipediaにもよいまとめがのっています。

PoEAAについて

DHHはPoEAA本を以下のように評価しています。

Great inventory of many of the patterns that underpin Rails itself, as well as descriptions of many of the “new” approaches that people advocate today (like transaction scripts and service layers). You won’t necessarily implement most of these patterns yourself, but it’s an invaluable resource to understanding the differences in architectures and why framework work the way they do

(Railsを支える多くのパターンと、人々が提唱している「新しい」アプローチの多く(トランザクションスクリプトやサービスレイヤーなど)について書かれています。必ずしもこれらのパターンの多くを自分で実装する必要はありませんが、アーキテクチャの違いやフレームワークがなぜそのように機能するのかを理解するための貴重なリソースとなっています。)

The five programming books that meant most to me – Signal v. Noise

『Rails自体を支える多くのパターン』を例に上げるとたくさんありますよね。ActiveRecordパターンをはじめ、フレームワークの足回りに必要なものがたくさんRailsに詰め込まれています。詳しくみていくのは別の機会に譲りたいです。

少し補足すると、この本は伝説の読書会が開かれていた本でもあります。
なぜ、伝説かというと参加者が錚々たる面子です。検索すれば当時参加されてた猛者の記事がたくさんでてきます。

アジャイルサムライの訳者でも角谷さん曰く、

高橋さんはもちろん、ひがやすをさんも来てくれてました。あとはt-wadaさん(和田卓人氏)とかogijunさん(荻野淳也氏)とか。伊藤直也さんも1回だけだけど来たことがあります。そういえばsecondlifeさん(舘野祐一氏)と初めて会ったのもこの読書会

よしおか×角谷対談「勉強会に眠る宝物」 - @IT自分戦略研究所

メガベンチャーのCTO経験者やOSSで成果を出されてる方がずらり。検索すると、ここに名前がないメンバーでも凄い方が参加されて、ブログを書いていたのがわかります。このころのブログ文化はほんとうに今のtwitterで一瞬で消費されてしまう文化とはちょっと違いがありますよね。

日本語で読む場合は翻訳が現在我々がよく使っている用語と少し違ったりします。
私は原著で読む挑戦をしたのですが、英語の穴を埋めるために、2016年あたりに読書会をクックパッド社やTMIX社で開いてくれていたころに参加しました。

1人で読むのがしんどい方はコミュニティの力を利用できるのも、現代のテクニックかもしれませんね。

洋書はこちら。

DDDについて

DHHはDDD本を以下のように評価しています。

It’s a slug to work through, but the ideas are worth it. It’s a great primer on how to turn a problem space into a beautiful OO domain model.

(読むのは大変だけど、アイデアに価値がある。問題空間をどのようにして、綺麗なオブジェクト指向的なドメインモデルに落とし込むことについての素晴らしい入門書。)

The five programming books that meant most to me – Signal v. Noise

これだけではRailsとDDDの関係を解き明かすことはできません。
まずはDDDでよく議論になる部分を整理するところから先にはじめ、またの機会に詳しくみていきましょう。

また読むのはわりと難しいです。私はこの本を読んで、長い間意味を理解できずにいました。
こちらもDDDコミュニティの力を使って読むのもよいかもしれません。自分の会社の有志で読書会もいいかもしれませんね。

まとめ

DHHが参考になった技術書を自分でも読みつつ、その技術書の評価と合わせて紹介しました。この記事を土台に、Railsと技術書の関係に迫る次の議論を別の記事で展開できればと思います。

補足

ちなみにDHHの記事日本語訳を書いてくれた方がいたと思ったのですが、もしご存知の方がいらっしゃったら @koheisg にリプライくださるとうれしいです。