【良いコード/悪いコードで学ぶ設計入門】を読んで設計に入門する。

書評【良いコード/悪いコードで学ぶ設計入門】

以降の文章では「良いコード/悪いコードで学ぶ設計入門」を本書、「良いコード/悪いコードで学ぶ設計入門」を書いた方を著者、この書評を書いた人間を筆者とする。

本書の対象とする読者

  • 設計初心者
  • 新卒1〜3年目
  • より良いコードを書きたい人
  • リファクタリングでコードを良くしたいがとっかかりがないと感じる人。

総評

筆者自身について

筆者は設計については無知である。
これまでの仕事では良いコードを書こうという意思はあるもののまずは動くもの、次にリリースを優先してきたタイプの開発者である。
本書を手にとって感じた一番の最初の感想は自分がリファクタリングをおろそかにした結果、成長機会を失って来た事実と焦りだ。
一方でこの機会に設計について再度学習をし直し、日々の業務に活かすチャンスでもあると感じた。
本書は幅広い設計のあり方や、知識に触れてそのバックグラウンドを徹底して固める内容ではない。なので設計に対してのより深い考察を得たい読者には不向きかもしれない。
オブジェクト指向を使いながらデザインパターンなど設計の中でも実践しやすいものを選び、良い例と悪い例の実例を交えて紹介する。
この例がたくさん掲載されているのが自分にとって有益で、考えを広げたりユースケースを想像する材料となった。

本書を読んで得たもの

悪いコードが及ぼす影響は幅広い。
サービスのスケールアップやコードの変更のコストを増加させる。
コードの変更のコストが増えるというのはその分だけ事業の成長を遅らせることになる。
筆者は設計に無知だと前述したが、設計自体に無知だったというよりは本書で紹介される悪しき構造や悪しき設計に対して鈍感だった。
この鈍感さというのは非常に厄介である。
何が良い例なのか、何が悪い例なのか、悪い例はどのような結果をもたらすのかという知識が欠如していると実際にあるコードから学ぶことができないのだ。 この設計は参考になるなとか、書いた人の意図と仕様を読み取ることができない。
そのため成長が鈍化していくのだ。
開発者の成長の鈍化というのはサービスの鈍化につながると筆者は考える。
自分が原因でサービスが鈍化していたかもしれないと振り返り、これからどうするのかを考える良い機会と例をあたえてもらえた。

本書を読んだモチベーション

本書を手にとったモチベーションは2つ
1. 自分の中に良い設計と悪い設計の引き出しが増え、読み終わったときに自分の書いたコードを見返して悪い設計を知覚できるようになりたい
2. OSSや他のチームのコードを読んだときに設計者の意図を汲み取れるようになりたい

本書を読み勧めていく中でこのモチベーションを満たしてくれる箇所は複数あった。
一例を紹介すると、凝集度にふれる第5章の箇所だ。
凝集度の話題は掘り下げればいくらでも掘り下げることができる。だが、本書は最低限抑えなくてはいけないポイントにしぼって凝集度を紹介し、悪い例を挙げる。 そして良い例を示し、凝集度を適切に扱うことがいかに変更に強い構造を生むのかを解説する。
この箇所だけを読んで凝集度に関してわかった気になるのは危険だが、考えを取り入れ自分の中で深めていくのには適しているとおもった。

15章、16章、17章では著者の経験などをもとにどのような設計思想に基づき考察がされているか述べられる。
個人的にはこの章から読み始めると1章〜14章の内容が更に鮮明になると感じる。
著者は最先端の設計をしようとしているのではない。
あくまで保守性の高さに重きをおき、その中でも変更容易性を最重要視している。 なぜ変更容易性がここまで重視されるのか?

  • 悪しきコードが間違った教育をしてしまう
  • 改善の困難さが高品質な実装に触れる機会を失わせる
  • 変更容易性が低いコードはそれ自体がコストであり時を奪う

という理由が列挙される。
同意する部分ももちろん多いが全員に当てはまることではない。筆者はこの理由がもろに当てはまり自身の成長を鈍化させたので同意する理由がおおきかったというのを忘れないでほしい。
また、本書ではカバーできなかった領域やより深い知識を得るための方法にも触れている。
本書を読み終えたあとで買うべき本やインプットとアウトプットの比率にも触れている。初学者に優しい点である。

感想

本書は初学者が自分の現在の状態に気づき、コードをどう直せばいいのか、悪い例がどのような悪影響を自分やチームにあたえるのかを学ぶにはとても良い教材になる。
この本を手にとって筆者のように自分の過去の過ちや成長の鈍化に心が痛くなる人ももしかしたらいるかもしれない。
しかし、諦めずここから勉強と改善がスタートできると思えば儲けものなのではないだろうか?

まとめ

本書を手に取る前は間違った経験則と自身の未熟さに気がつくことができない未熟さがあった。
本書はそれを気が付かせ、その改善の手引をしてくれる。
「良い設計とはなんだろうか?」とか、「保守性の高さとはなんだろうか?」と先輩や上司に聞かれて困ったことがある人、なんでこんなに簡単そうな変更にコストがかかるのかと非エンジニアと揉めたことがある人は一度本書を手にとって見てほしい。
直接問題を解決してくれるクリティカルな解法が載っているわけではない。
だが、丁寧にユースケースをなぞりながら悪しき構造を知覚できる、という一番最初で一番大事なスタートラインに立たせてくれるのが本書である。