最近アーキテクチャやデザインパターン等、特定の言語によらない技術の本を読んでいるという話。


最近こんな本を読んだ。

  • リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック
  • ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本
  • Java言語で学ぶデザインパターン入門第3版

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック

各所でおすすめされていたので買った記憶がある。

ある程度コードを書いている人であれば無意識のうちに暗黙知化されているような、コードを書く上でのベストプラクティスがいい具合に言語化されていて、 読んでいてある種の気持ちよさがあった。

ただ、初学者がコードレビューで指摘されがちな内容が大半、という感じで、新たな発見という意味では得られたものは少なかったように思う。 でも書いてある内容自体はすごい大事なことばかりなので、バイブルと呼ばれる所以はわかった。

初学者向けとは思うが、そこまで分厚い本でもないので、読んだことがない人は読んでみてもいいかも。

ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本

エヴァンス本が難解過ぎて挫折したので読んだ。正直な感想を言うと、もっと早く読めばよかった。

DDDを理解する上で主要な概念を、この本特有の順番で説明しているが、これがまた自然な流れで理解に苦しむことが殆どなかった。

前章で腹落ちしなかった部分を抱えながら次章に進むもどかしさが一切なかったので、 これからDDDを勉強したい人にも、OOPを学び始めたばかりの人にもおすすめできる一冊だと思った。

個人的に一番印象に残ったのが、getterメソッドを無闇に実装してはいけない理由。これはドメイン知識が関係ない場所に漏れ出てしまうことが問題だからということだった。

この本を読む前はsetterさえなければオブジェクトに対して直接変更ができないので、「getterは脳死で実装して別に良いのでは?」という考えを持っていたが、 あくまでそれはそのコードに対する理解を伴う人間の独善的な考えに過ぎず、どのようにオブジェクトが利用されるかを考慮して、オブジェクトを自己文書化していくことが大事だということを理解することができた。

ちなみにこの本のサンプルコードはC#だが、C#特有の構文が使われているということもなかったので、OOPな言語に触れたことがある人であれば、難なく読めると思う。

Java言語で学ぶデザインパターン入門第3版

モダンな言語・フレームワークに触れていれば誰もが聞いたことのあるようなパターン(Iterator, Factory, Builder)は理解していたが、 GoFのデザインパターンを全て理解しているわけではないので、いつかデザインパターンに関する本を読もうと思っていた。

そんな中、前出のDDD本を読んだときに、いくつかのパターンが紹介されていたので、流れでこの本も読んだ。

本の構成としては

  1. パターンの概要
  2. 各クラスの詳細
  3. Mainからの呼び出し方(利用のされ方)
  4. まとめ

という順番で各デザインパターンの説明をしていく流れだった。

正直複雑なパターンになると2個目のクラスの詳細だけで結構な量になって、まとめを読んでいる際に頻繁に前のページに戻ることが多かったので、 先に3.利用のされ方を読んでから各クラスの詳細を読んだほうが効率が良かったなーと今になって思った。

あと、自分はJavaをメインで書くわけではないので、あえてこの本デザインパターンを学ぶ必要性があるとは感じなかった。

デザインパターンに関してはWeb上にわかりやすい文献が結構ある。

たとえば、以下のページとかは結構説明がわかりやすいうえに、10言語でサンプルコードも載っていて、とても無料とは思えないほどの出来で個人的におすすめ。

https://refactoring.guru/ja/design-patterns

おわりに

こういう設計思想に関する本は読んだだけで強くなった気になれるけど、 実際にコードに落とし込むには相応の修練が必要だと思うので、がんばります。