はらだっちのブログ

プロ意識を持ち続ける。その一環として学んだことをこのブログで日々アウトプットしていきます!

テスト駆動開発 第一部を読んだ感想

はじめに

最近、t_wadaさんのテスト駆動開発のライブコーディングのyoutube動画を見る機会がありました。この前読んだちょうぜつ本にFizzbuzz問題テスト駆動開発が載っていたのでやり方のイメージはついていましたが、実際にライブコーディングを見るとコーダーの頭の中がとても良く分かり有益な動画でした。そちらに触発されて本家のテスト駆動開発本を読破したくなってしまったので読んでみました。

読んだ期間

  • 第一部 約250ページ 約6時間(2日間に分けて読んだ)
  • 技術書にしてはサクサク読めるなと思いました

感想

  • 「はじめに」の中で「有機的に設計を進められるようになる」という言葉がありました。有機的の辞書は「有機体のように、多くの部分から成り立ちながらも、各部分の間に密接な関連や統一があり、全体としてうまくまとまっているさま」。そうそう、やりたいことってこれなんだよと思い読む前にワクワクしました。

  • progateや良いコード悪いコード本やちょうぜつ本、設計原則本を読んでjavaに触れてたおかげで特に苦にならずに読めました。途中の重複削除でインターフェースを使ってポリモーフィズムを実現したりする部分はUMLを学んだからこそつまずくことがすくなかったです。けど、GoFデザインパターン以外でもImposterパターンとか知らない用語が出て来て、そこは学びになりました。

  • 通化して継承させてみたプログラムが、実は最終的には親クラスにすべて移行した方がすっきりすることが分かって予想外でした。最初からきれいなプログラムなんて書けない。やってみて、視座が上がって、もっと重複削除・改善していけるってことに気づかされました。

  • 12章が一番衝撃だったかもです。メタファーを考えるというのが自分の中で一番難しいと感じています。具体と抽象の行き来の話だと思うが、自分は具体例を出すのは出来てると思います。しかしそれを抽象化するのがとても苦手です。これについて、メタファーを考えることで、設計に意味を見出せることがとても学びでした。この本だと、お金を足したり引いたりするのには「式(Expression)」、両替には「銀行」といったメタファーが出て来ます。最初読んだときは一発で理解できませんでしたが、このように役割をメタファーで定義することにより、Expressionにreduce(変形=両替)を持たせるという直感的に分かりにくいオブジェクトを作ることを避けることが出来ました。データモデリングとはまた抽象化の切り口が異なりますが、ドメイン駆動設計とは同一の考え方な気がしました。

  • 最終的に、自分が予想していた(というかどう実装するか全く想像できてない)コードとは全く異なるコードに着地しました。もし自分が(いつものようにTDDを使わずに)コードを書いていたら、ドルとフランを計算するという具体的なロジックを作成した後、そのままどうすればいいか手が止まって終わってしまっただろうな。これを三角測量等を駆使してテスト駆動でやりたいことを少しづつ段階的に追加していくことで、最終的に複雑度の低いコードにたどり着くことが出来ることがとても理解できました。

おわりに

私はJavaのコーディングをしたことが無いのですが、サクサクと読めました。2023年に色々な本を読んみ、予備知識が着実に付いてきていることを実感できました。そしてこの後の章を読むのもとても楽しみです。また、読んだらブログ記事にしたいと思います。