あけましておめでとうございます!いっとくです!
年末年始、暇ですね!
エンジニアになって割とすぐにデザインパターンに興味を持ったものの、ずっっっと後回しにしていたのですが、ついに重い腰を上げて本格的に勉強してみようと思ったのが去年の11月。
今まで本格的にオブジェクト指向について理解を深めてきていたわけではなかったので、まずは入門書だろうということでこれを読んでみました。
前々からこの本の存在は知っていたのですが、表紙とペラペラめくって中身を見たときの印象から「あんまりためにならなそう」というジャッジを下して敬遠していた本です。
ちなみに中身はこんな感じ。
なんだか、いわゆる技術書とはかけ離れた感じになっています。
この印象のせいで、ふりがなプログラミングシリーズのような完全初心者向けの内容かと思っていたのですが…全然違いました!めちゃくちゃ勉強になった!
デザインパターンだけでなく、オブジェクト指向プログラミングに対する理解そのものがぐっと深まる内容でした。
確かによく考えたら初心者向けだとしたらページ数が多すぎますね(600ページ弱)。
全く興味なかったこちらの本を読み始めた理由としては、海外ではどんなプログラミングの本が人気なんだろうと思って調べてみたところ、日本ではほぼピックアップされていないこの本がどのサイトでも上位に食い込んできており、英語版のAmazonのレビュー見たら技術書とは思えないほどのレビュー数と星の多さを誇っていたためです。
ちなみにこの本ですが、今月に第2版が出るらしい…。16年越しです!洋書デビュー悩むなぁ
日本語版のレビューでは翻訳に難ありというコメントがあり、まさしくその通りの翻訳になっているのですが、これはオブジェクト指向でプログラムを書いているエンジニアにとってはかなり有益な内容だと思ったので、おすすめポイントを紹介していこうと思います!
デザインパターンとオブジェクト指向は表裏一体
まず個人的な感想ですが、本書を読む前と読んだ後ではデザインパターンの認識が一気に変わりました。
元々僕が思っていたデザインパターンのイメージは、これを暗記すればある課題にぶち当たった時に簡単に解決方法を見つけることができ、より再利用しやすいプログラムが書けるようになるものというイメージでした。
それも間違っていないのですが、今回得た一番の発見としてはデザインパターンを学ぶことによって、オブジェクト指向プログラミングに必要な設計や原則を学ぶことが出来るということでした。
Head First デザインパターンでは、GoFのデザインパターンのおよそ半分が解説されています。
まずもちろんですがそのパターンを理解するということは大事です。チーム開発をする上で、デザインパターンのような共通認識を知っているのと知らないのでは、コードを書く上でも読む上でも設計の話をする上でもその質が変わってくると思います。
本書ではこれらのパターンを学んでいく中でパターン自身も学ぶことが出来ますが、それだけではなく、様々なオブジェクト指向の設計原則にも触れていくのです。
例えば、カプセル化やポリモーフィズムと言った、オブジェクト指向の原則的な部分や、単一責任の原則、依存性逆転の原則、オープンクローズドの原則などの設計原則などです。
以前クリーンアーキテクチャを読んだ時にも、原則については書いてあったのですが、その時は各設計原則の必然性とかメリットが全然理解できませんでした。かろうじて依存性逆転の原則を時間かけて飲み込んだくらいでした。
しかし、実はデザインパターンはこれらの原則に従って生み出されているため、デザインパターンと一緒に学ぶことによって一気にオブジェクト指向の原則への理解も深まるわけです。
カプセル化についても、今まではPrivateなプロパティを設定して、そこに対するセッターゲッターを作れば安全でしょ?的なことかと思っていましたが、実はそうではなく、可変の部分を抽象化してクライアントから隠蔽することで拡張しやすい(既存のコードに影響を与えない)コードを書くことができ、本当のカプセル化の価値を感じることができるんだなぁと痛感した次第でございます…
そしてデザインパターンというのは、振る舞いや状態やインスタンス化や複雑な処理などの様々な物事をカプセル化するパターンであって、適切な場所で使うことによって変更に強いコードを書くことが出来るようになるものだったんですね〜。
今までこういったカプセル化の本質について意識したことがなかったので、本書を読む前と読んだ後でコードの中のよろしくない部分を嗅ぎ分ける力がかなり身についたように思えます。
Head First デザインパターンの構成
本書ではまず課題を抱えたコードがあって、それをリファクタリングする過程を通じてデザインパターンを発見していくという構成になっています。
本書のメインで学べるGoFのデザインパターンとしては、
- Strategyパターン
- Observerパターン
- Decoratorパターン
- Factory Methodパターン
- Abstract Factoryパターン
- Singletonパターン
- Commandパターン
- Adapterパターン
- Facadeパターン
- Template Methodパターン
- Iteratorパターン
- Compositeパターン
- Stateパターン
があり、最後に上のパターンを組み合わせたCompoudパターンについて触れています。Compoundに関してはGoFのデザインパターンではなく、そもそも決まったパターンでもない本書オリジナルの概念ですが、デザインパターンを組み合わせて動かすということについて学ぶことが出来ます。
そして最後に、これまで学んだデザインパターンを現実世界で使用するための心構えのような章があり、付録で残りのパターンを見開きで紹介する章があるという感じになっています。
付録にある残りのパターンはコードの実例がなく、クラス図だけなので今の僕程度の実力だと全く理解できないパターンもありました。
本の冒頭により効率的な学習を提供するため色んな工夫を凝らしまくりましたという説明があるのですが、有言実行で写真や対談形式、クロスワードや自分で考えるコンテンツなど様々な書き方がされています。これが読みやすいかどうかは人によって分かれそうですが、おかげ文字数が少ないところとかはガンガンページが進んでいくので、読んでて快感でしたね。
ちなみに日本語版のレビューでは翻訳がひどいと言われていますが、本当にひどいです。笑
今まで翻訳がひどいと言われている本を何冊も読んできましたが、「わざわざレビューでそんなこと言っている人、神経質すぎない??」って思っていたのですが、今回のは本当にすごかった。
個人的に一番刺さったのはこの文章。
Javaを使っていても、すでにJavaイテレータを使っているクラスと共に独自のイテレータ実装を使えるようにするため、java.util.Iteratorインターフェースを常に使いたいわけではないのでは?
Head First デザインパターン P.338 イテレータに関するQ&Aより
何回読んでもこの文章が何を言っているのか全くわかりません。
まぁこんな感じでひたすら直訳しましたという感じで、日本語だったら省略していそうな主語とかもゴリゴリ使いまくる非常に読みづらい文章ではありました。流石に全く理解できない部分はそこまで多くいありませんでしたが、とは言え読んでて気になるところは多数。
内容が良いだけに翻訳のせいで非常にもったいない感じになっているのですが、オブジェクト指向を学ぶには最高の教材になっていると思うので、デザインパターンやオブジェクト指向について興味があるエンジニアは手にとって損しない良書だと思いました!今まで読んだ技術書の中でもトップクラスに入ると思います。
多分この本は、表紙と中身の雰囲気と翻訳がひどいというレビューから敬遠している人がめっちゃいそうな気がしますが、一度試してみて欲しい一冊です!
以上、いっとくでした。さようなら!
コメント