in short
- 内容自体はとても良かったし勉強になった
- だが、文章がおかしくて読みづらかったし、サンプルも図も不親切
- 初心者が読んで100%理解できるのかは疑問(読まないよりは読んだほうが良いと思うが)
感想1: 読みづらかった
全体的な感想として、とても読みづらかった。 まず、(訳と原文のどちらの問題なのかわからないけど、) 言い回しが妙なところが多い。 読んでてかなりつっかえた。
あと、サンプルがどれも具体性がない。 ちょっと考えれば「あのことを言ってるのかな」とわかるが、経験の浅い初学者がこれで理解できるとは思えない。
図に関しても分かりづらい。 本文と合致してなかったり、何を意味してるのか提示されてない図が多かった。
結構多くの人がレビューに関わっていたみたいだし、前評判も良かっただけにとても残念だった。
感想2: 内容はとても良かった
読みづらくはあったが、言ってる内容自体はとても良かった。 何度も「確かに」と頷いたし、「そういうことだったんだ」と合点が言った部分もたくさんあった。
たとえば、17ページの以下。
ファイル中のコードを読み手(それぞれの書き手にたくさんの読み手がいることを忘れないように)が遭遇したいと思う順番に並べ替えよう。
基本的だけどとても大事なこと。読者目線を持つことは、プログラムだけでなく文章を書くうえでも大事なルールだ。
各部ごとの感想: 第I部は必読
第I部の整頓はどの章も重要だ。 個人的には特に15章の「冗長なコメントを削除する」ができるようになるとプログラマとしてかなりレベルが上がると思う。
ほかにも、11章の「ステートメントを小分けにする」も、ほかの書籍で言及されることは少ないけど僕もかなり大事だと思っている。プログラムコードも意味ごとに「段落」を作ると読みやすくなる。
第III部もよかった
第II部、第III部は特に読みづらい部分が多かった。でも、 第III部は大事な話も書いてあった (第II部はそんな目新しいことは書いてなかったかな)。
例えば、97ページでは、なるべく不可逆的な変更(もとに戻せない変更)を避け、可逆的な変更(もとに戻せる変更)で代替しようという話が出てくる。これは『Clean Architecture』(注:ここでは書籍名を指す)の15章に出てくる「選択肢を残しておく」とも共通している。可逆的な変更にはどんどん果敢に取り組んでいきたい。
結合、凝集のわかりやすい定義が書かれていた
101ページには結合の定義、113ページには凝集の定義が書いてある。これがとても分かりやすかった。今までふわふわしてたが、かなり腑に落ちた。
この変更の伝播特性は「結合(Coupling)」と名付けられた。1つの要素を変更するのに他の要素の変更が必要であれば、2つの要素は特定の変更に関して結合している。
(p. 101)
この結合の説明はとても明快でわかりやすい。 また、なぜ結合を減らすことがコードを読む、管理する上で大事なのかも理解しやすい。
結合した要素は同じ親要素の子要素同士であるべきだ。これが凝集(Cohesion)の1つめの意味合いだ。(中略)凝集の2つめの意味合いは、堆肥ではない要素(つまり結合していない要素)は別の場所に移すべきということだ。
(p. 113)
この凝集の説明もわかりやすい。結合した要素がバラバラに配置されているパターンはよくある(repository/FooRepo、model/FooModel みたいな)、package by layer)。これは凝集度が低い。それに対して、親が同じ状態(Foo/FooRepo、Foo/FooModel)は凝集度が高い。まとまり方が良いと言い換えても良い。親に視点を移して語るのはあまり見ないけど確かになと思った。
まとめ: 勉強にはなったけど、初学者向きかは疑問
勉強になったし考えの整理もできたので、個人的には読んで良かった。でも、文章が読みづらかったりサンプルコードや図が分かりづらいので、初学者が読んですぐ理解できるかは疑問だ。おそらく、多少経験があって行間を補完できる程度の想像力がないと効果が半減すると思う。
誰かtidy first?の行間を埋めて解説する30分くらいの発表してくれないかなぁ…それがあるととても良いなと思った。