デザインパターン読書会の感想 #techplaygirls
デザインパターン読書会 with Katorie さんが終了しました。その感想です。
- 2020/03-2021/03
- 週1
読んだ本
デザインパターンを学ぶモチベーション
きっかけは Global Day of Coderetreat 2018 in Matsuyama で良い設計について考えたことです。そこから綺麗なコードを目指すためにオブジェクト指向を学ばなアカン!と思って、オブジェクト脳のつくり方 を読んでデザインパターンのコンポジットパターンってすげぇ〜となり、デザインパターンを勉強しよう!ってなりました。
そして読書会の半ば、中弛みしそうになったときに Youtube で見つけた 5 Design Patterns Every Engineer Should Know で、エンジニアのキャリアステップのポイントとしてフレームワークを使う側から作る側になる(from a framework customer to a framework creator)ことが必要で、そのためにはデザインパターンを学んだ方が良いよっていう動画を見て「確かに〜頑張るぞ💪」ってなりました。
2冊の本の読み方
私たちは2人とも Rubyist なんですが、Ruby のデザインパターン本が絶版ゆえにネットで高値が付いて買い辛かったことと、デザインパターンを言語に偏りなく勉強したいという思いもあって結城さんの Java のデザインパターン本をメインに読みました。Java は基本文法を勉強したことがある程度でしたが、サンプルコードの内容はほとんど理解できましたし、Java 特有の書き方、ライブラリには説明が付いていたので混乱することも少なかったです。
でも途中(5章あたり)から、やっぱり Ruby で書くなら?が知りたいと思って Ruby のデザインパターン本をお互いゲットして Java 本で勉強したパターンを Ruby 本でも読むというやり方に切り替えました。けれど Ruby 本は Java 本ほど分かりやすく書かれておらず…難しくて Ruby 本は挫折…結局 Java 本に専念しました。残念😢
そして、最後の方(18章あたり)はお互いのスケジュールの関係で同期的な読書会から、非同期で各自本を読んでチャットで意見交換するスタイルになったのですが、その頃に Ruby 本にもう一回挑戦してみようと思い読み始めたら想像以上にサクサク読めました。成長してる〜嬉しい😌
Java のデザインパターン本について
読みやすい文章で丁寧に解説が書かれている点やパターンごとの構成が統一されている点が分かりやすくて良かったです。慣れるまではシーケンス図やクラス図からプログラムをイメージするのが難しかったり、構成に戸惑ったりして読むのに時間が掛かりましたが、慣れてくると読むスピードがどんどん上がりました。
パターン内の構成は最初に概要があって、サンプルプログラムがあって、UML での解説や発展的な内容、補足に繋がっていく形なんですが、前半のサンプルプログラムを読んでるときは、どういうこと?🤔何でこうやって書くんだろう?🧐と疑問点が出てきて。でも後半の解説でその伏線を回収してくれるので、パターン内のページを行ったり来たりしているうちに納得感が増して、理解に落とし込むことができました。
あと関連するパターンの紹介では、最初の方は他のパターンを知らないので全然分からん…となってましが、後半はあぁ確に目的が違うだけで構造は似てるってことか。とか、この一部の実装を別のパターンで対応できるってことか。とか、分かるようになってきてデザインパターンの理解が進んでることを実感できましたし、過去のパターンを復習するキッカケになったりして良かったです。
物足りないところは実務で使う具体例が少ない点で、実際にどういう場面で使うんだろう?が分からないことが多かったので、ネットでサンプルコードを探して、実務で使うイメージが少しでも持てるよう努力をしました。
サンプルコードが良かった記事メモ
- 第9章 Bridge
Bridge パターン - Wikipedia - 第10章 Strategy
【Unity】Unityで学ぶStrategyパターン!モンスターに色んな技を使わせよう!【C#】【プログラム設計】 | サプライドの技術者BLOG - 第12章 Decorator
Decorator パターン - Wikipedia - 第14章 Chain of Responsibility
Ruby: Chain of Responsibilityパターンの解説(翻訳)|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社 - 第16章 Mediator
デザインパターンの使い方: Mediator (1/2):CodeZine(コードジン) - 第18章 Memento
Memento パターン - Wikipedia - 第21章 Proxy
Ruby: Proxyパターンの解説(翻訳)|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社
また、Java のサンプルプログラムを VSCode のエディタシェア機能を使って Ruby に書き直したりしました。シェア機能が思ったよりもサクッとできて楽しかったです。
GitHub - dobby618/design_patterns: 学習用「Java言語で学ぶデザインパターン入門」を Ruby で書き直す
Ruby のデザインパターン本について
初めて読んだときは読んでるうちに「いまなんの話をしてるんだ…?」になりやすく、難しく感じたので途中で挫折しましたが、Java 版を読み終えるころに再読したらスッと読むことができました。Ruby 版は Java 版に比べると具体例が豊富だったり、Ruby や Rails でどう使われているのか?の解説もあったりしてデザインパターンの理解が進みました。他にもブロックを渡す形やmethod_missing
、eval
など使ったサンプルプログラム、Ruby ならではの注意点なども書かれていたので読んで良かったなと思いました。
また、Ruby 版のサンプルコードは以下の記事にほぼそのまま掲載されているので、絶版で買えない方にも参考になると思います。ただ一度も書籍を読んでない人には少し難しいかもしれないです。
デザインパターン本を読んだ感想
ライブラリやクラス名にデザインパターンの名前が使われていると、それが何なのか?何のためにあるのか?どうやって使ってほしいと思って作られたものなのか?などの理解が俄然やり易くなりました。
あとパターン名はソースコードだけでなく、例えばサーバとクラアインとの間に置かれる Proxy サーバでも使われているので、キャッシュの保持はリモートプロキシの考え方で、セキュリティ面では防御プロキシだよねって理解できて、あぁこれもパターンだったのか💡という感じでパターンを通して新しい繋がりを見つけられるようになってきました。嬉し楽しい😆なのでデザインパターンを一度体系的に勉強できてホント良かったです。これからはデザインパターンを使いこなせるように精進したいです。
読書会の感想
デザインパターン読書会は朝の時間から始まり、一年かけて丁寧に読み進められて良かったなぁと思います。途中、時間がかかり過ぎて終わるのか…?と不安になったこともありましが、結果的に時間をかけたことで実務や他の本からも少しずつ影響を受けながらデザインパターンの理解を深掘れた気がします。後半は時間が合わなくて非同期に各自で読んでチャットで気になったことをシェアする形になりましが、katorie さんと一緒に声を出して読んでた時期が長かったので、一人で読んでても隣に katorie さんがいる感覚で楽しく読めました。またスケジュールがあったら何か読みたいです。
終わりに
長い間、読書会お疲れさまでした(^ω^)1人だと絶対挫折してただろうし、こんなに深く理解することもできなかったと思うので、katorie さんと一緒に読書会ができて良かったです。あと katorie さんとは技術力のレベル感が同じぐらいで、一緒に成長してく感じがとても楽しかったです。ありがとうございました😊